From b67cc288a913e611d1e96582d395ac75a7d9ba84 Mon Sep 17 00:00:00 2001 From: RV DevOps Date: Thu, 24 Aug 2023 11:08:22 +0000 Subject: [PATCH] gh-pages: Updated the website --- .github/actions/with-docker/action.yml | 87 - .github/workflows/Dockerfile | 61 - .github/workflows/Dockerfile.z3 | 22 - .github/workflows/master-push.yml | 178 - .github/workflows/test-pr.yml | 286 - .github/workflows/update-foundry-prove.yml | 58 - .github/workflows/update-version.yml | 69 - .gitignore | 32 - .gitmodules | 19 - INSTALL.md | 25 - INSTALL/index.html | 223 + LICENSE | 29 - Makefile | 520 - README.md | 383 - VERIFICATION.md | 113 - VERIFICATION/index.html | 282 + _config.yml | 1 - ...irefly-Download-Icon-Inverted.32636383.png | Bin 0 -> 571 bytes assets/css/Firefly-Download-Icon.8094a4f0.png | Bin 0 -> 586 bytes assets/css/fontawesome-webfont.0caf0c90.ttf | Bin 0 -> 165548 bytes assets/css/fontawesome-webfont.3981e506.eot | Bin 0 -> 165742 bytes assets/css/fontawesome-webfont.58488e7e.woff2 | Bin 0 -> 77160 bytes assets/css/fontawesome-webfont.a9323ae9.svg | 1 + assets/css/fontawesome-webfont.ed962b83.woff | Bin 0 -> 98024 bytes assets/css/iconfont.960c72b2.eot | Bin 0 -> 2216 bytes assets/css/iconfont.a07d77e0.woff2 | Bin 0 -> 892 bytes assets/css/iconfont.b2a06094.woff | Bin 0 -> 1296 bytes assets/css/index.css | 1 + assets/css/owl.video.play.e7a23fb2.png | Bin 0 -> 2794 bytes assets/css/select-arrow.b8e89c0c.svg | 1 + .../assets => assets}/img/404.png | Bin .../assets => assets}/img/500.png | Bin .../img/hero/kerc20-hero-image.png | Bin .../img/hero/test-coverage-hero-image.png | Bin .../img/hero/test-runner-hero-image.png | Bin .../assets => assets}/img/rv-logo-dark.png | Bin .../assets => assets}/img/rv-logo.png | Bin assets/js/index.js | 212 + assets/sass/icons/iconfont.css | 36 + assets/sass/icons/iconfont.eot | Bin 0 -> 2216 bytes assets/sass/icons/iconfont.svg | 30 + assets/sass/icons/iconfont.ttf | Bin 0 -> 2048 bytes assets/sass/icons/iconfont.woff | Bin 0 -> 1296 bytes assets/sass/icons/iconfont.woff2 | Bin 0 -> 884 bytes bin/kevm | 12 - cmake/node/CMakeLists.txt | 86 - cmake/version.h | 1 - deps/blockchain-k-plugin_release | 1 - deps/k_release | 1 - deps/pyk_release | 1 - flake.lock | 2090 --- flake.nix | 254 - include/kframework/abi.md | 827 - include/kframework/abi/index.html | 986 ++ include/kframework/asm.md | 202 - include/kframework/asm/index.html | 376 + include/kframework/buf.md | 54 - include/kframework/buf/index.html | 237 + include/kframework/data.md | 23 - include/kframework/data/index.html | 206 + include/kframework/driver.md | 575 - include/kframework/driver/index.html | 731 + include/kframework/edsl.md | 34 - include/kframework/edsl/index.html | 220 + include/kframework/evm-imp-specs.md | 144 - include/kframework/evm-imp-specs/index.html | 341 + include/kframework/evm-node.md | 366 - include/kframework/evm-node/index.html | 526 + include/kframework/evm-types.md | 469 - include/kframework/evm-types/index.html | 699 + include/kframework/evm.md | 2345 --- include/kframework/evm/index.html | 2680 ++++ include/kframework/foundry.md | 1536 -- include/kframework/foundry/index.html | 1688 +++ include/kframework/gas.md | 264 - include/kframework/gas/index.html | 456 + include/kframework/hashed-locations.md | 95 - .../kframework/hashed-locations/index.html | 257 + include/kframework/issues.md | 131 - include/kframework/issues/index.html | 353 + include/kframework/json-rpc.md | 126 - include/kframework/json-rpc/index.html | 312 + .../lemmas/bitwise-simplification.k | 55 - .../kframework/lemmas/bytes-simplification.k | 241 - .../lemmas/evm-int-simplification.k | 55 - .../kframework/lemmas/int-simplification.k | 204 - include/kframework/lemmas/lemmas.k | 222 - include/kframework/network.md | 123 - include/kframework/network/index.html | 332 + include/kframework/optimizations.md | 290 - include/kframework/optimizations/index.html | 476 + include/kframework/schedule.md | 348 - include/kframework/schedule/index.html | 598 + include/kframework/serialization.md | 696 - include/kframework/serialization/index.html | 925 ++ include/kframework/state-utils.md | 455 - include/kframework/state-utils/index.html | 648 + include/kframework/word.md | 571 - include/kframework/word/index.html | 764 + index.html | 605 + kevm-pyk/.cruft.json | 18 - kevm-pyk/.flake8 | 7 - kevm-pyk/.gitignore | 3 - kevm-pyk/Makefile | 100 - kevm-pyk/poetry.lock | 1051 -- kevm-pyk/pyproject.toml | 62 - kevm-pyk/src/kevm_pyk/__init__.py | 0 kevm-pyk/src/kevm_pyk/__main__.py | 696 - kevm-pyk/src/kevm_pyk/cli.py | 341 - kevm-pyk/src/kevm_pyk/config.py | 48 - kevm-pyk/src/kevm_pyk/gst_to_kore.py | 79 - kevm-pyk/src/kevm_pyk/interpreter.py | 32 - kevm-pyk/src/kevm_pyk/kevm.py | 482 - kevm-pyk/src/kevm_pyk/kompile.py | 197 - kevm-pyk/src/kevm_pyk/py.typed | 0 kevm-pyk/src/kevm_pyk/utils.py | 340 - kevm-pyk/src/kontrol/__init__.py | 0 kevm-pyk/src/kontrol/__main__.py | 663 - kevm-pyk/src/kontrol/foundry.py | 1298 -- kevm-pyk/src/kontrol/solc_to_k.py | 720 - kevm-pyk/src/tests/__init__.py | 0 kevm-pyk/src/tests/conftest.py | 33 - kevm-pyk/src/tests/integration/__init__.py | 0 kevm-pyk/src/tests/integration/conftest.py | 17 - .../test-data/contracts.k.expected | 7576 --------- .../integration/test-data/examples/ERC20.sol | 94 - .../integration/test-data/examples/ERC721.sol | 982 -- .../integration/test-data/examples/Empty.sol | 4 - .../test-data/examples/Storage.sol | 98 - .../integration/test-data/foundry-bmc-all | 2 - .../integration/test-data/foundry-bmc-skip | 1 - .../tests/integration/test-data/foundry-fail | 7 - .../integration/test-data/foundry-prove-all | 295 - .../integration/test-data/foundry-prove-skip | 220 - .../tests/integration/test-data/foundry-show | 12 - .../integration/test-data/foundry.k.expected | 601 - .../test-data/foundry/foundry.toml | 6 - .../test-data/foundry/src/Constants.sol | 5 - .../test-data/foundry/src/Contract.sol | 4 - .../test-data/foundry/src/EmitContract.sol | 10 - .../test-data/foundry/src/KEVMCheats.sol | 38 - .../test-data/foundry/src/MyIERC20.sol | 22 - .../test-data/foundry/src/MyToken.sol | 22 - .../test-data/foundry/src/OwnerOnlyUp.sol | 20 - .../test-data/foundry/src/Prank.sol | 24 - .../test-data/foundry/src/Safe.sol | 10 - .../test-data/foundry/src/TestNumber.sol | 20 - .../test-data/foundry/src/Token.sol | 31 - .../foundry/test/AccountParamsTest.t.sol | 76 - .../test-data/foundry/test/AddrTest.t.sol | 48 - .../foundry/test/AllowChangesTest.t.sol | 64 - .../test-data/foundry/test/Arithmetic.t.sol | 146 - .../test-data/foundry/test/AssumeTest.t.sol | 44 - .../test-data/foundry/test/BMCLoops.t.sol | 31 - .../foundry/test/BlockParamsTest.t.sol | 38 - .../foundry/test/BroadcastTest.t.sol | 49 - .../test-data/foundry/test/Contract.t.sol | 10 - .../foundry/test/ContractBTest.t.sol | 26 - .../test-data/foundry/test/CounterTest.t.sol | 43 - .../test-data/foundry/test/DynamicTypes.t.sol | 13 - .../foundry/test/EmitContractTest.t.sol | 39 - .../test-data/foundry/test/EnvTest.t.sol | 170 - .../foundry/test/ExpectCallTest.t.sol | 55 - .../foundry/test/ExpectRevertTest.t.sol | 147 - .../test-data/foundry/test/FfiTest.t.sol | 57 - .../test-data/foundry/test/FilesTest.t.sol | 33 - .../test-data/foundry/test/ForkTest.t.sol | 86 - .../test-data/foundry/test/GasTest.t.sol | 18 - .../test-data/foundry/test/GetCodeTest.t.sol | 28 - .../test-data/foundry/test/LabelTest.t.sol | 13 - .../test-data/foundry/test/Loops.t.sol | 278 - .../foundry/test/MethodDisambiguate.t.sol | 22 - .../test-data/foundry/test/MockCallTest.t.sol | 45 - .../test-data/foundry/test/NoImports.t.sol | 15 - .../foundry/test/OwnerOnlyUpTest.t.sol | 30 - .../foundry/test/PlainPrankTest.t.sol | 79 - .../test-data/foundry/test/PrankTest.t.sol | 56 - .../foundry/test/Preconditions.t.sol | 19 - .../foundry/test/RecordLogsTest.t.sol | 22 - .../test-data/foundry/test/SafeTest.t.sol | 34 - .../test-data/foundry/test/SetUp2Test.t.sol | 24 - .../test-data/foundry/test/SetUpDeploy.t.sol | 35 - .../test-data/foundry/test/SetUpTest.t.sol | 41 - .../test-data/foundry/test/SignTest.t.sol | 25 - .../test-data/foundry/test/Simple.t.sol | 65 - .../test-data/foundry/test/SnapshotTest.t.sol | 34 - .../test-data/foundry/test/StoreTest.t.sol | 110 - .../foundry/test/SymbolicStorageTest.t.sol | 33 - .../test-data/foundry/test/ToStringTest.t.sol | 44 - .../test-data/foundry/test/TypeTest.t.sol | 566 - .../test-data/gas-abstraction.expected | 1470 -- .../src/tests/integration/test-data/lemmas.k | 67 - ...ssertTest.testFail_assert_false().expected | 681 - ...AssertTest.testFail_assert_true().expected | 903 -- ...sertTest.testFail_expect_revert().expected | 1359 -- .../AssertTest.test_assert_false().expected | 903 -- .../AssertTest.test_assert_true().expected | 681 - ...Test.test_failing_branch(uint256).expected | 1803 --- ...st_revert_branch(uint256,uint256).expected | 1822 --- ...ail_assume_false(uint256,uint256).expected | 1366 -- ...Fail_assume_true(uint256,uint256).expected | 2036 --- ...est_assume_false(uint256,uint256).expected | 2275 --- .../show/LoopsTest.sum_N(uint256).expected | 2106 --- ...etUpDeployTest.test_extcodesize().expected | 735 - .../src/tests/integration/test_conformance.py | 120 - .../tests/integration/test_foundry_prove.py | 356 - kevm-pyk/src/tests/integration/test_kast.py | 23 - kevm-pyk/src/tests/integration/test_prove.py | 293 - kevm-pyk/src/tests/integration/test_run.py | 38 - .../src/tests/integration/test_solc_to_k.py | 38 - kevm-pyk/src/tests/integration/utils.py | 33 - kevm-pyk/src/tests/profiling/__init__.py | 0 .../profiling/test-data/foundry/foundry.toml | 4 - .../test-data/foundry/test/Simple.t.sol | 15 - .../src/tests/profiling/test_foundry_prove.py | 53 - .../src/tests/profiling/test_gst_to_kore.py | 22 - kevm-pyk/src/tests/profiling/utils.py | 10 - kevm-pyk/src/tests/unit/__init__.py | 0 .../AssertTest.setUp()/kcfg/kcfg.json | 1 - .../AssertTest.setUp()/kcfg/nodes/1.json | 1 - .../AssertTest.setUp()/kcfg/nodes/2.json | 1 - .../AssertTest.setUp()/kcfg/nodes/3.json | 1 - .../AssertTest.setUp()/kcfg/nodes/4.json | 1 - .../AssertTest.setUp()/kcfg/nodes/5.json | 1 - .../apr_proofs/AssertTest.setUp()/proof.json | 1 - .../kcfg/kcfg.json | 1 - .../kcfg/nodes/1.json | 1 - .../kcfg/nodes/2.json | 1 - .../kcfg/nodes/3.json | 1 - .../kcfg/nodes/4.json | 1 - .../kcfg/nodes/5.json | 1 - .../proof.json | 1 - .../kcfg/kcfg.json | 1 - .../kcfg/nodes/1.json | 1 - .../kcfg/nodes/2.json | 1 - .../kcfg/nodes/3.json | 1 - .../kcfg/nodes/4.json | 1 - .../kcfg/nodes/5.json | 1 - .../proof.json | 1 - .../kcfg/kcfg.json | 1 - .../kcfg/nodes/1.json | 1 - .../kcfg/nodes/2.json | 1 - .../kcfg/nodes/3.json | 1 - .../kcfg/nodes/4.json | 1 - .../kcfg/nodes/5.json | 1 - .../AssertTest.test_assert_false()/proof.json | 1 - .../kcfg/kcfg.json | 1 - .../kcfg/nodes/1.json | 1 - .../kcfg/nodes/2.json | 1 - .../kcfg/nodes/3.json | 1 - .../kcfg/nodes/4.json | 1 - .../kcfg/nodes/5.json | 1 - .../AssertTest.test_assert_true()/proof.json | 1 - .../foundry-list/foundry-list.expected | 54 - kevm-pyk/src/tests/unit/test_foundry_list.py | 67 - kevm-pyk/src/tests/unit/test_gst_to_kore.py | 46 - kevm-pyk/src/tests/unit/test_solc_to_k.py | 67 - kevm-pyk/src/tests/unit/utils.py | 10 - kevm-pyk/src/tests/utils.py | 10 - macos-envrc | 7 - media/201710-presentation-devcon3.md | 550 - media/201710-presentation-devcon3/index.html | 961 ++ media/201801-presentation-csf.md | 518 - media/201801-presentation-csf/index.html | 963 ++ media/201905-exercise-k-workshop.md | 142 - media/201905-exercise-k-workshop/index.html | 390 + media/201908-trufflecon-firefly.md | 180 - media/201908-trufflecon-firefly/index.html | 422 + media/201908-trufflecon-workshop.md | 190 - media/201908-trufflecon-workshop/index.html | 450 + media/201908-trufflecon/add-gas-spec.k | 14 - media/201908-trufflecon/add-overflow-spec.k | 14 - media/201908-trufflecon/add-spec.k | 15 - media/201908-trufflecon/addition.evm | 9 - media/201908-trufflecon/kevm-ltl.md | 169 - media/201908-trufflecon/kevm-ltl/index.html | 347 + media/citations.md | 1151 -- media/citations/index.html | 1563 ++ media/images/k-overview.png | Bin 267041 -> 0 bytes media/images/proof-system.png | Bin 125057 -> 0 bytes node/plugin-c/blockchain.cpp | 100 - node/plugin-c/world.cpp | 103 - node/plugin-c/world.h | 17 - node/proto/VERSION | 1 - node/proto/msg.proto | 162 - node/vm/init.cpp | 54 - node/vm/init.h | 73 - node/vm/kevm/semantics.cpp | 77 - node/vm/kevm/semantics.h | 62 - node/vm/main.cpp | 110 - node/vm/vm.cpp | 355 - node/vm/vm.h | 64 - optimizer/build-spec.py | 133 - optimizer/optimizations.md | 30 - optimizer/optimizations/index.html | 216 + optimizer/optimize-spec.k.tmpl | 24 - optimizer/optimize.sh | 179 - package/debian/Dockerfile.test | 34 - package/debian/changelog | 6 - package/debian/compat | 1 - package/debian/control.jammy | 16 - package/debian/package | 16 - package/debian/rules | 34 - package/docker/Dockerfile | 50 - package/nix/profile.nix | 35 - package/nix/profile.py | 86 - package/test-package.sh | 47 - package/version | 1 - package/version.sh | 41 - sitemap.xml | 111 + tests/failing-symbolic.haskell | 7 - tests/failing-symbolic.haskell-dry-run | 1 - tests/failing-symbolic.pyk | 26 - tests/failing.haskell | 2 - tests/failing.llvm | 1 - .../failing/ContractCreationSpam_d0g0v0.json | 110 - .../ContractCreationSpam_d0g0v0.json.expected | 299 - ...decallcodecall_110_OOGMAfter_2_d0g0v0.json | 153 - ...ecall_110_OOGMAfter_2_d0g0v0.json.expected | 339 - tests/foundry/bmc-tests | 3 - tests/foundry/checkoutput | 13 - tests/foundry/contracts.k.check.expected | 7465 --------- tests/foundry/exclude | 215 - tests/foundry/foundry-list.check.expected | 764 - tests/foundry/foundry.k.check.expected | 633 - tests/foundry/foundry.toml | 6 - ...ssertTest.testFail_assert_false().expected | 678 - ...AssertTest.testFail_assert_true().expected | 901 -- ...sertTest.testFail_expect_revert().expected | 1354 -- .../AssertTest.test_assert_false().expected | 898 -- .../AssertTest.test_assert_true().expected | 0 ...Test.test_failing_branch(uint256).expected | 1799 --- ...st_revert_branch(uint256,uint256).expected | 1814 --- ...ail_assume_false(uint256,uint256).expected | 1360 -- ...Fail_assume_true(uint256,uint256).expected | 2030 --- ...est_assume_false(uint256,uint256).expected | 2265 --- .../golden/LoopsTest.sum_N(uint256).expected | 2106 --- ...etUpDeployTest.test_extcodesize().expected | 735 - tests/foundry/lemmas.k | 67 - tests/foundry/src/Constants.sol | 5 - tests/foundry/src/Contract.sol | 4 - tests/foundry/src/EmitContract.sol | 10 - tests/foundry/src/KEVMCheats.sol | 314 - tests/foundry/src/MyIERC20.sol | 22 - tests/foundry/src/MyToken.sol | 22 - tests/foundry/src/OwnerOnlyUp.sol | 20 - tests/foundry/src/Prank.sol | 24 - tests/foundry/src/Safe.sol | 10 - tests/foundry/src/TestNumber.sol | 20 - tests/foundry/src/Token.sol | 31 - tests/foundry/test/AccountParamsTest.t.sol | 76 - tests/foundry/test/AddrTest.t.sol | 48 - tests/foundry/test/AllowChangesTest.t.sol | 64 - tests/foundry/test/Ambiguous.t.sol | 24 - tests/foundry/test/Arithmetic.t.sol | 146 - tests/foundry/test/AssumeTest.t.sol | 44 - tests/foundry/test/BMCLoops.t.sol | 31 - tests/foundry/test/BlockParamsTest.t.sol | 38 - tests/foundry/test/BroadcastTest.t.sol | 49 - tests/foundry/test/Contract.t.sol | 10 - tests/foundry/test/ContractBTest.t.sol | 26 - tests/foundry/test/CounterTest.t.sol | 43 - tests/foundry/test/DynamicTypes.t.sol | 13 - tests/foundry/test/EmitContractTest.t.sol | 39 - tests/foundry/test/EnvTest.t.sol | 170 - tests/foundry/test/ExpectCallTest.t.sol | 55 - tests/foundry/test/ExpectRevertTest.t.sol | 147 - tests/foundry/test/FfiTest.t.sol | 57 - tests/foundry/test/FilesTest.t.sol | 33 - tests/foundry/test/ForkTest.t.sol | 86 - tests/foundry/test/FreshInt.t.sol | 37 - tests/foundry/test/GasTest.t.sol | 18 - tests/foundry/test/GetCodeTest.t.sol | 28 - tests/foundry/test/LabelTest.t.sol | 13 - tests/foundry/test/Loops.t.sol | 278 - tests/foundry/test/MethodDisambiguate.t.sol | 22 - tests/foundry/test/MockCallTest.t.sol | 45 - tests/foundry/test/NoImports.t.sol | 15 - tests/foundry/test/OwnerOnlyUpTest.t.sol | 30 - tests/foundry/test/PlainPrankTest.t.sol | 79 - tests/foundry/test/PrankTest.t.sol | 56 - tests/foundry/test/Preconditions.t.sol | 19 - tests/foundry/test/RecordLogsTest.t.sol | 22 - tests/foundry/test/SafeTest.t.sol | 34 - tests/foundry/test/SetUp2Test.t.sol | 24 - tests/foundry/test/SetUpDeploy.t.sol | 35 - tests/foundry/test/SetUpTest.t.sol | 41 - tests/foundry/test/SignTest.t.sol | 25 - tests/foundry/test/Simple.t.sol | 65 - tests/foundry/test/SnapshotTest.t.sol | 34 - tests/foundry/test/StoreTest.t.sol | 110 - tests/foundry/test/SymbolicStorageTest.t.sol | 33 - tests/foundry/test/ToStringTest.t.sol | 44 - tests/foundry/test/TypeTest.t.sol | 566 - tests/foundry/test/file.txt | 3 - tests/foundry/test/myscript.sh | 2 - tests/foundry/test/script.sh | 7 - .../CallRecursiveContract_d0g0v0.json | 758 - ...cursiveContract_d0g0v0.json.parse-expected | 1 - tests/interactive/log3_MaxTopic_d0g0v0.json | 612 - .../log3_MaxTopic_d0g0v0.json.parse-expected | 1 - .../interactive/search/branching-invalid.evm | 13 - .../branching-invalid.evm.search-expected | 1 - .../search/branching-no-invalid.evm | 13 - .../branching-no-invalid.evm.search-expected | 1 - .../search/straight-line-no-invalid.evm | 7 - ...raight-line-no-invalid.evm.search-expected | 1 - tests/interactive/search/straight-line.evm | 7 - .../search/straight-line.evm.search-expected | 1 - tests/interactive/sumTo10.evm | 35 - tests/interactive/sumTo10.evm.parse-expected | 1 - .../vmLogTest/log3.gst-to-kore.expected | 1 - tests/slow.haskell | 368 - tests/slow.llvm | 2 - tests/specs/benchmarks/README.md | 2 - tests/specs/benchmarks/address00-spec.k | 126 - tests/specs/benchmarks/address00.sol | 7 - tests/specs/benchmarks/bytes00-spec.k | 127 - tests/specs/benchmarks/bytes00.sol | 7 - .../benchmarks/ecrecover00-siginvalid-spec.k | 135 - .../benchmarks/ecrecover00-sigvalid-spec.k | 135 - tests/specs/benchmarks/ecrecover00.sol | 8 - .../ecrecoverloop00-sig0-invalid-spec.k | 139 - .../ecrecoverloop00-sig1-invalid-spec.k | 141 - .../ecrecoverloop00-sigs-valid-spec.k | 142 - tests/specs/benchmarks/ecrecoverloop00.sol | 9 - .../ecrecoverloop02-sig0-invalid-spec.k | 142 - .../ecrecoverloop02-sig1-invalid-spec.k | 143 - .../ecrecoverloop02-sigs-valid-spec.k | 145 - tests/specs/benchmarks/ecrecoverloop02.sol | 10 - tests/specs/benchmarks/encode-keccak00-spec.k | 127 - tests/specs/benchmarks/encode-keccak00.sol | 6 - .../benchmarks/encodepacked-keccak01-spec.k | 126 - .../benchmarks/encodepacked-keccak01.sol | 6 - tests/specs/benchmarks/functional-spec.k | 120 - tests/specs/benchmarks/index.html | 181 + tests/specs/benchmarks/keccak00-spec.k | 127 - tests/specs/benchmarks/keccak00.sol | 6 - .../benchmarks/overflow00-nooverflow-spec.k | 126 - .../benchmarks/overflow00-overflow-spec.k | 126 - tests/specs/benchmarks/overflow00.sol | 7 - .../specs/benchmarks/requires01-a0gt0-spec.k | 123 - .../specs/benchmarks/requires01-a0le0-spec.k | 122 - tests/specs/benchmarks/requires01.sol | 8 - tests/specs/benchmarks/staticarray00-spec.k | 128 - tests/specs/benchmarks/staticarray00.sol | 7 - .../benchmarks/staticloop00-a0lt10-spec.k | 126 - tests/specs/benchmarks/staticloop00.sol | 11 - tests/specs/benchmarks/storagevar00-spec.k | 119 - tests/specs/benchmarks/storagevar00.sol | 8 - tests/specs/benchmarks/storagevar01-spec.k | 121 - tests/specs/benchmarks/storagevar01.sol | 9 - .../benchmarks/storagevar02-nooverflow-spec.k | 124 - .../benchmarks/storagevar02-overflow-spec.k | 122 - tests/specs/benchmarks/storagevar02.sol | 9 - tests/specs/benchmarks/storagevar03-spec.k | 121 - tests/specs/benchmarks/storagevar03.sol | 10 - tests/specs/benchmarks/verification.k | 154 - tests/specs/bihu/collectToken-spec.k | 332 - .../bihu/forwardToHotWallet-failure-1-spec.k | 119 - .../bihu/forwardToHotWallet-failure-2-spec.k | 119 - .../bihu/forwardToHotWallet-failure-3-spec.k | 119 - .../bihu/forwardToHotWallet-failure-4-spec.k | 119 - .../bihu/forwardToHotWallet-success-1-spec.k | 125 - .../bihu/forwardToHotWallet-success-2-spec.k | 125 - tests/specs/bihu/functional-spec.k | 15 - tests/specs/bihu/verification.k | 104 - tests/specs/erc20/ds/allowance-spec.k | 108 - tests/specs/erc20/ds/approve-failure-spec.k | 109 - tests/specs/erc20/ds/approve-success-spec.k | 114 - tests/specs/erc20/ds/balanceOf-spec.k | 107 - tests/specs/erc20/ds/totalSupply-spec.k | 106 - .../erc20/ds/transfer-failure-1-a-spec.k | 120 - .../erc20/ds/transfer-failure-1-b-spec.k | 120 - .../erc20/ds/transfer-failure-1-c-spec.k | 120 - .../erc20/ds/transfer-failure-2-a-spec.k | 116 - .../erc20/ds/transfer-failure-2-b-spec.k | 116 - .../specs/erc20/ds/transfer-success-1-spec.k | 122 - .../specs/erc20/ds/transfer-success-2-spec.k | 117 - .../erc20/ds/transferFrom-failure-1-a-spec.k | 127 - .../erc20/ds/transferFrom-failure-1-b-spec.k | 127 - .../erc20/ds/transferFrom-failure-1-c-spec.k | 127 - .../erc20/ds/transferFrom-failure-1-d-spec.k | 127 - .../erc20/ds/transferFrom-failure-2-a-spec.k | 122 - .../erc20/ds/transferFrom-failure-2-b-spec.k | 122 - .../erc20/ds/transferFrom-failure-2-c-spec.k | 122 - .../erc20/ds/transferFrom-success-1-spec.k | 130 - .../erc20/ds/transferFrom-success-2-spec.k | 124 - tests/specs/erc20/evm-symbolic.k | 60 - tests/specs/erc20/functional-spec.k | 14 - tests/specs/erc20/hkg/allowance-spec.k | 108 - tests/specs/erc20/hkg/approve-spec.k | 109 - tests/specs/erc20/hkg/balanceOf-spec.k | 107 - tests/specs/erc20/hkg/totalSupply-spec.k | 105 - .../specs/erc20/hkg/transfer-failure-1-spec.k | 115 - .../specs/erc20/hkg/transfer-failure-2-spec.k | 112 - .../specs/erc20/hkg/transfer-success-1-spec.k | 116 - .../specs/erc20/hkg/transfer-success-2-spec.k | 113 - .../erc20/hkg/transferFrom-failure-1-spec.k | 121 - .../erc20/hkg/transferFrom-failure-2-spec.k | 116 - .../erc20/hkg/transferFrom-success-1-spec.k | 123 - .../erc20/hkg/transferFrom-success-2-spec.k | 119 - tests/specs/erc20/verification.k | 13 - tests/specs/examples/ERC20.sol | 94 - tests/specs/examples/ERC721.sol | 982 -- tests/specs/examples/Empty.sol | 4 - tests/specs/examples/Storage.sol | 98 - tests/specs/examples/erc20-spec.md | 225 - tests/specs/examples/erc20-spec/index.html | 437 + tests/specs/examples/erc721-spec.md | 143 - tests/specs/examples/erc721-spec/index.html | 338 + tests/specs/examples/solidity-code-spec.md | 251 - .../examples/solidity-code-spec/index.html | 467 + tests/specs/examples/storage-spec.md | 140 - tests/specs/examples/storage-spec/index.html | 342 + tests/specs/examples/sum-to-n-foundry-spec.k | 70 - tests/specs/examples/sum-to-n-spec.k | 71 - .../functional/evm-int-simplifications-spec.k | 24 - tests/specs/functional/infinite-gas-spec.k | 128 - .../functional/int-simplifications-spec.k | 39 - tests/specs/functional/lemmas-no-smt-spec.k | 44 - tests/specs/functional/lemmas-spec.k | 423 - tests/specs/functional/merkle-spec.k | 85 - tests/specs/functional/storageRoot-spec.k | 76 - tests/specs/mcd/bin_runtime.k | 126 - tests/specs/mcd/cat-exhaustiveness-spec.k | 96 - .../specs/mcd/cat-file-addr-pass-rough-spec.k | 113 - tests/specs/mcd/dai-adduu-fail-rough-spec.k | 107 - tests/specs/mcd/dai-symbol-pass-spec.k | 99 - .../mcd/dstoken-approve-fail-rough-spec.k | 116 - .../mcd/dstoken-burn-self-fail-rough-spec.k | 135 - .../dstoken-transferfrom-fail-rough-spec.k | 134 - .../specs/mcd/dsvalue-peek-pass-rough-spec.k | 109 - tests/specs/mcd/dsvalue-read-pass-spec.k | 111 - .../mcd/dsvalue-read-pass-summarize-spec.k | 140 - tests/specs/mcd/end-cash-pass-rough-spec.k | 477 - tests/specs/mcd/end-pack-pass-rough-spec.k | 478 - tests/specs/mcd/end-subuu-pass-spec.k | 102 - .../flapper-tend-guy-diff-pass-rough-spec.k | 551 - .../specs/mcd/flapper-yank-pass-rough-spec.k | 301 - .../mcd/flipper-addu48u48-fail-rough-spec.k | 107 - .../specs/mcd/flipper-bids-pass-rough-spec.k | 143 - tests/specs/mcd/flipper-tau-pass-spec.k | 104 - tests/specs/mcd/flipper-ttl-pass-spec.k | 103 - tests/specs/mcd/flopper-cage-pass-spec.k | 115 - ...-dent-guy-diff-tic-not-0-pass-rough-spec.k | 517 - .../flopper-dent-guy-same-pass-rough-spec.k | 366 - .../specs/mcd/flopper-file-pass-rough-spec.k | 124 - .../specs/mcd/flopper-kick-pass-rough-spec.k | 257 - .../specs/mcd/flopper-tick-pass-rough-spec.k | 228 - tests/specs/mcd/functional-spec.k | 142 - .../specs/mcd/gemjoin-exit-pass-rough-spec.k | 409 - tests/specs/mcd/pot-join-pass-rough-spec.k | 485 - tests/specs/mcd/storage.k | 375 - tests/specs/mcd/vat-addui-fail-rough-spec.k | 107 - tests/specs/mcd/vat-addui-pass-spec.k | 106 - .../specs/mcd/vat-deny-diff-fail-rough-spec.k | 122 - .../specs/mcd/vat-flux-diff-pass-rough-spec.k | 317 - tests/specs/mcd/vat-fold-pass-rough-spec.k | 352 - .../specs/mcd/vat-fork-diff-pass-rough-spec.k | 497 - .../vat-frob-diff-zero-dart-pass-rough-spec.k | 387 - tests/specs/mcd/vat-move-diff-rough-spec.k | 315 - tests/specs/mcd/vat-mului-pass-spec.k | 107 - tests/specs/mcd/vat-muluu-pass-spec.k | 104 - tests/specs/mcd/vat-slip-pass-rough-spec.k | 216 - tests/specs/mcd/vat-subui-fail-rough-spec.k | 107 - tests/specs/mcd/vat-subui-pass-rough-spec.k | 103 - tests/specs/mcd/vat-subui-pass-spec.k | 109 - tests/specs/mcd/verification.k | 483 - .../mcd/vow-cage-deficit-pass-rough-spec.k | 950 -- .../mcd/vow-cage-surplus-pass-rough-spec.k | 951 -- tests/specs/mcd/vow-fess-fail-rough-spec.k | 221 - tests/specs/mcd/vow-flog-fail-rough-spec.k | 320 - tests/specs/mcd/word-pack.k | 175 - tests/specs/opcodes/create-spec.k | 155 - tests/specs/opcodes/verification.k | 38 - tests/specs/smoke | 49 - tests/templates/output-success-haskell.json | 170 - tests/templates/output-success-java.json | 170 - tests/templates/output-success-llvm.json | 173 - tests/vm/accesslist_proto.bin | Bin 259 -> 0 bytes tests/vm/accesslist_proto.bin.expected | Bin 471 -> 0 bytes tests/vm/hello_proto.bin | Bin 15 -> 0 bytes tests/vm/hello_proto.bin.expected | 0 tests/vm/proto_tester.cpp | 75 - web/.gitignore | 2 - web/.nvmrc | 1 - web/README.md | 9 - web/build-html.js | 23 - web/k-web-theme | 1 - web/package-lock.json | 12660 ---------------- web/package.json | 27 - web/public_content/.gitignore | 6 - web/sitemap/build-sitemap.js | 11 - web/static_content/html/404.html | 0 web/static_content/html/500.html | 0 web/static_content/html/include/footer.html | 1 - web/static_content/html/include/ga.html | 13 - web/static_content/html/include/head.html | 44 - web/static_content/html/include/header.html | 25 - web/static_content/html/include/sidebar.html | 29 - web/static_content/html/page_template.html | 33 - 602 files changed, 22390 insertions(+), 127465 deletions(-) delete mode 100644 .github/actions/with-docker/action.yml delete mode 100644 .github/workflows/Dockerfile delete mode 100644 .github/workflows/Dockerfile.z3 delete mode 100644 .github/workflows/master-push.yml delete mode 100644 .github/workflows/test-pr.yml delete mode 100644 .github/workflows/update-foundry-prove.yml delete mode 100644 .github/workflows/update-version.yml delete mode 100644 .gitignore delete mode 100644 .gitmodules delete mode 100644 INSTALL.md create mode 100644 INSTALL/index.html delete mode 100644 LICENSE delete mode 100644 Makefile delete mode 100644 README.md delete mode 100644 VERIFICATION.md create mode 100644 VERIFICATION/index.html delete mode 100644 _config.yml create mode 100644 assets/css/Firefly-Download-Icon-Inverted.32636383.png create mode 100644 assets/css/Firefly-Download-Icon.8094a4f0.png create mode 100644 assets/css/fontawesome-webfont.0caf0c90.ttf create mode 100644 assets/css/fontawesome-webfont.3981e506.eot create mode 100644 assets/css/fontawesome-webfont.58488e7e.woff2 create mode 100644 assets/css/fontawesome-webfont.a9323ae9.svg create mode 100644 assets/css/fontawesome-webfont.ed962b83.woff create mode 100644 assets/css/iconfont.960c72b2.eot create mode 100644 assets/css/iconfont.a07d77e0.woff2 create mode 100644 assets/css/iconfont.b2a06094.woff create mode 100644 assets/css/index.css create mode 100644 assets/css/owl.video.play.e7a23fb2.png create mode 100644 assets/css/select-arrow.b8e89c0c.svg rename {web/public_content/assets => assets}/img/404.png (100%) rename {web/public_content/assets => assets}/img/500.png (100%) rename {web/public_content/assets => assets}/img/hero/kerc20-hero-image.png (100%) rename {web/public_content/assets => assets}/img/hero/test-coverage-hero-image.png (100%) rename {web/public_content/assets => assets}/img/hero/test-runner-hero-image.png (100%) rename {web/public_content/assets => assets}/img/rv-logo-dark.png (100%) rename {web/public_content/assets => assets}/img/rv-logo.png (100%) create mode 100644 assets/js/index.js create mode 100644 assets/sass/icons/iconfont.css create mode 100644 assets/sass/icons/iconfont.eot create mode 100644 assets/sass/icons/iconfont.svg create mode 100644 assets/sass/icons/iconfont.ttf create mode 100644 assets/sass/icons/iconfont.woff create mode 100644 assets/sass/icons/iconfont.woff2 delete mode 100755 bin/kevm delete mode 100644 cmake/node/CMakeLists.txt delete mode 100644 cmake/version.h delete mode 100644 deps/blockchain-k-plugin_release delete mode 100644 deps/k_release delete mode 100644 deps/pyk_release delete mode 100644 flake.lock delete mode 100644 flake.nix delete mode 100644 include/kframework/abi.md create mode 100644 include/kframework/abi/index.html delete mode 100644 include/kframework/asm.md create mode 100644 include/kframework/asm/index.html delete mode 100644 include/kframework/buf.md create mode 100644 include/kframework/buf/index.html delete mode 100644 include/kframework/data.md create mode 100644 include/kframework/data/index.html delete mode 100644 include/kframework/driver.md create mode 100644 include/kframework/driver/index.html delete mode 100644 include/kframework/edsl.md create mode 100644 include/kframework/edsl/index.html delete mode 100644 include/kframework/evm-imp-specs.md create mode 100644 include/kframework/evm-imp-specs/index.html delete mode 100644 include/kframework/evm-node.md create mode 100644 include/kframework/evm-node/index.html delete mode 100644 include/kframework/evm-types.md create mode 100644 include/kframework/evm-types/index.html delete mode 100644 include/kframework/evm.md create mode 100644 include/kframework/evm/index.html delete mode 100644 include/kframework/foundry.md create mode 100644 include/kframework/foundry/index.html delete mode 100644 include/kframework/gas.md create mode 100644 include/kframework/gas/index.html delete mode 100644 include/kframework/hashed-locations.md create mode 100644 include/kframework/hashed-locations/index.html delete mode 100644 include/kframework/issues.md create mode 100644 include/kframework/issues/index.html delete mode 100644 include/kframework/json-rpc.md create mode 100644 include/kframework/json-rpc/index.html delete mode 100644 include/kframework/lemmas/bitwise-simplification.k delete mode 100644 include/kframework/lemmas/bytes-simplification.k delete mode 100644 include/kframework/lemmas/evm-int-simplification.k delete mode 100644 include/kframework/lemmas/int-simplification.k delete mode 100644 include/kframework/lemmas/lemmas.k delete mode 100644 include/kframework/network.md create mode 100644 include/kframework/network/index.html delete mode 100644 include/kframework/optimizations.md create mode 100644 include/kframework/optimizations/index.html delete mode 100644 include/kframework/schedule.md create mode 100644 include/kframework/schedule/index.html delete mode 100644 include/kframework/serialization.md create mode 100644 include/kframework/serialization/index.html delete mode 100644 include/kframework/state-utils.md create mode 100644 include/kframework/state-utils/index.html delete mode 100644 include/kframework/word.md create mode 100644 include/kframework/word/index.html create mode 100644 index.html delete mode 100644 kevm-pyk/.cruft.json delete mode 100644 kevm-pyk/.flake8 delete mode 100644 kevm-pyk/.gitignore delete mode 100644 kevm-pyk/Makefile delete mode 100644 kevm-pyk/poetry.lock delete mode 100644 kevm-pyk/pyproject.toml delete mode 100644 kevm-pyk/src/kevm_pyk/__init__.py delete mode 100644 kevm-pyk/src/kevm_pyk/__main__.py delete mode 100644 kevm-pyk/src/kevm_pyk/cli.py delete mode 100644 kevm-pyk/src/kevm_pyk/config.py delete mode 100644 kevm-pyk/src/kevm_pyk/gst_to_kore.py delete mode 100644 kevm-pyk/src/kevm_pyk/interpreter.py delete mode 100644 kevm-pyk/src/kevm_pyk/kevm.py delete mode 100644 kevm-pyk/src/kevm_pyk/kompile.py delete mode 100644 kevm-pyk/src/kevm_pyk/py.typed delete mode 100644 kevm-pyk/src/kevm_pyk/utils.py delete mode 100644 kevm-pyk/src/kontrol/__init__.py delete mode 100644 kevm-pyk/src/kontrol/__main__.py delete mode 100644 kevm-pyk/src/kontrol/foundry.py delete mode 100644 kevm-pyk/src/kontrol/solc_to_k.py delete mode 100644 kevm-pyk/src/tests/__init__.py delete mode 100644 kevm-pyk/src/tests/conftest.py delete mode 100644 kevm-pyk/src/tests/integration/__init__.py delete mode 100644 kevm-pyk/src/tests/integration/conftest.py delete mode 100644 kevm-pyk/src/tests/integration/test-data/contracts.k.expected delete mode 100644 kevm-pyk/src/tests/integration/test-data/examples/ERC20.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/examples/ERC721.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/examples/Empty.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/examples/Storage.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry-bmc-all delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry-bmc-skip delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry-fail delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry-prove-all delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry-prove-skip delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry-show delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry.k.expected delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/foundry.toml delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/src/Constants.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/src/Contract.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/src/EmitContract.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/src/KEVMCheats.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/src/MyIERC20.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/src/MyToken.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/src/OwnerOnlyUp.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/src/Prank.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/src/Safe.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/src/TestNumber.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/src/Token.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/AccountParamsTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/AddrTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/AllowChangesTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/Arithmetic.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/AssumeTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/BMCLoops.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/BlockParamsTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/BroadcastTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/Contract.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/ContractBTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/CounterTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/DynamicTypes.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/EmitContractTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/EnvTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/ExpectCallTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/ExpectRevertTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/FfiTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/FilesTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/ForkTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/GasTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/GetCodeTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/LabelTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/Loops.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/MethodDisambiguate.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/MockCallTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/NoImports.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/OwnerOnlyUpTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/PlainPrankTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/PrankTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/Preconditions.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/RecordLogsTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/SafeTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/SetUp2Test.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/SetUpDeploy.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/SetUpTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/SignTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/Simple.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/SnapshotTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/StoreTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/SymbolicStorageTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/ToStringTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/foundry/test/TypeTest.t.sol delete mode 100644 kevm-pyk/src/tests/integration/test-data/gas-abstraction.expected delete mode 100644 kevm-pyk/src/tests/integration/test-data/lemmas.k delete mode 100644 kevm-pyk/src/tests/integration/test-data/show/AssertTest.testFail_assert_false().expected delete mode 100644 kevm-pyk/src/tests/integration/test-data/show/AssertTest.testFail_assert_true().expected delete mode 100644 kevm-pyk/src/tests/integration/test-data/show/AssertTest.testFail_expect_revert().expected delete mode 100644 kevm-pyk/src/tests/integration/test-data/show/AssertTest.test_assert_false().expected delete mode 100644 kevm-pyk/src/tests/integration/test-data/show/AssertTest.test_assert_true().expected delete mode 100644 kevm-pyk/src/tests/integration/test-data/show/AssertTest.test_failing_branch(uint256).expected delete mode 100644 kevm-pyk/src/tests/integration/test-data/show/AssertTest.test_revert_branch(uint256,uint256).expected delete mode 100644 kevm-pyk/src/tests/integration/test-data/show/AssumeTest.testFail_assume_false(uint256,uint256).expected delete mode 100644 kevm-pyk/src/tests/integration/test-data/show/AssumeTest.testFail_assume_true(uint256,uint256).expected delete mode 100644 kevm-pyk/src/tests/integration/test-data/show/AssumeTest.test_assume_false(uint256,uint256).expected delete mode 100644 kevm-pyk/src/tests/integration/test-data/show/LoopsTest.sum_N(uint256).expected delete mode 100644 kevm-pyk/src/tests/integration/test-data/show/SetUpDeployTest.test_extcodesize().expected delete mode 100644 kevm-pyk/src/tests/integration/test_conformance.py delete mode 100644 kevm-pyk/src/tests/integration/test_foundry_prove.py delete mode 100644 kevm-pyk/src/tests/integration/test_kast.py delete mode 100644 kevm-pyk/src/tests/integration/test_prove.py delete mode 100644 kevm-pyk/src/tests/integration/test_run.py delete mode 100644 kevm-pyk/src/tests/integration/test_solc_to_k.py delete mode 100644 kevm-pyk/src/tests/integration/utils.py delete mode 100644 kevm-pyk/src/tests/profiling/__init__.py delete mode 100644 kevm-pyk/src/tests/profiling/test-data/foundry/foundry.toml delete mode 100644 kevm-pyk/src/tests/profiling/test-data/foundry/test/Simple.t.sol delete mode 100644 kevm-pyk/src/tests/profiling/test_foundry_prove.py delete mode 100644 kevm-pyk/src/tests/profiling/test_gst_to_kore.py delete mode 100644 kevm-pyk/src/tests/profiling/utils.py delete mode 100644 kevm-pyk/src/tests/unit/__init__.py delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/kcfg/kcfg.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/kcfg/nodes/1.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/kcfg/nodes/2.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/kcfg/nodes/3.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/kcfg/nodes/4.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/kcfg/nodes/5.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/proof.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_false()/kcfg/kcfg.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_false()/kcfg/nodes/1.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_false()/kcfg/nodes/2.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_false()/kcfg/nodes/3.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_false()/kcfg/nodes/4.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_false()/kcfg/nodes/5.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_false()/proof.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_true()/kcfg/kcfg.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_true()/kcfg/nodes/1.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_true()/kcfg/nodes/2.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_true()/kcfg/nodes/3.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_true()/kcfg/nodes/4.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_true()/kcfg/nodes/5.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_true()/proof.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_false()/kcfg/kcfg.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_false()/kcfg/nodes/1.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_false()/kcfg/nodes/2.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_false()/kcfg/nodes/3.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_false()/kcfg/nodes/4.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_false()/kcfg/nodes/5.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_false()/proof.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_true()/kcfg/kcfg.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_true()/kcfg/nodes/1.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_true()/kcfg/nodes/2.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_true()/kcfg/nodes/3.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_true()/kcfg/nodes/4.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_true()/kcfg/nodes/5.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_true()/proof.json delete mode 100644 kevm-pyk/src/tests/unit/test-data/foundry-list/foundry-list.expected delete mode 100644 kevm-pyk/src/tests/unit/test_foundry_list.py delete mode 100644 kevm-pyk/src/tests/unit/test_gst_to_kore.py delete mode 100644 kevm-pyk/src/tests/unit/test_solc_to_k.py delete mode 100644 kevm-pyk/src/tests/unit/utils.py delete mode 100644 kevm-pyk/src/tests/utils.py delete mode 100644 macos-envrc delete mode 100644 media/201710-presentation-devcon3.md create mode 100644 media/201710-presentation-devcon3/index.html delete mode 100644 media/201801-presentation-csf.md create mode 100644 media/201801-presentation-csf/index.html delete mode 100644 media/201905-exercise-k-workshop.md create mode 100644 media/201905-exercise-k-workshop/index.html delete mode 100644 media/201908-trufflecon-firefly.md create mode 100644 media/201908-trufflecon-firefly/index.html delete mode 100644 media/201908-trufflecon-workshop.md create mode 100644 media/201908-trufflecon-workshop/index.html delete mode 100644 media/201908-trufflecon/add-gas-spec.k delete mode 100644 media/201908-trufflecon/add-overflow-spec.k delete mode 100644 media/201908-trufflecon/add-spec.k delete mode 100644 media/201908-trufflecon/addition.evm delete mode 100644 media/201908-trufflecon/kevm-ltl.md create mode 100644 media/201908-trufflecon/kevm-ltl/index.html delete mode 100644 media/citations.md create mode 100644 media/citations/index.html delete mode 100644 media/images/k-overview.png delete mode 100644 media/images/proof-system.png delete mode 100644 node/plugin-c/blockchain.cpp delete mode 100644 node/plugin-c/world.cpp delete mode 100644 node/plugin-c/world.h delete mode 100644 node/proto/VERSION delete mode 100644 node/proto/msg.proto delete mode 100644 node/vm/init.cpp delete mode 100644 node/vm/init.h delete mode 100644 node/vm/kevm/semantics.cpp delete mode 100644 node/vm/kevm/semantics.h delete mode 100644 node/vm/main.cpp delete mode 100644 node/vm/vm.cpp delete mode 100644 node/vm/vm.h delete mode 100755 optimizer/build-spec.py delete mode 100644 optimizer/optimizations.md create mode 100644 optimizer/optimizations/index.html delete mode 100644 optimizer/optimize-spec.k.tmpl delete mode 100755 optimizer/optimize.sh delete mode 100644 package/debian/Dockerfile.test delete mode 100644 package/debian/changelog delete mode 100644 package/debian/compat delete mode 100644 package/debian/control.jammy delete mode 100755 package/debian/package delete mode 100755 package/debian/rules delete mode 100644 package/docker/Dockerfile delete mode 100644 package/nix/profile.nix delete mode 100755 package/nix/profile.py delete mode 100755 package/test-package.sh delete mode 100644 package/version delete mode 100755 package/version.sh create mode 100644 sitemap.xml delete mode 100644 tests/failing-symbolic.haskell delete mode 100644 tests/failing-symbolic.haskell-dry-run delete mode 100644 tests/failing-symbolic.pyk delete mode 100644 tests/failing.haskell delete mode 100644 tests/failing.llvm delete mode 100644 tests/failing/ContractCreationSpam_d0g0v0.json delete mode 100644 tests/failing/ContractCreationSpam_d0g0v0.json.expected delete mode 100644 tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json delete mode 100644 tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.expected delete mode 100644 tests/foundry/bmc-tests delete mode 100644 tests/foundry/checkoutput delete mode 100644 tests/foundry/contracts.k.check.expected delete mode 100644 tests/foundry/exclude delete mode 100644 tests/foundry/foundry-list.check.expected delete mode 100644 tests/foundry/foundry.k.check.expected delete mode 100644 tests/foundry/foundry.toml delete mode 100644 tests/foundry/golden/AssertTest.testFail_assert_false().expected delete mode 100644 tests/foundry/golden/AssertTest.testFail_assert_true().expected delete mode 100644 tests/foundry/golden/AssertTest.testFail_expect_revert().expected delete mode 100644 tests/foundry/golden/AssertTest.test_assert_false().expected delete mode 100644 tests/foundry/golden/AssertTest.test_assert_true().expected delete mode 100644 tests/foundry/golden/AssertTest.test_failing_branch(uint256).expected delete mode 100644 tests/foundry/golden/AssertTest.test_revert_branch(uint256,uint256).expected delete mode 100644 tests/foundry/golden/AssumeTest.testFail_assume_false(uint256,uint256).expected delete mode 100644 tests/foundry/golden/AssumeTest.testFail_assume_true(uint256,uint256).expected delete mode 100644 tests/foundry/golden/AssumeTest.test_assume_false(uint256,uint256).expected delete mode 100644 tests/foundry/golden/LoopsTest.sum_N(uint256).expected delete mode 100644 tests/foundry/golden/SetUpDeployTest.test_extcodesize().expected delete mode 100644 tests/foundry/lemmas.k delete mode 100644 tests/foundry/src/Constants.sol delete mode 100644 tests/foundry/src/Contract.sol delete mode 100644 tests/foundry/src/EmitContract.sol delete mode 100644 tests/foundry/src/KEVMCheats.sol delete mode 100644 tests/foundry/src/MyIERC20.sol delete mode 100644 tests/foundry/src/MyToken.sol delete mode 100644 tests/foundry/src/OwnerOnlyUp.sol delete mode 100644 tests/foundry/src/Prank.sol delete mode 100644 tests/foundry/src/Safe.sol delete mode 100644 tests/foundry/src/TestNumber.sol delete mode 100644 tests/foundry/src/Token.sol delete mode 100644 tests/foundry/test/AccountParamsTest.t.sol delete mode 100644 tests/foundry/test/AddrTest.t.sol delete mode 100644 tests/foundry/test/AllowChangesTest.t.sol delete mode 100644 tests/foundry/test/Ambiguous.t.sol delete mode 100644 tests/foundry/test/Arithmetic.t.sol delete mode 100644 tests/foundry/test/AssumeTest.t.sol delete mode 100644 tests/foundry/test/BMCLoops.t.sol delete mode 100644 tests/foundry/test/BlockParamsTest.t.sol delete mode 100644 tests/foundry/test/BroadcastTest.t.sol delete mode 100644 tests/foundry/test/Contract.t.sol delete mode 100644 tests/foundry/test/ContractBTest.t.sol delete mode 100644 tests/foundry/test/CounterTest.t.sol delete mode 100644 tests/foundry/test/DynamicTypes.t.sol delete mode 100644 tests/foundry/test/EmitContractTest.t.sol delete mode 100644 tests/foundry/test/EnvTest.t.sol delete mode 100644 tests/foundry/test/ExpectCallTest.t.sol delete mode 100644 tests/foundry/test/ExpectRevertTest.t.sol delete mode 100644 tests/foundry/test/FfiTest.t.sol delete mode 100644 tests/foundry/test/FilesTest.t.sol delete mode 100644 tests/foundry/test/ForkTest.t.sol delete mode 100644 tests/foundry/test/FreshInt.t.sol delete mode 100644 tests/foundry/test/GasTest.t.sol delete mode 100644 tests/foundry/test/GetCodeTest.t.sol delete mode 100644 tests/foundry/test/LabelTest.t.sol delete mode 100644 tests/foundry/test/Loops.t.sol delete mode 100644 tests/foundry/test/MethodDisambiguate.t.sol delete mode 100644 tests/foundry/test/MockCallTest.t.sol delete mode 100644 tests/foundry/test/NoImports.t.sol delete mode 100644 tests/foundry/test/OwnerOnlyUpTest.t.sol delete mode 100644 tests/foundry/test/PlainPrankTest.t.sol delete mode 100644 tests/foundry/test/PrankTest.t.sol delete mode 100644 tests/foundry/test/Preconditions.t.sol delete mode 100644 tests/foundry/test/RecordLogsTest.t.sol delete mode 100644 tests/foundry/test/SafeTest.t.sol delete mode 100644 tests/foundry/test/SetUp2Test.t.sol delete mode 100644 tests/foundry/test/SetUpDeploy.t.sol delete mode 100644 tests/foundry/test/SetUpTest.t.sol delete mode 100644 tests/foundry/test/SignTest.t.sol delete mode 100644 tests/foundry/test/Simple.t.sol delete mode 100644 tests/foundry/test/SnapshotTest.t.sol delete mode 100644 tests/foundry/test/StoreTest.t.sol delete mode 100644 tests/foundry/test/SymbolicStorageTest.t.sol delete mode 100644 tests/foundry/test/ToStringTest.t.sol delete mode 100644 tests/foundry/test/TypeTest.t.sol delete mode 100644 tests/foundry/test/file.txt delete mode 100755 tests/foundry/test/myscript.sh delete mode 100755 tests/foundry/test/script.sh delete mode 100644 tests/interactive/CallRecursiveContract_d0g0v0.json delete mode 100644 tests/interactive/CallRecursiveContract_d0g0v0.json.parse-expected delete mode 100644 tests/interactive/log3_MaxTopic_d0g0v0.json delete mode 100644 tests/interactive/log3_MaxTopic_d0g0v0.json.parse-expected delete mode 100644 tests/interactive/search/branching-invalid.evm delete mode 100644 tests/interactive/search/branching-invalid.evm.search-expected delete mode 100644 tests/interactive/search/branching-no-invalid.evm delete mode 100644 tests/interactive/search/branching-no-invalid.evm.search-expected delete mode 100644 tests/interactive/search/straight-line-no-invalid.evm delete mode 100644 tests/interactive/search/straight-line-no-invalid.evm.search-expected delete mode 100644 tests/interactive/search/straight-line.evm delete mode 100644 tests/interactive/search/straight-line.evm.search-expected delete mode 100644 tests/interactive/sumTo10.evm delete mode 100644 tests/interactive/sumTo10.evm.parse-expected delete mode 100644 tests/interactive/vmLogTest/log3.gst-to-kore.expected delete mode 100644 tests/slow.haskell delete mode 100644 tests/slow.llvm delete mode 100644 tests/specs/benchmarks/README.md delete mode 100644 tests/specs/benchmarks/address00-spec.k delete mode 100644 tests/specs/benchmarks/address00.sol delete mode 100644 tests/specs/benchmarks/bytes00-spec.k delete mode 100644 tests/specs/benchmarks/bytes00.sol delete mode 100644 tests/specs/benchmarks/ecrecover00-siginvalid-spec.k delete mode 100644 tests/specs/benchmarks/ecrecover00-sigvalid-spec.k delete mode 100644 tests/specs/benchmarks/ecrecover00.sol delete mode 100644 tests/specs/benchmarks/ecrecoverloop00-sig0-invalid-spec.k delete mode 100644 tests/specs/benchmarks/ecrecoverloop00-sig1-invalid-spec.k delete mode 100644 tests/specs/benchmarks/ecrecoverloop00-sigs-valid-spec.k delete mode 100644 tests/specs/benchmarks/ecrecoverloop00.sol delete mode 100644 tests/specs/benchmarks/ecrecoverloop02-sig0-invalid-spec.k delete mode 100644 tests/specs/benchmarks/ecrecoverloop02-sig1-invalid-spec.k delete mode 100644 tests/specs/benchmarks/ecrecoverloop02-sigs-valid-spec.k delete mode 100644 tests/specs/benchmarks/ecrecoverloop02.sol delete mode 100644 tests/specs/benchmarks/encode-keccak00-spec.k delete mode 100644 tests/specs/benchmarks/encode-keccak00.sol delete mode 100644 tests/specs/benchmarks/encodepacked-keccak01-spec.k delete mode 100644 tests/specs/benchmarks/encodepacked-keccak01.sol delete mode 100644 tests/specs/benchmarks/functional-spec.k create mode 100644 tests/specs/benchmarks/index.html delete mode 100644 tests/specs/benchmarks/keccak00-spec.k delete mode 100644 tests/specs/benchmarks/keccak00.sol delete mode 100644 tests/specs/benchmarks/overflow00-nooverflow-spec.k delete mode 100644 tests/specs/benchmarks/overflow00-overflow-spec.k delete mode 100644 tests/specs/benchmarks/overflow00.sol delete mode 100644 tests/specs/benchmarks/requires01-a0gt0-spec.k delete mode 100644 tests/specs/benchmarks/requires01-a0le0-spec.k delete mode 100644 tests/specs/benchmarks/requires01.sol delete mode 100644 tests/specs/benchmarks/staticarray00-spec.k delete mode 100644 tests/specs/benchmarks/staticarray00.sol delete mode 100644 tests/specs/benchmarks/staticloop00-a0lt10-spec.k delete mode 100644 tests/specs/benchmarks/staticloop00.sol delete mode 100644 tests/specs/benchmarks/storagevar00-spec.k delete mode 100644 tests/specs/benchmarks/storagevar00.sol delete mode 100644 tests/specs/benchmarks/storagevar01-spec.k delete mode 100644 tests/specs/benchmarks/storagevar01.sol delete mode 100644 tests/specs/benchmarks/storagevar02-nooverflow-spec.k delete mode 100644 tests/specs/benchmarks/storagevar02-overflow-spec.k delete mode 100644 tests/specs/benchmarks/storagevar02.sol delete mode 100644 tests/specs/benchmarks/storagevar03-spec.k delete mode 100644 tests/specs/benchmarks/storagevar03.sol delete mode 100644 tests/specs/benchmarks/verification.k delete mode 100644 tests/specs/bihu/collectToken-spec.k delete mode 100644 tests/specs/bihu/forwardToHotWallet-failure-1-spec.k delete mode 100644 tests/specs/bihu/forwardToHotWallet-failure-2-spec.k delete mode 100644 tests/specs/bihu/forwardToHotWallet-failure-3-spec.k delete mode 100644 tests/specs/bihu/forwardToHotWallet-failure-4-spec.k delete mode 100644 tests/specs/bihu/forwardToHotWallet-success-1-spec.k delete mode 100644 tests/specs/bihu/forwardToHotWallet-success-2-spec.k delete mode 100644 tests/specs/bihu/functional-spec.k delete mode 100644 tests/specs/bihu/verification.k delete mode 100644 tests/specs/erc20/ds/allowance-spec.k delete mode 100644 tests/specs/erc20/ds/approve-failure-spec.k delete mode 100644 tests/specs/erc20/ds/approve-success-spec.k delete mode 100644 tests/specs/erc20/ds/balanceOf-spec.k delete mode 100644 tests/specs/erc20/ds/totalSupply-spec.k delete mode 100644 tests/specs/erc20/ds/transfer-failure-1-a-spec.k delete mode 100644 tests/specs/erc20/ds/transfer-failure-1-b-spec.k delete mode 100644 tests/specs/erc20/ds/transfer-failure-1-c-spec.k delete mode 100644 tests/specs/erc20/ds/transfer-failure-2-a-spec.k delete mode 100644 tests/specs/erc20/ds/transfer-failure-2-b-spec.k delete mode 100644 tests/specs/erc20/ds/transfer-success-1-spec.k delete mode 100644 tests/specs/erc20/ds/transfer-success-2-spec.k delete mode 100644 tests/specs/erc20/ds/transferFrom-failure-1-a-spec.k delete mode 100644 tests/specs/erc20/ds/transferFrom-failure-1-b-spec.k delete mode 100644 tests/specs/erc20/ds/transferFrom-failure-1-c-spec.k delete mode 100644 tests/specs/erc20/ds/transferFrom-failure-1-d-spec.k delete mode 100644 tests/specs/erc20/ds/transferFrom-failure-2-a-spec.k delete mode 100644 tests/specs/erc20/ds/transferFrom-failure-2-b-spec.k delete mode 100644 tests/specs/erc20/ds/transferFrom-failure-2-c-spec.k delete mode 100644 tests/specs/erc20/ds/transferFrom-success-1-spec.k delete mode 100644 tests/specs/erc20/ds/transferFrom-success-2-spec.k delete mode 100644 tests/specs/erc20/evm-symbolic.k delete mode 100644 tests/specs/erc20/functional-spec.k delete mode 100644 tests/specs/erc20/hkg/allowance-spec.k delete mode 100644 tests/specs/erc20/hkg/approve-spec.k delete mode 100644 tests/specs/erc20/hkg/balanceOf-spec.k delete mode 100644 tests/specs/erc20/hkg/totalSupply-spec.k delete mode 100644 tests/specs/erc20/hkg/transfer-failure-1-spec.k delete mode 100644 tests/specs/erc20/hkg/transfer-failure-2-spec.k delete mode 100644 tests/specs/erc20/hkg/transfer-success-1-spec.k delete mode 100644 tests/specs/erc20/hkg/transfer-success-2-spec.k delete mode 100644 tests/specs/erc20/hkg/transferFrom-failure-1-spec.k delete mode 100644 tests/specs/erc20/hkg/transferFrom-failure-2-spec.k delete mode 100644 tests/specs/erc20/hkg/transferFrom-success-1-spec.k delete mode 100644 tests/specs/erc20/hkg/transferFrom-success-2-spec.k delete mode 100644 tests/specs/erc20/verification.k delete mode 100644 tests/specs/examples/ERC20.sol delete mode 100644 tests/specs/examples/ERC721.sol delete mode 100644 tests/specs/examples/Empty.sol delete mode 100644 tests/specs/examples/Storage.sol delete mode 100644 tests/specs/examples/erc20-spec.md create mode 100644 tests/specs/examples/erc20-spec/index.html delete mode 100644 tests/specs/examples/erc721-spec.md create mode 100644 tests/specs/examples/erc721-spec/index.html delete mode 100644 tests/specs/examples/solidity-code-spec.md create mode 100644 tests/specs/examples/solidity-code-spec/index.html delete mode 100644 tests/specs/examples/storage-spec.md create mode 100644 tests/specs/examples/storage-spec/index.html delete mode 100644 tests/specs/examples/sum-to-n-foundry-spec.k delete mode 100644 tests/specs/examples/sum-to-n-spec.k delete mode 100644 tests/specs/functional/evm-int-simplifications-spec.k delete mode 100644 tests/specs/functional/infinite-gas-spec.k delete mode 100644 tests/specs/functional/int-simplifications-spec.k delete mode 100644 tests/specs/functional/lemmas-no-smt-spec.k delete mode 100644 tests/specs/functional/lemmas-spec.k delete mode 100644 tests/specs/functional/merkle-spec.k delete mode 100644 tests/specs/functional/storageRoot-spec.k delete mode 100644 tests/specs/mcd/bin_runtime.k delete mode 100644 tests/specs/mcd/cat-exhaustiveness-spec.k delete mode 100644 tests/specs/mcd/cat-file-addr-pass-rough-spec.k delete mode 100644 tests/specs/mcd/dai-adduu-fail-rough-spec.k delete mode 100644 tests/specs/mcd/dai-symbol-pass-spec.k delete mode 100644 tests/specs/mcd/dstoken-approve-fail-rough-spec.k delete mode 100644 tests/specs/mcd/dstoken-burn-self-fail-rough-spec.k delete mode 100644 tests/specs/mcd/dstoken-transferfrom-fail-rough-spec.k delete mode 100644 tests/specs/mcd/dsvalue-peek-pass-rough-spec.k delete mode 100644 tests/specs/mcd/dsvalue-read-pass-spec.k delete mode 100644 tests/specs/mcd/dsvalue-read-pass-summarize-spec.k delete mode 100644 tests/specs/mcd/end-cash-pass-rough-spec.k delete mode 100644 tests/specs/mcd/end-pack-pass-rough-spec.k delete mode 100644 tests/specs/mcd/end-subuu-pass-spec.k delete mode 100644 tests/specs/mcd/flapper-tend-guy-diff-pass-rough-spec.k delete mode 100644 tests/specs/mcd/flapper-yank-pass-rough-spec.k delete mode 100644 tests/specs/mcd/flipper-addu48u48-fail-rough-spec.k delete mode 100644 tests/specs/mcd/flipper-bids-pass-rough-spec.k delete mode 100644 tests/specs/mcd/flipper-tau-pass-spec.k delete mode 100644 tests/specs/mcd/flipper-ttl-pass-spec.k delete mode 100644 tests/specs/mcd/flopper-cage-pass-spec.k delete mode 100644 tests/specs/mcd/flopper-dent-guy-diff-tic-not-0-pass-rough-spec.k delete mode 100644 tests/specs/mcd/flopper-dent-guy-same-pass-rough-spec.k delete mode 100644 tests/specs/mcd/flopper-file-pass-rough-spec.k delete mode 100644 tests/specs/mcd/flopper-kick-pass-rough-spec.k delete mode 100644 tests/specs/mcd/flopper-tick-pass-rough-spec.k delete mode 100644 tests/specs/mcd/functional-spec.k delete mode 100644 tests/specs/mcd/gemjoin-exit-pass-rough-spec.k delete mode 100644 tests/specs/mcd/pot-join-pass-rough-spec.k delete mode 100644 tests/specs/mcd/storage.k delete mode 100644 tests/specs/mcd/vat-addui-fail-rough-spec.k delete mode 100644 tests/specs/mcd/vat-addui-pass-spec.k delete mode 100644 tests/specs/mcd/vat-deny-diff-fail-rough-spec.k delete mode 100644 tests/specs/mcd/vat-flux-diff-pass-rough-spec.k delete mode 100644 tests/specs/mcd/vat-fold-pass-rough-spec.k delete mode 100644 tests/specs/mcd/vat-fork-diff-pass-rough-spec.k delete mode 100644 tests/specs/mcd/vat-frob-diff-zero-dart-pass-rough-spec.k delete mode 100644 tests/specs/mcd/vat-move-diff-rough-spec.k delete mode 100644 tests/specs/mcd/vat-mului-pass-spec.k delete mode 100644 tests/specs/mcd/vat-muluu-pass-spec.k delete mode 100644 tests/specs/mcd/vat-slip-pass-rough-spec.k delete mode 100644 tests/specs/mcd/vat-subui-fail-rough-spec.k delete mode 100644 tests/specs/mcd/vat-subui-pass-rough-spec.k delete mode 100644 tests/specs/mcd/vat-subui-pass-spec.k delete mode 100644 tests/specs/mcd/verification.k delete mode 100644 tests/specs/mcd/vow-cage-deficit-pass-rough-spec.k delete mode 100644 tests/specs/mcd/vow-cage-surplus-pass-rough-spec.k delete mode 100644 tests/specs/mcd/vow-fess-fail-rough-spec.k delete mode 100644 tests/specs/mcd/vow-flog-fail-rough-spec.k delete mode 100644 tests/specs/mcd/word-pack.k delete mode 100644 tests/specs/opcodes/create-spec.k delete mode 100644 tests/specs/opcodes/verification.k delete mode 100644 tests/specs/smoke delete mode 100644 tests/templates/output-success-haskell.json delete mode 100644 tests/templates/output-success-java.json delete mode 100644 tests/templates/output-success-llvm.json delete mode 100644 tests/vm/accesslist_proto.bin delete mode 100644 tests/vm/accesslist_proto.bin.expected delete mode 100644 tests/vm/hello_proto.bin delete mode 100644 tests/vm/hello_proto.bin.expected delete mode 100644 tests/vm/proto_tester.cpp delete mode 100644 web/.gitignore delete mode 100644 web/.nvmrc delete mode 100644 web/README.md delete mode 100644 web/build-html.js delete mode 160000 web/k-web-theme delete mode 100644 web/package-lock.json delete mode 100644 web/package.json delete mode 100644 web/public_content/.gitignore delete mode 100755 web/sitemap/build-sitemap.js delete mode 100644 web/static_content/html/404.html delete mode 100644 web/static_content/html/500.html delete mode 100644 web/static_content/html/include/footer.html delete mode 100644 web/static_content/html/include/ga.html delete mode 100644 web/static_content/html/include/head.html delete mode 100644 web/static_content/html/include/header.html delete mode 100644 web/static_content/html/include/sidebar.html delete mode 100644 web/static_content/html/page_template.html diff --git a/.github/actions/with-docker/action.yml b/.github/actions/with-docker/action.yml deleted file mode 100644 index b07d95e0e3..0000000000 --- a/.github/actions/with-docker/action.yml +++ /dev/null @@ -1,87 +0,0 @@ -name: 'With Docker' -description: 'Run a given stage with Docker Image' -inputs: - container-name: - description: 'Docker container name to use' - type: string - required: true - tag-name: - description: 'Docker image tag to use' - type: string - required: false - default: runtimeverificationinc/kevm - subdir: - description: 'Subdirectory where code is cloned.' - required: false - type: string - default: './' - os: - description: 'OS to setup Docker for.' - required: false - type: string - default: 'ubuntu' - distro: - description: 'Distribution to setup Docker for.' - required: false - type: string - default: 'jammy' - llvm: - description: 'LLVM version to use.' - required: false - type: number - default: 14 - dockerfile: - description: 'Hardcode the path of the dockerfile to use.' - required: false - type: string - default: '.github/workflows/Dockerfile' -runs: - using: 'composite' - steps: - - name: 'Set up Docker' - shell: bash {0} - run: | - set -euxo pipefail - - CONTAINER_NAME=${{ inputs.container-name }} - SUBDIR=${{ inputs.subdir }} - BASE_OS=${{ inputs.os }} - BASE_DISTRO=${{ inputs.distro }} - DOCKERFILE=${{ inputs.dockerfile }} - LLVM_VERSION=${{ inputs.llvm }} - TAG_NAME=${{ inputs.tag-name }} - - USER=github-user - GROUP=${USER} - Z3_VERSION=4.12.1 - K_VERSION=$(cat deps/k_release) - USER_ID=1000 - GROUP_ID=${USER_ID} - - docker build . \ - --file .github/workflows/Dockerfile.z3 \ - --tag z3:${Z3_VERSION} \ - - docker build . --file ${DOCKERFILE} \ - --tag ${TAG_NAME} \ - --build-arg USER_ID=${USER_ID} \ - --build-arg GROUP_ID=${GROUP_ID} \ - --build-arg USER=${USER} \ - --build-arg GROUP=${GROUP} \ - --build-arg BASE_DISTRO=${BASE_DISTRO} \ - --build-arg K_VERSION=${K_VERSION} \ - --build-arg Z3_VERSION=${Z3_VERSION} \ - --build-arg LLVM_VERSION=${LLVM_VERSION} - - docker run \ - --name ${CONTAINER_NAME} \ - --rm \ - --interactive \ - --tty \ - --detach \ - --user root \ - --workdir /home/${USER}/workspace \ - ${TAG_NAME} - - docker cp . ${CONTAINER_NAME}:/home/${USER}/workspace - docker exec ${CONTAINER_NAME} chown -R ${USER}:${GROUP} /home/${USER} diff --git a/.github/workflows/Dockerfile b/.github/workflows/Dockerfile deleted file mode 100644 index 4d25d77427..0000000000 --- a/.github/workflows/Dockerfile +++ /dev/null @@ -1,61 +0,0 @@ -ARG Z3_VERSION -ARG K_VERSION -ARG BASE_DISTRO -ARG LLVM_VERSION - -FROM ghcr.io/foundry-rs/foundry:nightly-ca67d15f4abd46394b324c50e21e66f306a1162d as FOUNDRY - -ARG Z3_VERSION -FROM z3:${Z3_VERSION} as Z3 - -ARG K_VERSION -FROM runtimeverificationinc/kframework-k:ubuntu-jammy-${K_VERSION} - -COPY --from=FOUNDRY /usr/local/bin/forge /usr/local/bin/forge -COPY --from=FOUNDRY /usr/local/bin/anvil /usr/local/bin/anvil -COPY --from=FOUNDRY /usr/local/bin/cast /usr/local/bin/cast - -COPY --from=Z3 /usr/bin/z3 /usr/bin/z3 - -ARG LLVM_VERSION - -RUN apt-get update \ - && apt-get upgrade --yes \ - && apt-get install --yes \ - cargo \ - clang-${LLVM_VERSION} \ - cmake \ - curl \ - debhelper \ - libboost-test-dev \ - libcrypto++-dev \ - libprocps-dev \ - libssl-dev \ - libyaml-dev \ - llvm-${LLVM_VERSION}-dev \ - llvm-${LLVM_VERSION}-tools \ - maven \ - netcat \ - protobuf-compiler \ - maven \ - python3 \ - python3-pip - -ARG USER=user -ARG GROUP -ARG USER_ID -ARG GROUP_ID -RUN groupadd -g ${GROUP_ID} ${GROUP} && useradd -m -u ${USER_ID} -s /bin/sh -g ${GROUP} ${USER} - -USER ${USER}:${GROUP} -RUN mkdir /home/${USER}/workspace -WORKDIR /home/${USER}/workspace - -ENV PATH=/home/${USER}/.cargo/bin:/home/${USER}/.local/bin:/usr/local/bin/:${PATH} - -RUN curl -sSL https://install.python-poetry.org | python3 - \ - && poetry --version - -RUN cargo install svm-rs --version 0.3.0 \ - && svm install 0.8.13 \ - && solc --version diff --git a/.github/workflows/Dockerfile.z3 b/.github/workflows/Dockerfile.z3 deleted file mode 100644 index 834240f29f..0000000000 --- a/.github/workflows/Dockerfile.z3 +++ /dev/null @@ -1,22 +0,0 @@ -FROM ubuntu:jammy - -ENV TZ=America/Chicago -RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone - -RUN apt-get update \ - && apt-get upgrade --yes \ - && apt-get install --yes \ - clang \ - cmake \ - git \ - python3 - -ARG Z3_VERSION=4.12.1 -RUN git clone 'https://github.com/z3prover/z3' --branch=z3-${Z3_VERSION} \ - && cd z3 \ - && python3 scripts/mk_make.py \ - && cd build \ - && make -j8 \ - && make install \ - && cd ../.. \ - && rm -rf z3 diff --git a/.github/workflows/master-push.yml b/.github/workflows/master-push.yml deleted file mode 100644 index 0a8d9f0d9f..0000000000 --- a/.github/workflows/master-push.yml +++ /dev/null @@ -1,178 +0,0 @@ -name: 'Master Push' -on: - push: - branches: - - 'master' -concurrency: - group: ${{ github.workflow }} - cancel-in-progress: true - -jobs: - - nix-cache: - name: 'Populate Nix Cache' - strategy: - matrix: - include: - - runner: normal - - runner: macos-13 - - runner: ARM64 - runs-on: ${{ matrix.runner }} - steps: - - name: 'Check out code' - uses: actions/checkout@v3 - with: - ref: ${{ github.event.push.head.sha }} - fetch-depth: 0 - - name: 'Upgrade bash' - if: ${{ contains(matrix.os, 'macos') }} - run: brew install bash - - name: 'Install Nix' - if: ${{ matrix.runner == 'macos-13' }} - uses: cachix/install-nix-action@v19 - with: - install_url: https://releases.nixos.org/nix/nix-2.13.3/install - extra_nix_config: | - access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} - - name: 'Install Cachix' - if: ${{ matrix.runner == 'macos-13' }} - uses: cachix/cachix-action@v12 - with: - name: k-framework - signingKey: ${{ secrets.CACHIX_SIGNING_KEY }} - skipPush: true - - name: 'Build and cache KEVM' - uses: workflow/nix-shell-action@v3.0.3 - env: - GC_DONT_GC: 1 - CACHIX_AUTH_TOKEN: '${{ secrets.CACHIX_PUBLIC_TOKEN }}' - with: - packages: jq - script: | - kevm=$(nix build --extra-experimental-features 'nix-command flakes' .#kevm --json | jq -r '.[].outputs | to_entries[].value') - drv=$(nix-store --query --deriver ${kevm}) - nix-store --query --requisites --include-outputs ${drv} | cachix push k-framework - - dockerhub-image: - name: 'Build Ubuntu Jammy DockerHub Image' - runs-on: [self-hosted, linux, normal] - steps: - - name: 'Check out code' - uses: actions/checkout@v3 - with: - submodules: recursive - ref: ${{ github.event.push.head.sha }} - fetch-depth: 0 - - name: 'Set up Docker' - uses: ./.github/actions/with-docker - with: - container-name: kevm-package-jammy-${{ github.sha }} - - - name: 'Build Package' - run: | - set -euxo pipefail - version=$(cat package/version) - docker exec -u github-user kevm-package-jammy-${GITHUB_SHA} /bin/bash -c 'package/debian/package jammy' - docker cp kevm-package-jammy-${GITHUB_SHA}:/home/github-user/kevm_${version}_amd64.deb ./ - - - name: 'Set Version ID' - run: echo "KEVM_VERSION=$(cat package/version)" >> "${GITHUB_ENV}" - - - name: 'Setup Foundry Test Docker' - uses: ./.github/actions/with-docker - with: - container-name: kevm-ci-test-${{ github.sha }} - tag-name: runtimeverificationinc/kevm:ubuntu-jammy-${{ env.KEVM_VERSION }} - dockerfile: package/docker/Dockerfile - - - name: 'KEVM Foundry Test' - run: | - set -euxo pipefail - docker cp ./tests/foundry kevm-ci-test-${GITHUB_SHA}:/home/github-user/foundry - docker exec -u github-user kevm-ci-test-${GITHUB_SHA} /bin/bash -c "sudo chown github-user:github-user -R /home/github-user/foundry" - docker exec -u github-user kevm-ci-test-${GITHUB_SHA} /bin/bash -c "forge build --root /home/github-user/foundry" - docker exec -u github-user kevm-ci-test-${GITHUB_SHA} /bin/bash -c "kevm foundry-kompile --foundry-project-root /home/github-user/foundry --verbose" - docker exec -u github-user kevm-ci-test-${GITHUB_SHA} /bin/bash -c "kevm foundry-prove --foundry-project-root /home/github-user/foundry --verbose --test AssertTest.test_assert_true_branch" - docker exec -u github-user kevm-ci-test-${GITHUB_SHA} /bin/bash -c "kevm foundry-show --foundry-project-root /home/github-user/foundry --verbose AssertTest.test_assert_true_branch" - docker exec -u github-user kevm-ci-test-${GITHUB_SHA} /bin/bash -c "kevm foundry-list --foundry-project-root /home/github-user/foundry --verbose" - - - name: 'Push Docker Image to DockerHub' - env: - DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }} - run: | - set -euxo pipefail - dockerhub_repo=runtimeverificationinc/kevm - tag_name=ubuntu-jammy-${KEVM_VERSION} - docker login --username rvdockerhub --password ${DOCKERHUB_PASSWORD} - docker image push "${dockerhub_repo}:${tag_name}" - - - name: 'Tear down Docker' - if: always() - run: | - docker stop --time=0 kevm-package-jammy-${GITHUB_SHA} - docker stop --time=0 kevm-ci-test-${GITHUB_SHA} - - make-release: - name: 'Cut Release' - runs-on: ubuntu-latest - needs: [nix-cache, dockerhub-image] - steps: - - name: 'Check out code' - uses: actions/checkout@v3 - with: - ref: ${{ github.event.push.head.sha }} - fetch-depth: 0 - - name: 'Make Release' - env: - GITHUB_TOKEN: ${{ secrets.JENKINS_GITHUB_PAT }} - run: | - set -x - kevm_version=v$(cat package/version) - gh release create "${kevm_version}" --target "${GITHUB_SHA}" - - gh-pages: - name: 'Publish GH Pages' - runs-on: ubuntu-latest - needs: make-release - steps: - - name: 'Check out gh-pages' - uses: actions/checkout@v3 - with: - fetch-depth: 0 - submodules: true - ref: ${{ github.event.push.head.sha }} - - run: | - git config --global user.email 'devops@runtimeverification.com' - git config --global user.name 'RV DevOps' - - name: 'Publish gh-pages' - run: | - git checkout -B gh-pages - cd web - npm install - npm run build - npm run build-sitemap - cd - - mv web/public_content ./ - rm -rf $(find . -maxdepth 1 -not -name public_content -a -not -name .git -a -not -path . -a -not -path .. -a -not -name CNAME) - mv public_content/* ./ - rm -rf public_content - git add ./ - git commit -m 'gh-pages: Updated the website' - git merge --strategy ours origin/gh-pages --allow-unrelated-histories - git push origin gh-pages - - name: 'Post failure to channel' - if: failure() - uses: slackapi/slack-github-action@v1.24.0 - with: - channel-id: "#kevm-notifications" - slack-message: "Failed to create KEVM release: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" - env: - SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} - - name: 'Post success to channel' - if: success() - uses: slackapi/slack-github-action@v1.24.0 - with: - channel-id: "#kevm-notifications" - slack-message: "Created KEVM release: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" - env: - SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} diff --git a/.github/workflows/test-pr.yml b/.github/workflows/test-pr.yml deleted file mode 100644 index 745e112265..0000000000 --- a/.github/workflows/test-pr.yml +++ /dev/null @@ -1,286 +0,0 @@ -name: 'Test PR' -on: - pull_request: - branches: - - 'master' -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - - version-bump: - name: 'Version Bump' - runs-on: ubuntu-latest - steps: - - name: 'Check out code' - uses: actions/checkout@v3 - with: - token: ${{ secrets.JENKINS_GITHUB_PAT }} - # fetch-depth 0 means deep clone the repo - fetch-depth: 0 - ref: ${{ github.event.pull_request.head.sha }} - - name: 'Configure GitHub user' - run: | - git config user.name devops - git config user.email devops@runtimeverification.com - - name: 'Update version' - run: | - og_version=$(git show origin/${GITHUB_BASE_REF}:package/version) - ./package/version.sh bump ${og_version} - ./package/version.sh sub - git add --update && git commit --message "Set Version: $(cat package/version)" || true - - name: 'Push updates' - run: git push origin HEAD:${GITHUB_HEAD_REF} - - kevm-pyk-code-quality-checks: - needs: version-bump - name: 'Code Quality Checks' - runs-on: ubuntu-latest - steps: - - name: 'Check out code' - uses: actions/checkout@v3 - - name: 'Install Poetry' - uses: Gr1N/setup-poetry@v8 - - name: 'Run code quality checks' - run: make -C kevm-pyk check - - name: 'Run pyupgrade' - run: make -C kevm-pyk pyupgrade - - kevm-pyk-unit-tests: - needs: kevm-pyk-code-quality-checks - name: 'Unit Tests' - runs-on: ubuntu-latest - steps: - - name: 'Check out code' - uses: actions/checkout@v3 - with: - submodules: true - fetch-depth: 0 - - name: 'Install Poetry' - uses: Gr1N/setup-poetry@v8 - - name: 'Build kevm' - run: make build-kevm -j8 - - name: 'Run unit tests' - run: | - export PATH=$(pwd)/.build/usr/bin:${PATH} - make -C kevm-pyk cov-unit - - kevm-pyk-profile: - needs: kevm-pyk-code-quality-checks - name: 'Profiling' - runs-on: [self-hosted, linux, normal] - timeout-minutes: 15 - steps: - - name: 'Check out code' - uses: actions/checkout@v3 - with: - submodules: recursive - fetch-depth: 0 - - name: 'Set up Docker' - uses: ./.github/actions/with-docker - with: - container-name: kevm-ci-profile-${{ github.sha }} - - name: 'Build kevm-pyk' - run: docker exec -u github-user kevm-ci-profile-${GITHUB_SHA} /bin/bash -c 'make poetry' - - name: 'Build Foundry' - run: docker exec -u github-user kevm-ci-profile-${GITHUB_SHA} /bin/bash -c 'make build-foundry' - - name: 'Run profiling' - run: | - docker exec -u github-user kevm-ci-profile-${GITHUB_SHA} /bin/bash -c 'make profile' - - name: 'Tear down Docker' - if: always() - run: | - docker stop --time=0 kevm-ci-profile-${GITHUB_SHA} - - test-concrete-execution: - name: 'Build and Test KEVM concrete execution' - needs: kevm-pyk-code-quality-checks - runs-on: [self-hosted, linux, normal] - timeout-minutes: 45 - steps: - - name: 'Check out code' - uses: actions/checkout@v3 - with: - submodules: recursive - fetch-depth: 0 - - name: 'Set up Docker' - uses: ./.github/actions/with-docker - with: - container-name: kevm-ci-concrete-${{ github.sha }} - - name: 'Build kevm-pyk' - run: docker exec -u github-user kevm-ci-concrete-${GITHUB_SHA} /bin/bash -c 'make poetry' - - name: 'Build blockchain-k-plugin-deps' - run: docker exec -u github-user kevm-ci-concrete-${GITHUB_SHA} /bin/bash -c 'make CXX=clang++-14 plugin-deps' - - name: 'Build kevm' - run: docker exec -u github-user kevm-ci-concrete-${GITHUB_SHA} /bin/bash -c 'make build-kevm build-haskell build-llvm build-node -j`nproc` RELEASE=true' - - name: 'Test kevm-pyk' - run: docker exec -u github-user kevm-ci-concrete-${GITHUB_SHA} /bin/bash -c 'make test-integration' - - name: 'Test conformance' - run: docker exec -u github-user kevm-ci-concrete-${GITHUB_SHA} /bin/bash -c 'make test-conformance' - - name: 'Test llvm krun' - run: docker exec -u github-user kevm-ci-concrete-${GITHUB_SHA} /bin/bash -c 'make test-interactive-run TEST_CONCRETE_BACKEND=llvm' - - name: 'Test node' - run: docker exec -u github-user kevm-ci-concrete-${GITHUB_SHA} /bin/bash -c 'make test-node -j`nproc`' - - name: 'Tear down Docker' - if: always() - run: | - docker stop --time=0 kevm-ci-concrete-${GITHUB_SHA} - - test-prove-haskell: - name: 'Build and Test KEVM haskell proofs' - needs: kevm-pyk-code-quality-checks - runs-on: [self-hosted, linux, normal] - timeout-minutes: 120 - steps: - - name: 'Check out code' - uses: actions/checkout@v3 - with: - submodules: recursive - fetch-depth: 0 - - name: 'Set up Docker' - uses: ./.github/actions/with-docker - with: - container-name: kevm-ci-haskell-${{ github.sha }} - - name: 'Prove Haskell' - run: docker exec -u github-user kevm-ci-haskell-${GITHUB_SHA} /bin/bash -c 'make test-prove' - - name: 'Tear down Docker' - if: always() - run: | - docker stop --time=0 kevm-ci-haskell-${GITHUB_SHA} - - test-prove-foundry: - name: 'Build and Test KEVM Foundry proofs' - needs: kevm-pyk-code-quality-checks - runs-on: [self-hosted, linux, normal] - timeout-minutes: 150 - steps: - - name: 'Check out code' - uses: actions/checkout@v3 - with: - submodules: recursive - fetch-depth: 0 - - name: 'Set up Docker' - uses: ./.github/actions/with-docker - with: - container-name: kevm-ci-foundry-${{ github.sha }} - - name: 'Build kevm-pyk' - run: docker exec -u github-user kevm-ci-foundry-${GITHUB_SHA} /bin/bash -c 'make poetry' - - name: 'Build Foundry' - run: docker exec -u github-user kevm-ci-foundry-${GITHUB_SHA} /bin/bash -c 'make build-foundry -j2' - - name: 'Foundry Prove' - run: docker exec -u github-user kevm-ci-foundry-${GITHUB_SHA} /bin/bash -c 'make test-foundry-prove PYTEST_ARGS=-vv' - - name: 'Tear down Docker' - if: always() - run: | - docker stop --time=0 kevm-ci-foundry-${GITHUB_SHA} - - test-prove-foundry-booster: - name: 'Build and Test KEVM Foundry proofs (booster)' - needs: kevm-pyk-code-quality-checks - runs-on: [self-hosted, linux, normal] - timeout-minutes: 150 - steps: - - name: 'Check out code' - uses: actions/checkout@v3 - with: - submodules: recursive - fetch-depth: 0 - - name: 'Set up Docker' - uses: ./.github/actions/with-docker - with: - container-name: kevm-ci-booster-${{ github.sha }} - - name: 'Build kevm-pyk' - run: docker exec -u github-user kevm-ci-booster-${GITHUB_SHA} /bin/bash -c 'make poetry' - - name: 'Build blockchain-k-plugin-deps' - run: docker exec -u github-user kevm-ci-booster-${GITHUB_SHA} /bin/bash -c 'make CXX=clang++-14 plugin-deps' - - name: 'Build Foundry' - run: docker exec -u github-user kevm-ci-booster-${GITHUB_SHA} /bin/bash -c 'make build-foundry -j2' - - name: 'Foundry Prove' - run: docker exec -u github-user kevm-ci-booster-${GITHUB_SHA} /bin/bash -c 'make test-foundry-prove PYTEST_ARGS="-vv --use-booster"' - - name: 'Tear down Docker' - if: always() - run: | - docker stop --time=0 kevm-ci-booster-${GITHUB_SHA} - - nix: - name: 'Nix' - strategy: - fail-fast: false - matrix: - include: - - runner: normal - - runner: macos-13 - - runner: ARM64 - needs: kevm-pyk-code-quality-checks - runs-on: ${{ matrix.runner }} - timeout-minutes: 60 - steps: - - name: 'Check out code' - uses: actions/checkout@v3 - with: - # Check out pull request HEAD instead of merge commit. - ref: ${{ github.event.pull_request.head.sha }} - - name: 'Install Nix' - if: ${{ matrix.runner == 'macos-13' }} - uses: cachix/install-nix-action@v19 - with: - install_url: https://releases.nixos.org/nix/nix-2.13.3/install - extra_nix_config: | - access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} - substituters = http://cache.nixos.org https://cache.iog.io - trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= - - name: 'Install Cachix' - if: ${{ matrix.runner == 'macos-13' }} - uses: cachix/cachix-action@v12 - with: - name: k-framework - authToken: ${{ secrets.CACHIX_PUBLIC_TOKEN }} - - name: 'Build KEVM' - run: GC_DONT_GC=1 nix build --extra-experimental-features 'nix-command flakes' --print-build-logs - - name: 'Test KEVM' - run: GC_DONT_GC=1 nix build --extra-experimental-features 'nix-command flakes' --print-build-logs .#kevm-test - - build-deb-package: - name: 'Build Ubuntu Jammy DockerHub Image' - runs-on: [self-hosted, linux, normal] - needs: kevm-pyk-code-quality-checks - steps: - - name: 'Check out code' - uses: actions/checkout@v3 - with: - submodules: recursive - ref: ${{ github.event.push.head.sha }} - - name: 'Set up Docker' - uses: ./.github/actions/with-docker - with: - container-name: kevm-package-jammy-${{ github.sha }} - - name: 'Build Package' - run: | - set -euxo pipefail - version=$(cat package/version) - docker exec -u github-user kevm-package-jammy-${GITHUB_SHA} /bin/bash -c 'package/debian/package jammy' - docker cp kevm-package-jammy-${GITHUB_SHA}:/home/github-user/kevm_${version}_amd64.deb ./ - - - name: 'Setup Foundry Test Docker' - uses: ./.github/actions/with-docker - with: - container-name: kevm-ci-test-${{ github.sha }} - dockerfile: package/docker/Dockerfile - - - name: 'KEVM Foundry Test' - run: | - set -euxo pipefail - docker cp ./tests/foundry kevm-ci-test-${GITHUB_SHA}:/home/github-user/foundry - docker exec -u github-user kevm-ci-test-${GITHUB_SHA} /bin/bash -c "sudo chown github-user:github-user -R /home/github-user/foundry" - docker exec -u github-user kevm-ci-test-${GITHUB_SHA} /bin/bash -c "forge build --root /home/github-user/foundry" - docker exec -u github-user kevm-ci-test-${GITHUB_SHA} /bin/bash -c "kevm foundry-kompile --foundry-project-root /home/github-user/foundry --verbose" - docker exec -u github-user kevm-ci-test-${GITHUB_SHA} /bin/bash -c "kevm foundry-prove --foundry-project-root /home/github-user/foundry --verbose --test AssertTest.test_assert_true_branch" - docker exec -u github-user kevm-ci-test-${GITHUB_SHA} /bin/bash -c "kevm foundry-show --foundry-project-root /home/github-user/foundry --verbose AssertTest.test_assert_true_branch" - docker exec -u github-user kevm-ci-test-${GITHUB_SHA} /bin/bash -c "kevm foundry-list --foundry-project-root /home/github-user/foundry --verbose" - - - name: 'Tear down Docker' - if: always() - run: | - docker stop --time=0 kevm-package-jammy-${GITHUB_SHA} - docker stop --time=0 kevm-ci-test-${GITHUB_SHA} diff --git a/.github/workflows/update-foundry-prove.yml b/.github/workflows/update-foundry-prove.yml deleted file mode 100644 index 192c935ee1..0000000000 --- a/.github/workflows/update-foundry-prove.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: 'Update Foundry prove' -on: - workflow_dispatch: - inputs: - branch: - description: 'Branch to update version of' - required: true -jobs: - update-output: - name: 'Update Foundry expected output' - runs-on: [self-hosted, linux, normal] - steps: - - name: 'Check out code' - uses: actions/checkout@v3 - with: - submodules: recursive - token: ${{ secrets.JENKINS_GITHUB_PAT }} - ref: ${{ github.events.inputs.branch }} - fetch-depth: 0 - - name: 'Configure GitHub user' - run: | - git config user.name devops - git config user.email devops@runtimeverification.com - - name: 'Set up Docker' - uses: ./.github/actions/with-docker - with: - container-name: kevm-update-output-${{ github.sha }} - os: ubuntu - distro: jammy - llvm: 14 - jdk: 17 - # User subdir: if you need to be in a lower folder to build something. Otherwise leave as default (.) - # subdir: - - name: 'Build devShell' - env: - CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_PUBLIC_TOKEN }} - run: cachix watch-exec k-framework -- nix build --extra-experimental-features 'nix-command flakes' .#devShell.x86_64-linux.inputDerivation --no-link - - name: 'Build k-deps' - run: docker exec -u github-user kevm-update-output-${GITHUB_SHA} /bin/bash -c 'make k-deps' - - name: 'Build blockchain-k-plugin-deps' - run: docker exec -u github-user kevm-update-output-${GITHUB_SHA} /bin/bash -c 'make plugin-deps' - - name: 'Build kevm-pyk' - run: docker exec -u github-user kevm-update-output-${GITHUB_SHA} /bin/bash -c 'make poetry' - - name: 'Build evm-semantics' - run: docker exec -u github-user kevm-update-output-${GITHUB_SHA} /bin/bash -c 'make build' - - name: 'Build Foundry' - run: docker exec -u github-user kevm-update-output-${GITHUB_SHA} /bin/bash -c 'make build-foundry -j2' - - name: 'Foundry Prove Update' - run: docker exec -u github-user kevm-update-output-${GITHUB_SHA} /bin/bash -c 'make test-foundry-prove FOUNDRY_PAR=8 PYTEST_ARGS+="--use-booster --update-expected-output"' - - name: 'Tear down Docker' - if: always() - run: | - docker stop --time=0 kevm-update-output-${GITHUB_SHA} - - name: 'Commit changes' - run: | - git add kevm-pyk/src/tests/integration/test-data/show/ && git commit --allow-empty -m "test-data/show/: update expected show output" || true - - name: 'Push updates' - run: git push diff --git a/.github/workflows/update-version.yml b/.github/workflows/update-version.yml deleted file mode 100644 index 3464faf97b..0000000000 --- a/.github/workflows/update-version.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: 'Update Version' -on: - push: - branches: - - '_update-deps/runtimeverification/blockchain-k-plugin' - - '_update-deps/runtimeverification/pyk' - workflow_dispatch: -# Stop in progress workflows on the same branch and same workflow to use latest committed code -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - - update-versions: - name: 'Update Dependency Versions' - runs-on: ubuntu-latest - steps: - - name: 'Check out code' - uses: actions/checkout@v3 - with: - submodules: recursive - token: ${{ secrets.JENKINS_GITHUB_PAT }} - fetch-depth: 0 - - name: 'Configure GitHub user' - run: | - git config user.name devops - git config user.email devops@runtimeverification.com - - name: 'Install Poetry' - uses: Gr1N/setup-poetry@v8 - - name: 'Update pyk release tag' - run: | - PYK_VERSION="$(cat deps/pyk_release)" - sed -i 's!pyk = { git = "https://github.com/runtimeverification/pyk.git", tag="[v0-9\.]*" }!pyk = { git = "https://github.com/runtimeverification/pyk.git", tag="'${PYK_VERSION}'" }!' kevm-pyk/pyproject.toml - poetry -C kevm-pyk update - git add kevm-pyk/ && git commit -m "kevm-pyk/: sync poetry files pyk version ${PYK_VERSION}" || true - - name: 'Update K release file' - run: | - K_VERSION=$(poetry -C kevm-pyk run python3 -c 'import pyk; print(pyk.K_VERSION)') - echo ${K_VERSION} > deps/k_release - git add deps/k_release && git commit -m "deps/k_release: sync release file version ${K_VERSION}" || true - - name: 'Update plugin release file' - run: | - BKP_VERSION=$(git -C deps/plugin rev-parse HEAD) - echo ${BKP_VERSION} > deps/blockchain-k-plugin_release - git add deps/blockchain-k-plugin_release && git commit -m "deps/blockchain-k-plugin_release: sync release file version ${BKP_VERSION}" || true - - name: 'Install Nix/Cachix' - uses: cachix/install-nix-action@v19 - with: - install_url: https://releases.nixos.org/nix/nix-2.13.3/install - extra_nix_config: | - access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} - - uses: cachix/cachix-action@v12 - with: - name: k-framework - authToken: ${{ secrets.CACHIX_PUBLIC_TOKEN }} - - name: 'Update nix flake inputs' - run: | - K_VERSION=$(cat deps/k_release) - BKP_VERSION=$(cat deps/blockchain-k-plugin_release) - PYK_VERSION=$(cat deps/pyk_release) - sed -i 's! k-framework.url = "github:runtimeverification/k/[v0-9\.]*"! k-framework.url = "github:runtimeverification/k/v'"${K_VERSION}"'"!' flake.nix - sed -i 's! blockchain-k-plugin.url = "github:runtimeverification/blockchain-k-plugin/[0-9a-f]*"! blockchain-k-plugin.url = "github:runtimeverification/blockchain-k-plugin/'"${BKP_VERSION}"'"!' flake.nix - sed -i 's! pyk.url = "github:runtimeverification/pyk/[v0-9\.]*"! pyk.url = "github:runtimeverification/pyk/'"${PYK_VERSION}"'"!' flake.nix - nix run .#update-from-submodules - nix flake update - git add flake.nix flake.lock && git commit -m 'flake.{nix,lock}: update Nix derivations' || true - - name: 'Push updates' - run: git push diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 2a2fd12e0c..0000000000 --- a/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -/.build/* -.envrc -.kompile* -.kprove* -.krun* -/media/*.pdf -/optimizer/*.json -/optimizer/*.k -/package/pkg -/package/src -/pkg -/tests/**/*.debug-log -/tests/foundry/cache -/tests/foundry/foundry.k -/tests/foundry/foundry.k.check.stripped -/tests/foundry/contracts.k.check.stripped -/tests/foundry/foundry-list.check.stripped -/tests/foundry/golden/*.out -/tests/foundry/*.out -/tests/foundry/out -/tests/foundry/test/filecopy2.txt -/tests/foundry/test/filecopy.txt -/tests/foundry/test/fileline.txt -/tests/**/*.rule-profile -/tests/specs/**/*-bin-runtime.k -/tests/specs/foundry/*.out -/tests/specs/**/haskell -/tests/specs/**/java -/tests/specs/opcodes/evm-optimizations-spec.md -/tests/specs/**/*.prove.out -/tests/specs/**/*.sol.json -/tests/vm/*.out diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 9e12e7b154..0000000000 --- a/.gitmodules +++ /dev/null @@ -1,19 +0,0 @@ -[submodule "tests/ethereum-tests"] - path = tests/ethereum-tests - url = https://github.com/ethereum/tests.git - branch = develop - ignore = untracked -[submodule "deps/plugin"] - path = deps/plugin - url = https://github.com/runtimeverification/blockchain-k-plugin - ignore = untracked -[submodule "deps/metropolis"] - path = deps/metropolis - url = https://github.com/matze/mtheme - ignore = untracked -[submodule "web/k-web-theme"] - path = web/k-web-theme - url = https://github.com/runtimeverification/k-web-theme -[submodule "tests/foundry/lib/forge-std"] - path = tests/foundry/lib/forge-std - url = https://github.com/foundry-rs/forge-std diff --git a/INSTALL.md b/INSTALL.md deleted file mode 100644 index bc4f73a896..0000000000 --- a/INSTALL.md +++ /dev/null @@ -1,25 +0,0 @@ -KEVM: Semantics of EVM in K -=========================== - -In this repository we provide a model of the EVM in K. - -Fast Installation ------------------ - -- `bash <(curl https://kframework.org/install)`: install [the `kup` utility](https://github.com/runtimeverification/kup) -- `kup install kevm`: install KEVM. -- `kup list kevm`: list available KEVM versions. -- `kup update kevm`: update to latest KEVM version. - -Documentation/Support ---------------------- - -These may be useful for learning KEVM and K (newest to oldest): - -- [Jello Paper], a nice presentation of this repository. -- [20 minute tour of the semantics](https://www.youtube.com/watch?v=tIq_xECoicQNov) at [2017 Devcon3]. -- [KEVM 1.0 technical report](http://hdl.handle.net/2142/97207), especially sections 3 and 5. -- [KEVM Paper at CSF'18/FLoC](https://fsl.cs.illinois.edu/publications/hildenbrandt-saxena-zhu-rodrigues-daian-guth-moore-zhang-park-rosu-2018-csf). - -To get support for KEVM, please join our [Discord Channel](https://discord.gg/EZtNj7gt). - diff --git a/INSTALL/index.html b/INSTALL/index.html new file mode 100644 index 0000000000..6103840a2f --- /dev/null +++ b/INSTALL/index.html @@ -0,0 +1,223 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

KEVM: Semantics of EVM in K

+

In this repository we provide a model of the EVM in K.

+

Fast Installation

+
    +
  • bash <(curl https://kframework.org/install): install the kup utility
  • +
  • kup install kevm: install KEVM.
  • +
  • kup list kevm: list available KEVM versions.
  • +
  • kup update kevm: update to latest KEVM version.
  • +
+

Documentation/Support

+

These may be useful for learning KEVM and K (newest to oldest):

+ +

To get support for KEVM, please join our Discord Channel.

+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 2671ba32cb..0000000000 --- a/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2016-2022, Runtime Verification Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Makefile b/Makefile deleted file mode 100644 index 8bd850d011..0000000000 --- a/Makefile +++ /dev/null @@ -1,520 +0,0 @@ -# Settings -# -------- - -UNAME_S := $(shell uname -s) - -DEPS_DIR := deps -BUILD_DIR := .build -NODE_DIR := $(abspath node) -BUILD_LOCAL := $(abspath $(BUILD_DIR)/local) -LOCAL_LIB := $(BUILD_LOCAL)/lib -LOCAL_BIN := $(BUILD_LOCAL)/bin -export NODE_DIR -export LOCAL_LIB - -INSTALL_PREFIX := /usr -INSTALL_BIN ?= $(INSTALL_PREFIX)/bin -INSTALL_LIB ?= $(INSTALL_PREFIX)/lib/kevm -INSTALL_INCLUDE ?= $(INSTALL_LIB)/include - -KEVM_BIN := $(BUILD_DIR)$(INSTALL_BIN) -KEVM_LIB := $(BUILD_DIR)$(INSTALL_LIB) -KEVM_INCLUDE := $(KEVM_LIB)/include -KEVM_K_BIN := $(KEVM_LIB)/kframework/bin -KEVM := kevm -KEVM_LIB_ABS := $(abspath $(KEVM_LIB)) -export KEVM_LIB_ABS - -KEVM_VERSION ?= $(shell cat package/version) -KEVM_RELEASE_TAG ?= v$(KEVM_VERSION)-$(shell git rev-parse --short HEAD) - -K_SUBMODULE := $(DEPS_DIR)/k - -C_INCLUDE_PATH += :$(BUILD_LOCAL)/include -CPLUS_INCLUDE_PATH += :$(BUILD_LOCAL)/include -PATH := $(abspath $(KEVM_BIN)):$(abspath $(KEVM_K_BIN)):$(LOCAL_BIN):$(PATH) - -export C_INCLUDE_PATH -export CPLUS_INCLUDE_PATH -export PATH - -PLUGIN_SUBMODULE := $(DEPS_DIR)/plugin -PLUGIN_SOURCE := $(KEVM_INCLUDE)/kframework/blockchain-k-plugin/krypto.md -PLUGIN_FULL_PATH := $(abspath ${PLUGIN_SUBMODULE}) -export PLUGIN_FULL_PATH - - -.PHONY: all clean distclean install uninstall \ - plugin-deps protobuf proto-tester \ - poetry-env poetry shell kevm-pyk \ - build build-haskell build-haskell-standalone build-foundry build-llvm build-node build-kevm \ - test test-integration test-conformance test-prove test-foundry-prove test-prove-smoke \ - test-vm test-rest-vm test-bchain test-rest-bchain test-node test-interactive test-interactive-run \ - profile \ - media media-pdf metropolis-theme - -.SECONDARY: - -all: build - -clean: - rm -rf $(KEVM_BIN) $(KEVM_LIB) - -distclean: - rm -rf $(BUILD_DIR) - -# Non-K Dependencies -# ------------------ - -protobuf_out := $(LOCAL_LIB)/proto/proto/msg.pb.cc -protobuf: $(protobuf_out) - -$(protobuf_out): $(NODE_DIR)/proto/msg.proto - @mkdir -p $(LOCAL_LIB)/proto - protoc --cpp_out=$(LOCAL_LIB)/proto -I $(NODE_DIR) $(NODE_DIR)/proto/msg.proto - - -# K Dependencies -# -------------- - -plugin_k_include := $(KEVM_INCLUDE)/kframework/plugin -plugin_include := $(KEVM_LIB)/blockchain-k-plugin/include -plugin_k := krypto.md -plugin_c := plugin_util.cpp crypto.cpp blake2.cpp plugin_util.h blake2.h -plugin_needed_lib := libcryptopp libff libsecp256k1 -plugin_includes := $(patsubst %, $(plugin_k_include)/%, $(plugin_k)) -plugin_c_includes := $(patsubst %, $(plugin_include)/c/%, $(plugin_c)) -plugin_needed_libs := $(patsubst %, $(KEVM_LIB)/%, $(plugin_needed_lib)) - -$(plugin_include)/c/%: $(PLUGIN_SUBMODULE)/plugin-c/% - @mkdir -p $(dir $@) - install $< $@ - -$(plugin_k_include)/%: $(PLUGIN_SUBMODULE)/plugin/% - @mkdir -p $(dir $@) - install $< $@ - - -$(KEVM_LIB)/%: $(PLUGIN_SUBMODULE)/build/% - @mkdir -p $(dir $@) - cp -r $< $@ - -$(PLUGIN_SUBMODULE)/build/lib%: - cd $(PLUGIN_SUBMODULE) && $(MAKE) lib$* - -plugin-deps: $(plugin_includes) $(plugin_c_includes) $(plugin_needed_libs) - - -# Building -# -------- - -PYTHON_BIN := python3.10 -KEVM_PYK_DIR := ./kevm-pyk -POETRY := poetry -C $(KEVM_PYK_DIR) -POETRY_RUN := $(POETRY) run -- - -poetry-env: - $(POETRY) env use $(PYTHON_BIN) - -poetry: poetry-env - $(POETRY) install - -shell: poetry - $(POETRY) shell - -kevm-pyk: poetry-env - $(MAKE) -C $(KEVM_PYK_DIR) - -kevm_files := abi.md \ - asm.md \ - buf.md \ - data.md \ - driver.md \ - edsl.md \ - evm.md \ - evm-types.md \ - evm-node.md \ - foundry.md \ - hashed-locations.md \ - gas.md \ - json-rpc.md \ - network.md \ - optimizations.md \ - schedule.md \ - serialization.md \ - state-utils.md \ - word.md \ - lemmas/lemmas.k \ - lemmas/evm-int-simplification.k \ - lemmas/int-simplification.k \ - lemmas/bitwise-simplification.k \ - lemmas/bytes-simplification.k - -kevm_includes := $(patsubst %, $(KEVM_INCLUDE)/kframework/%, $(kevm_files)) - -includes := $(kevm_includes) $(plugin_includes) $(plugin_c_includes) - -$(KEVM_INCLUDE)/%: include/% - @mkdir -p $(dir $@) - install $< $@ - -$(KEVM_INCLUDE)/kframework/lemmas/%.k: tests/specs/%.k - @mkdir -p $(dir $@) - install $< $@ - -KEVM_PYK := $(POETRY_RUN) kevm-pyk -KOMPILE := KEVM_LIB=$(KEVM_LIB) $(KEVM_PYK) kompile -KOMPILE_MAIN_FILE := -KOMPILE_TARGET := -KOMPILE_MAIN_MODULE := -KOMPILE_SYNTAX_MODULE := - -KOMPILE_OPTS := -ifneq (,$(RELEASE)) - KOMPILE_OPTS += -O2 -else - KOMPILE_OPTS += -O1 -endif - -kompile = \ - $(KOMPILE) \ - $(KOMPILE_MAIN_FILE) \ - --target $(KOMPILE_TARGET) \ - --main-module $(KOMPILE_MAIN_MODULE) \ - --syntax-module $(KOMPILE_SYNTAX_MODULE) \ - $(KOMPILE_OPTS) - - -# Haskell - -haskell_dir := haskell -haskell_kompiled := $(haskell_dir)/definition.kore -kompile_haskell := $(KEVM_LIB)/$(haskell_kompiled) - -ifeq ($(UNAME_S),Darwin) -$(kompile_haskell): $(libsecp256k1_out) -endif - -$(kompile_haskell): $(kevm_includes) $(plugin_includes) - -$(kompile_haskell): KOMPILE_TARGET := haskell -$(kompile_haskell): KOMPILE_MAIN_FILE := $(KEVM_INCLUDE)/kframework/edsl.md -$(kompile_haskell): KOMPILE_MAIN_MODULE := EDSL -$(kompile_haskell): KOMPILE_SYNTAX_MODULE := EDSL -$(kompile_haskell): - $(kompile) - - -# Standalone - -llvm_dir := llvm -llvm_kompiled := $(llvm_dir)/interpreter -kompile_llvm := $(KEVM_LIB)/$(llvm_kompiled) - - - -$(kompile_llvm): $(kevm_includes) $(plugin_includes) $(plugin_c_includes) - -$(kompile_llvm): KOMPILE_TARGET := llvm -$(kompile_llvm): KOMPILE_MAIN_FILE := $(KEVM_INCLUDE)/kframework/driver.md -$(kompile_llvm): KOMPILE_MAIN_MODULE := ETHEREUM-SIMULATION -$(kompile_llvm): KOMPILE_SYNTAX_MODULE := ETHEREUM-SIMULATION -$(kompile_llvm): - $(kompile) - - -# Haskell Standalone - -haskell_standalone_dir := haskell-standalone -haskell_standalone_kompiled := $(haskell_standalone_dir)/definition.kore -kompile_haskell_standalone := $(KEVM_LIB)/$(haskell_standalone_kompiled) - - -$(kompile_haskell_standalone): $(kevm_includes) $(plugin_includes) - -$(kompile_haskell_standalone): KOMPILE_TARGET := haskell-standalone -$(kompile_haskell_standalone): KOMPILE_MAIN_FILE := $(KEVM_INCLUDE)/kframework/driver.md -$(kompile_haskell_standalone): KOMPILE_MAIN_MODULE := ETHEREUM-SIMULATION -$(kompile_haskell_standalone): KOMPILE_SYNTAX_MODULE := ETHEREUM-SIMULATION -$(kompile_haskell_standalone): - $(kompile) - - -# Node -# -node_dir := node -node_kore := $(node_dir)/definition.kore -node_kompiled := $(node_dir)/build/kevm-vm -kompile_node := $(KEVM_LIB)/$(node_kore) -export node_dir - -$(kompile_node): $(kevm_includes) $(plugin_includes) $(plugin_c_includes) - -$(kompile_node): KOMPILE_TARGET := node -$(kompile_node): KOMPILE_MAIN_FILE := $(KEVM_INCLUDE)/kframework/evm-node.md -$(kompile_node): KOMPILE_MAIN_MODULE := EVM-NODE -$(kompile_node): KOMPILE_SYNTAX_MODULE := EVM-NODE -$(kompile_node): - $(kompile) - - -$(KEVM_LIB)/$(node_kompiled): $(KEVM_LIB)/$(node_kore) $(protobuf_out) - @mkdir -p $(dir $@) - cd $(dir $@) && cmake $(CURDIR)/cmake/node -DCMAKE_INSTALL_PREFIX=$(INSTALL_LIB)/$(node_dir) -DCMAKE_CXX_FLAGS=-std=c++17 && $(MAKE) - - -# Foundry - -foundry_dir := foundry -foundry_kompiled := $(foundry_dir)/definition.kore -kompile_foundry := $(KEVM_LIB)/$(foundry_kompiled) - - -$(kompile_foundry): $(kevm_includes) $(plugin_includes) $(lemma_includes) - -$(kompile_foundry): KOMPILE_TARGET := foundry -$(kompile_foundry): KOMPILE_MAIN_FILE := $(KEVM_INCLUDE)/kframework/foundry.md -$(kompile_foundry): KOMPILE_MAIN_MODULE := FOUNDRY -$(kompile_foundry): KOMPILE_SYNTAX_MODULE := FOUNDRY -$(kompile_foundry): - $(kompile) - - -# Installing -# ---------- - -install_bins := kevm \ - kevm-vm - -install_libs := $(haskell_kompiled) \ - $(llvm_kompiled) \ - $(foundry_kompiled) \ - $(haskell_standalone_kompiled) \ - $(patsubst %, include/kframework/lemmas/%, $(kevm_lemmas)) \ - release.md \ - version - -$(KEVM_BIN)/%: bin/% - @mkdir -p $(dir $@) - install $< $@ - -$(KEVM_BIN)/kevm-vm: $(KEVM_LIB)/$(node_kompiled) - @mkdir -p $(dir $@) - install $< $@ - -$(KEVM_LIB)/%.py: scripts/%.py - @mkdir -p $(dir $@) - install $< $@ - -$(KEVM_LIB)/version: package/version - @mkdir -p $(dir $@) - install $< $@ - -$(KEVM_LIB)/release.md: INSTALL.md - @mkdir -p $(dir $@) - echo "KEVM Release $(shell cat package/version)" > $@ - echo >> $@ - cat INSTALL.md >> $@ - -build: $(patsubst %, $(KEVM_BIN)/%, $(install_bins)) $(patsubst %, $(KEVM_LIB)/%, $(install_libs)) - -build-llvm: $(KEVM_LIB)/$(llvm_kompiled) -build-haskell: $(KEVM_LIB)/$(haskell_kompiled) -build-haskell-standalone: $(KEVM_LIB)/$(haskell_standalone_kompiled) -build-node: $(KEVM_LIB)/$(node_kompiled) -build-kevm: $(KEVM_BIN)/kevm $(KEVM_LIB)/version $(kevm_includes) $(plugin_includes) -build-foundry: $(KEVM_BIN)/kevm $(KEVM_LIB)/$(foundry_kompiled) - -all_bin_sources := $(shell find $(KEVM_BIN) -type f | sed 's|^$(KEVM_BIN)/||') -all_lib_sources := $(shell find $(KEVM_LIB) -type f \ - -not -path "$(KEVM_LIB)/**/dt/*" \ - -not -path "$(KEVM_LIB)/kframework/share/kframework/pl-tutorial/*" \ - -not -path "$(KEVM_LIB)/kframework/share/kframework/k-tutorial/*" \ - | sed 's|^$(KEVM_LIB)/||') - -install: $(patsubst %, $(DESTDIR)$(INSTALL_BIN)/%, $(all_bin_sources)) \ - $(patsubst %, $(DESTDIR)$(INSTALL_LIB)/%, $(all_lib_sources)) - -$(DESTDIR)$(INSTALL_BIN)/%: $(KEVM_BIN)/% - @mkdir -p $(dir $@) - install $< $@ - -$(DESTDIR)$(INSTALL_LIB)/%: $(KEVM_LIB)/% - @mkdir -p $(dir $@) - install $< $@ - -uninstall: - rm -rf $(DESTDIR)$(INSTALL_BIN)/kevm - rm -rf $(DESTDIR)$(INSTALL_LIB)/kevm - -# Tests -# ----- - -TEST_CONCRETE_BACKEND := llvm -TEST_SYMBOLIC_BACKEND := haskell - -CHECK := git --no-pager diff --no-index --ignore-all-space -R - -KEVM_MODE := NORMAL -KEVM_SCHEDULE := MERGE -KEVM_CHAINID := 1 - -KPROVE_MODULE = VERIFICATION -KPROVE_FILE = verification -KPROVE_EXT = k - -KEVM_OPTS ?= -KPROVE_OPTS ?= -KAST_OPTS ?= -KRUN_OPTS ?= -KSEARCH_OPTS ?= - -KEEP_OUTPUTS := false - -test: test-integration test-conformance test-prove test-interactive - -# Generic Test Harnesses - -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/%: KEVM_MODE = VMTESTS -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/%: KEVM_SCHEDULE = DEFAULT - -tests/%.run-interactive: tests/% - $(POETRY_RUN) $(KEVM) run $< $(KEVM_OPTS) $(KRUN_OPTS) --target $(TEST_CONCRETE_BACKEND) \ - --mode $(KEVM_MODE) --schedule $(KEVM_SCHEDULE) --chainid $(KEVM_CHAINID) \ - > tests/$*.$(TEST_CONCRETE_BACKEND)-out \ - || $(CHECK) tests/$*.$(TEST_CONCRETE_BACKEND)-out tests/templates/output-success-$(TEST_CONCRETE_BACKEND).json - $(KEEP_OUTPUTS) || rm -rf tests/$*.$(TEST_CONCRETE_BACKEND)-out - -# solc-to-k -# --------- - -PYTEST_PARALLEL := 8 -PYTEST_ARGS := - -test-foundry-prove: poetry build-kevm build-foundry - $(MAKE) -C kevm-pyk/ test-integration TEST_ARGS+="-k test_foundry_prove.py -n$(PYTEST_PARALLEL) $(PYTEST_ARGS)" - -tests/specs/examples/%-bin-runtime.k: KEVM_OPTS += --verbose -tests/specs/examples/%-bin-runtime.k: KEVM := $(POETRY_RUN) kevm - -tests/specs/examples/erc20-spec/haskell/timestamp: tests/specs/examples/erc20-bin-runtime.k -tests/specs/examples/erc20-bin-runtime.k: tests/specs/examples/ERC20.sol $(KEVM_LIB)/$(haskell_kompiled) poetry - $(KEVM) solc-to-k $< ERC20 $(KEVM_OPTS) --verbose --definition $(KEVM_LIB)/$(haskell_dir) --main-module ERC20-VERIFICATION > $@ - -tests/specs/examples/erc721-spec/haskell/timestamp: tests/specs/examples/erc721-bin-runtime.k -tests/specs/examples/erc721-bin-runtime.k: tests/specs/examples/ERC721.sol $(KEVM_LIB)/$(haskell_kompiled) poetry - $(KEVM) solc-to-k $< ERC721 $(KEVM_OPTS) --verbose --definition $(KEVM_LIB)/$(haskell_dir) --main-module ERC721-VERIFICATION > $@ - -tests/specs/examples/storage-spec/haskell/timestamp: tests/specs/examples/storage-bin-runtime.k -tests/specs/examples/storage-bin-runtime.k: tests/specs/examples/Storage.sol $(KEVM_LIB)/$(haskell_kompiled) poetry - $(KEVM) solc-to-k $< Storage $(KEVM_OPTS) --verbose --definition $(KEVM_LIB)/$(haskell_dir) --main-module STORAGE-VERIFICATION > $@ - -tests/specs/examples/empty-bin-runtime.k: tests/specs/examples/Empty.sol $(KEVM_LIB)/$(haskell_kompiled) poetry - $(KEVM) solc-to-k $< Empty $(KEVM_OPTS) --verbose --definition $(KEVM_LIB)/$(haskell_dir) --main-module EMPTY-VERIFICATION > $@ - -.SECONDEXPANSION: -tests/specs/%.prove: tests/specs/% tests/specs/$$(firstword $$(subst /, ,$$*))/$$(KPROVE_FILE)/$(TEST_SYMBOLIC_BACKEND)/timestamp - $(POETRY_RUN) $(KEVM) prove $< $(KEVM_OPTS) --target $(TEST_SYMBOLIC_BACKEND) $(KPROVE_OPTS) \ - --definition tests/specs/$(firstword $(subst /, ,$*))/$(KPROVE_FILE)/$(TEST_SYMBOLIC_BACKEND) - -tests/specs/%/timestamp: tests/specs/$$(firstword $$(subst /, ,$$*))/$$(KPROVE_FILE).$$(KPROVE_EXT) $(kevm_includes) $(plugin_includes) - $(KOMPILE) \ - $< \ - --target $(word 3, $(subst /, , $*)) \ - --output-definition tests/specs/$(firstword $(subst /, ,$*))/$(KPROVE_FILE)/$(word 3, $(subst /, , $*)) \ - --main-module $(KPROVE_MODULE) \ - --syntax-module $(KPROVE_MODULE) \ - $(KOMPILE_OPTS) - -# Smoke Tests - -smoke_tests_run = tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/add0.json \ - tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/pop1.json \ - tests/interactive/sumTo10.evm - -smoke_tests_prove=tests/specs/erc20/ds/transfer-failure-1-a-spec.k - -# Conformance Tests - -test-conformance: poetry build-kevm build-llvm - $(MAKE) -C kevm-pyk/ test-integration TEST_ARGS+="-k test_conformance.py -n$(PYTEST_PARALLEL) $(PYTEST_ARGS)" - -test-vm: poetry build-kevm build-llvm - $(MAKE) -C kevm-pyk/ test-integration TEST_ARGS+="-k test_vm -n$(PYTEST_PARALLEL) $(PYTEST_ARGS)" - -test-rest-vm: poetry build-kevm build-llvm - $(MAKE) -C kevm-pyk/ test-integration TEST_ARGS+="-k test_rest_vm -n$(PYTEST_PARALLEL) $(PYTEST_ARGS)" - -test-bchain: poetry build-kevm build-llvm - $(MAKE) -C kevm-pyk/ test-integration TEST_ARGS+="-k test_bchain -n$(PYTEST_PARALLEL) $(PYTEST_ARGS)" - -test-rest-bchain: poetry build-kevm build-llvm - $(MAKE) -C kevm-pyk/ test-integration TEST_ARGS+="-k test_rest_bchain -n$(PYTEST_PARALLEL) $(PYTEST_ARGS)" - -# Proof Tests - -prove_smoke_tests := $(shell cat tests/specs/smoke) - -test-prove: tests/specs/opcodes/evm-optimizations-spec.md poetry build-kevm build-haskell - $(MAKE) -C kevm-pyk/ test-integration TEST_ARGS+="-k test_prove -n$(PYTEST_PARALLEL) $(PYTEST_ARGS)" - -test-prove-smoke: $(prove_smoke_tests:=.prove) - -# to generate optimizations.md, run: ./optimizer/optimize.sh &> output -tests/specs/opcodes/evm-optimizations-spec.md: include/kframework/optimizations.md - cat $< | sed 's/^rule/claim/' | sed 's/EVM-OPTIMIZATIONS/EVM-OPTIMIZATIONS-SPEC/' | grep -v 'priority(40)' > $@ - -# Integration Tests - -test-integration: poetry build-kevm build-haskell build-llvm - $(MAKE) -C kevm-pyk/ test-integration TEST_ARGS+='-k "(test_kast.py or test_run.py or test_solc_to_k.py)" -n$(PYTEST_PARALLEL) $(PYTEST_ARGS)' - -profile: poetry build-foundry - $(MAKE) -C kevm-pyk/ profile PROF_ARGS+='-n$(PYTEST_PARALLEL) $(PYTEST_ARGS)' - find /tmp/pytest-of-$$(whoami)/pytest-current/ -type f -name '*.prof' | sort | xargs tail -n +1 - -# Interactive Tests - -test-interactive: test-interactive-run - -test-interactive-run: $(smoke_tests_run:=.run-interactive) - -node_tests:=$(wildcard tests/vm/*.bin) -test-node: $(node_tests:=.run-node) - -proto_tester := $(LOCAL_BIN)/proto_tester -proto-tester: $(proto_tester) -$(proto_tester): tests/vm/proto_tester.cpp - @mkdir -p $(LOCAL_BIN) - $(CXX) -I $(LOCAL_LIB)/proto $(protobuf_out) $< -o $@ -lprotobuf -lpthread - -tests/vm/%.run-node: tests/vm/%.expected $(KEVM_BIN)/kevm-vm $(proto_tester) - bash -c " \ - kevm-vm 8888 127.0.0.1 & \ - while ! netcat -z 127.0.0.1 8888; do sleep 0.1; done; \ - netcat -N 127.0.0.1 8888 < tests/vm/$* > tests/vm/$*.out; \ - kill %kevm-vm || true" - $(proto_tester) $< tests/vm/$*.out - -# Media -# ----- - -media: media-pdf - -### Media generated PDFs - -media_pdfs := 201710-presentation-devcon3 \ - 201801-presentation-csf \ - 201905-exercise-k-workshop \ - 201908-trufflecon-workshop 201908-trufflecon-firefly - -media/%.pdf: media/%.md media/citations.md - @mkdir -p $(dir $@) - cat $^ | pandoc --from markdown --filter pandoc-citeproc --to beamer --output $@ - -media-pdf: $(patsubst %, media/%.pdf, $(media_pdfs)) - -metropolis-theme: $(BUILD_DIR)/media/metropolis/beamerthememetropolis.sty - -$(BUILD_DIR)/media/metropolis/beamerthememetropolis.sty: - cd $(dir $@) && $(MAKE) diff --git a/README.md b/README.md deleted file mode 100644 index cd0b8befc0..0000000000 --- a/README.md +++ /dev/null @@ -1,383 +0,0 @@ -KEVM: Semantics of EVM in K -=========================== - -In this repository, we provide a model of the EVM in K. - -Fast Installation ------------------ - -- `bash <(curl https://kframework.org/install)`: install [kup package manager]. -- `kup install kevm`: install KEVM. -- `kup list kevm`: list available KEVM versions. -- `kup update kevm`: update to latest KEVM version. - -**NOTE**: The first run will take longer to fetch all the libraries and compile sources. (30m to 1h) - -Documentation/Support ---------------------- - -These may be useful for learning KEVM and K (newest to oldest): - -- [K, KEVM and Foundry Integration overview](https://www.youtube.com/watch?v=9PLnQStkiUo) -- [Jello Paper], a nice presentation of this repository. -- [20 minute tour of the semantics](https://www.youtube.com/watch?v=tIq_xECoicQNov) at [2017 Devcon3]. -- [KEVM 1.0 technical report](http://hdl.handle.net/2142/97207), especially sections 3 and 5. -- [KEVM Paper at CSF'18/FLoC](https://fsl.cs.illinois.edu/publications/hildenbrandt-saxena-zhu-rodrigues-daian-guth-moore-zhang-park-rosu-2018-csf). - -To get support for KEVM, please join our [Discord Channel](https://discord.com/invite/CurfmXNtbN). - -If you want to start proving with KEVM, refer to [VERIFICATION.md]. - -Repository Structure --------------------- - -The following files constitute the KEVM semantics: - -- [network.md](include/kframework/network.md) provides the status codes reported to an Ethereum client on execution exceptions. -- [json-rpc.md](include/kframework/json-rpc.md) is an implementation of JSON RPC in K. -- [evm-types.md](include/kframework/evm-types.md) provides the (functional) data of EVM (256-bit words, wordstacks, etc...). -- [serialization.md](include/kframework/serialization.md) provides helpers for parsing and unparsing data (hex strings, recursive-length prefix, Merkle trees, etc.). -- [evm.md](include/kframework/evm.md) is the main KEVM semantics, containing EVM’s configuration and transition rules. -- [gas.md](include/kframework/gas.md) contains all information relevant to gas. -- [schedule.md](include/kframework/schedule.md) contains all information relevant to EVM schedules. - -These additional files extend the semantics to make the repository more useful: - -- [buf.md](include/kframework/buf.md) defines the `#buf` byte-buffer abstraction for use during symbolic execution. -- [abi.md](include/kframework/abi.md) defines the [Contract ABI Specification](https://docs.soliditylang.org/en/v0.8.1/abi-spec.html) for use in proofs and easy contract/function specification. -- [hashed-locations.md](include/kframework/hashed-locations.md) defines the `#hashedLocation` abstraction used to specify Solidity-generated storage layouts. -- [edsl.md](include/kframework/edsl.md) combines the previous three abstractions for ease-of-use. -- [foundry.md](include/kframework/foundry.md) adds Foundry capabilities to KEVM. - -These files are used for testing the semantics itself: - -- [state-utils.md](include/kframework/state-utils.md) provides functionality for EVM initialization, setup, and querying. -- [driver.md](include/kframework/driver.md) is an execution harness for KEVM, providing a simple language for describing tests/programs. - -Building from source --------------------- - -There are two backends of K available: LLVM for concrete execution and Haskell for symbolic execution. -This repository generates the build-products for each backend in `.build/usr/lib/kevm`. - -### System Dependencies - -First install the following tools: - -- [git](https://git-scm.com/) -- GNU [Bison](https://www.gnu.org/software/bison/), [Flex](https://github.com/westes/flex), and [Autoconf](http://www.gnu.org/software/autoconf/). -- GNU [libmpfr](https://www.mpfr.org/) and [libtool](https://www.gnu.org/software/libtool/). -- [Z3](https://github.com/Z3Prover/z3) version 4.12.1 - -#### Installing Z3 - -KEVM requires Z3 version 4.12.1, which you may need to install from a source build if your package manager supplies a different version. -To do so, follow the instructions [here](https://github.com/Z3Prover/z3#building-z3-using-make-and-gccclang) after checking out the correct tag in the Z3 repository: - -```sh -git clone https://github.com/Z3Prover/z3.git -cd z3 -git checkout z3-4.12.1 -python scripts/mk_make.py -cd build -make -sudo make install -``` - -On macOS, it is easiest to install Z3 from Homebrew. -If you wish to install from the source, install it to an appropriate prefix (e.g. `/usr/local` on Intel machines). - -#### Ubuntu - -On Ubuntu >= 22.04 (for example): - -```sh -sudo apt-get install --yes \ - autoconf bison clang-12 cmake curl flex gcc jq libboost-test-dev \ - libcrypto++-dev libffi-dev libgflags-dev libjemalloc-dev libmpfr-dev \ - libprocps-dev libsecp256k1-dev libssl-dev libtool libyaml-dev lld-12 \ - llvm-12-tools make maven netcat-openbsd openjdk-11-jdk pkg-config \ - protobuf-compiler python3 python3-dev python3-pip rapidjson-dev time \ - zlib1g-dev libfmt-dev -``` - -On Ubuntu < 18.04, you'll need to skip `libsecp256k1-dev` and instead build it from source (via our `Makefile`): - -```sh -make libsecp256k1 -``` - -#### Arch Linux - -On ArchLinux: - -```sh -sudo pacman -S \ - base base-devel boost clang cmake crypto++ curl git gmp \ - gflags jdk-openjdk jemalloc libsecp256k1 lld llvm maven \ - mpfr protobuf poetry python stack yaml-cpp zlib -``` - -#### macOS - -After installing the Command Line Tools, [Homebrew](https://brew.sh/), and getting the [blockchain plugin](#blockchain-plugin), run: - -```sh -brew tap kframework/k -brew install java automake libtool gmp mpfr pkg-config maven libffi llvm@14 openssl protobuf python bash kframework/k/cryptopp@8.6.0 poetry solidity -make libsecp256k1 -``` - -**NOTE**: It is recommended to use the homebrew version of `flex` and XCode. - -If you are building on an Apple Silicon machine, ensure that your `PATH` is set up correctly before running `make deps` or `make k-deps`. -You can do so using [`direnv`](https://direnv.net/) by copying `macos-envrc` to `.envrc`, then running `direnv allow`. - -If the build on macOS still fails, you can also try adding the following lines to the top of your `Makefile` under `UNAME_S`: - -```sh -ifeq ($(UNAME_S), Darwin) -SHELL := /usr/local/bin/bash -PATH := $(pwd)/.build/usr/bin:$(PATH) -endif -``` - -#### Haskell Stack (all platforms) - -- [Haskell Stack](https://docs.haskellstack.org/en/stable/install_and_upgrade/#installupgrade). - Note that the version of the `stack` tool provided by your package manager might not be recent enough. - Please follow installation instructions from the Haskell Stack website linked above. - -To upgrade `stack` (if needed): - -```sh -stack upgrade -export PATH=$HOME/.local/bin:$PATH -``` - -### Build Dependencies - -#### K Framework - -You need to install the [K Framework] on your system, see the instructions there. -The fastest way is via the [kup package manager], with which you can do to get the correct version of K: - -```sh -kup install k.openssl.procps --version v$(cat deps/k_release) -``` - -You can also drop into a single development shell with the correct version of K on path by doing: - -```sh -kup shell k.openssl.procps --version v$(cat deps/k_release) -``` - -#### Blockchain Plugin - -You also need to get the blockchain plugin submodule and install it. - -```sh -git submodule update --init --recursive -- deps/plugin -make plugin-deps -``` - -### Building - -You need to set up a virtual environment using Poetry with the prerequisites `python 3.8.*`, `pip >= 20.0.2`, `poetry >= 1.3.2`: - -```sh -make poetry -``` - -Finally, you can build the semantics. - -```sh -make build -``` - -You can build specific targets using `build-llvm`, `build-Haskell`, or `build-foundry`. -For more information, refer to the [Makefile]. - -Running Tests -------------- - -To execute tests from the [Ethereum Test Set], the submodule needs to be fetched first. - -```sh -git submodule update --init --recursive -- tests/ethereum-tests -``` - -The tests are run using the supplied `Makefile`. -Run `make build-prove` to generate tests from the markdown files. - -The following subsume all other tests: - -- `make test`: All of the quick tests. -- `make test-all`: All of the quick and slow tests. - -These are the individual test-suites (all of these can be suffixed with `-all` to also run slow tests): - -- `make test-vm`: VMTests from the [Ethereum Test Set]. -- `make test-bchain`: Subset of BlockchainTests from the [Ethereum Test Set]. -- `make test-proof`: Proofs from the [Verified Smart Contracts]. -- `make test-interactive`: Tests of the `kevm` command. - -When running tests with the `Makefile`, you can specify the `TEST_CONCRETE_BACKEND` (for concrete tests), or `TEST_SYMBOLIC_BACKEND` (for proofs). - -For Developers --------------- - -If built from the source, the `kevm` executable will be in the `.build/usr/bin` directory. -To make sure you are using the correct `kevm`, add this directory to your `PATH`: - -```sh -export PATH=$(pwd)/.build/usr/bin:$PATH -``` - -Alternatively, if you work on multiple checkouts of `evm-semantics` or other semantics, you could add the relative path `.build/usr/bin` to your `PATH`. -Do note, however, that this is a security concern. - -You can call `kevm --help` to get a quick summary of how to use the script. - -Run the file `tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/add0.json`: - -```sh -kevm run tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/add0.json --schedule DEFAULT --mode VMTESTS -``` - -To enable the debug symbols for the llvm backend, build using this command: - -```sh -make build-llvm KEVM_OPTS=--enable-llvm-debug -``` - -To debug a conformance test, add the `--debugger` flag to the command: - -```sh -kevm run tests/ethereum-tests/BlockchainTests/GeneralStateTests/stExample/add11.json --target llvm --mode NORMAL --schedule MERGE --chainid 1 --debugger -``` - -### Keeping in mind while developing - -Always have your build up-to-date. - -- If using the kup package manager, run `kup install kevm --version .` to install the local version. -- If building from source: - - `make poetry` needs to be re-run if you touch any of the `kevm-pyk` code. - - `make build` needs to be re-run if you touch any of this repos files. - - `make deps` needs to be re-run if there is an update of the K submodule (you did `git submodule update --init --recursive -- deps/k` and it actually did something). - - If both `deps` and `build` need to be re-run, you need to do `deps` first. - - `make clean` is a safe way to remove the `.build` directory, but then you need to re-run `make deps` (should be quick this time) and `make build`. - -### Building with Nix - -We now support building KEVM using [nix flakes](https://nixos.wiki/wiki/Flakes). -To set up nix flakes you will need to be on `nix` 2.4 or higher and follow the instructions [here](https://nixos.wiki/wiki/Flakes). - -For example, if you are on a standard Linux distribution, such as Ubuntu, first [install nix](https://nixos.org/download.html#download-nix) -and then enable flakes by editing either `~/.config/nix/nix.conf` or `/etc/nix/nix.conf` and adding: - -``` -experimental-features = nix-command flakes -``` - -This is needed to expose the Nix 2.0 CLI and flakes support that are hidden behind feature-flags. - -By default, Nix will build the project and its transitive dependencies from source, which can take up to an hour. -We recommend setting up [the binary cache](https://app.cachix.org/cache/kore) to speed up the build process significantly. - -To build KEVM, run: - -```sh -nix build .#kevm -``` - -This will build all of KEVM and K and put a link to the resulting binaries in the `result/` folder. - - -**NOTE**: Mac users, especially those running M1/M2 Macs may find nix segfaulting on occasion. If this happens, try running the nix command like this: `GC_DONT_GC=1 nix build .` - -If you want to temporarily add the `kevm` binary to the current shell, run - -```sh -nix shell .#kevm -``` - -### Profiling with Nix - -Nix can also be used to quickly profile different versions of the Haskell backend. Simply run: - -```sh -nix build github:runtimeverification/evm-semantics#profile \ - --override-input k-framework/haskell-backend github:runtimeverification/haskell-backend/ \ - -o prof- -``` - -replacing `` with the commit you want to run profiling against. - -If you want to profile against a working version of the Haskell backend repository, simply `cd` into the root of the repo and run: - -```sh -nix build github:runtimeverification/evm-semantics#profile \ - --override-input k-framework/haskell-backend $(pwd) \ - -o prof-my-feature -``` - -To compare profiles, you can use: - -```sh -nix run github:runtimeverification/evm-semantics#compare-profiles -- prof-my-feature prof- -``` - -This will produce a nice table with the times for both versions of the haskell-backend. -Note that `#profile` pre-pends the output of `kore-exec --version` to the profile run, which is then used as a tag by the `#compare-profiles` script. -Therefore, any profiled local checkout of the haskell-backend will report as `dirty-ghc8107` in the resulting table. - -Media ------ - -This repository can build two pieces of documentation for you, the [Jello Paper] and the [2017 Devcon3] presentation. - -### System Dependencies - -For the presentations in the `media` directory, you'll need `pdflatex`, commonly provided with `texlive-full`, and `pandoc`. - -```sh -sudo apt install texlive-full pandoc -``` - -### Building - -To build all the PDFs (presentations and reports) available in the `media/` directory, use: - -```sh -make media -``` - -Resources -========= - -- [EVM Yellowpaper](https://github.com/ethereum/yellowpaper): Original specification of EVM. -- [LEM Semantics of EVM](https://github.com/pirapira/eth-isabelle) -- [EVM Opcode Interactive Reference](https://www.evm.codes/?fork=merge) -- [Solidity ABI Encoding](https://docs.soliditylang.org/en/v0.8.19/abi-spec.html) - -For more information about the [K Framework], refer to these sources: - -- [The K Tutorial](https://github.com/runtimeverification/k/tree/master/k-distribution/k-tutorial) -- [Semantics-Based Program Verifiers for All Languages](https://fsl.cs.illinois.edu/publications/stefanescu-park-yuwen-li-rosu-2016-oopsla) -- [Reachability Logic Resources](http://fsl.cs.illinois.edu/index.php/Reachability_Logic_in_K) -- [Matching Logic Resources](http://www.matching-logic.org/) -- [Logical Frameworks](https://dl.acm.org/doi/10.5555/208683.208700): Discussion of logical frameworks. - -[K Framework]: -[Jello Paper]: -[2017 Devcon3]: -[K Reachability Logic Prover]: -[K Editor Support]: -[Ethereum Test Set]: -[Verified Smart Contracts]: -[eDSL]: -[kup package manager]: -[Makefile]: <./Makefile> -[VERIFICATION.md]: <./VERIFICATION.md> diff --git a/VERIFICATION.md b/VERIFICATION.md deleted file mode 100644 index 60a913e82a..0000000000 --- a/VERIFICATION.md +++ /dev/null @@ -1,113 +0,0 @@ -Verification Instructions for KEVM -================================== - -We assume that KEVM is installed, and the [K tutorial] has been completed. -This document provides instructions for kompiling and running claims using KEVM. - -In `tests/specs/examples`, you can find a few examples to get you started on proving with kevm. - -Example 1: Sum to N -------------------- - -Have a look at the [sum-to-n-spec.k] file. -It has two modules: - - - `VERIFICATION` - containing the EVM program and a few `simplification` rules. - - `SUM-TO-N-SPEC` - containing the claims which will be executed. - -The first step is kompiling the `.k` file with the below command. - -```sh -kevm kompile sum-to-n-spec.k --target haskell --syntax-module VERIFICATION --main-module VERIFICATION --definition sum-to-n-spec/haskell -``` - -In this example, the arguments used are: - - - `—-pyk`: a flag that enables the pyk library. - - `—-backend haskell`: used to kompile the definition with the Haskell backend, enabling the symbolic execution ([more about it here]). - - `--syntax-module VERIFICATION`: explicitly state the syntax module. - - `--main-module VERIFICATION`: explicitly state the main module. - - `--definition sum-to-n-spec/haskell`: the path where the kompiled definition is stored. - -Next, run the prover with: - -```sh -kevm prove sum-to-n-spec.k --definition sum-to-n-spec/haskell -``` - -The expected output is `#Top` which represents that all the claims have been proven. - -Example 2: Faulty ERC20 ------------------------ - -This example will describe the process of running claims for an ERC20 contract. -Have a look at [erc20-spec.md]. -It contains claims for a few basic ERC20 properties and the helper modules required to run the proofs. -The ERC20 Solidity contract that is tested is [ERC20.sol]. - -In this example, we rely on a helper module, `ERC20-VERIFICATION`, which must be generated from the [ERC20.sol] Solidity contract. -The module is generated using the following `solc-to-k` command. - -```sh -kevm solc-to-k ERC20.sol ERC20 --main-module ERC20-VERIFICATION > erc20-bin-runtime.k -``` - -- `solc-to-k` will parse a Solidity contract and generate a helper K module. -- `--main-module` is used to set the name of the module. - -The generated `erc20-bin-runtime.k` file contains K rules and productions for the contract’s bytecode, storage indexes for the state variables, and function selectors, among others. -These rules are then used in the claims. As an example, the `#binRuntime(ERC20)` production, which is found in the `` cell, will rewrite to `#parseByteStack (contractBytecode)`, parsing the hexadecimal string into a `ByteStack`. - -Following this, we can compile the Markdown file with: - -```sh -kevm kompile erc20-spec.md --target haskell --syntax-module VERIFICATION --main-module VERIFICATION --definition erc20-spec/haskell -``` - -Next, run the prover with: - -```sh -kevm prove erc20-spec.md --definition erc20-spec/haskell --claim ERC20-SPEC.decimals -``` - -Here, `--claim` tells the prover to run only the `decimals` spec from the `ERC20-SPEC` module. - -More to know ------------- - -To prove one of the specifications: - -```sh -kevm prove tests/specs/erc20/ds/transfer-failure-1-a-spec.k --definition tests/specs/erc20/verification/haskell -``` - -You can also debug proofs interactively: - -```sh -kevm prove tests/specs/erc20/ds/transfer-failure-1-a-spec.k --definition tests/specs/erc20/verification/haskell --debugger -``` - -In addition to this, you can use `kevm show-kcfg ...` or `kevm view-kcfg ...` to get a visualization. - -`kevm view-kcfg [spec_file] [--save-directory save_directory] [--claim claim_label] ...` command takes the same basic arguments as `kevm prove ...` does, including: - - `spec_file` is the file to look in for specifications. This file is read like with `kevm prove —pyk …`; the `KProve.get_claims` invokes the frontend. - - `--save_directory` must be passed as where the KCFGs have been saved (by a previous call to `kevm prove --save-directory save_directory ...` - - `--claim claim_label` option is added, but unlike the `kevm prove ...`, you can only repeat it once. This option lets you select an individual claim out of the `spec_file`; if not supplied, it’s assumed that only one spec is present. - - `--spec-module spec_module` is also an inherited option. - -The interactive KCFG (`view-kcfg`) puts your terminal in *application mode*. To select text in this mode, hold the modifier key provided by your terminal emulator (typically SHIFT or OPTION) while clicking and dragging. Refer to the [Textualize documentation](https://github.com/Textualize/textual/blob/main/FAQ.md#how-can-i-select-and-copy-text-in-a-textual-app) for more information. - -A running example: - -```sh -mkdir kcfgs -kevm kompile --target haskell tests/specs/benchmarks/verification.k --definition tests/specs/benchmarks/verification/haskell --main-module VERIFICATION --syntax-module VERIFICATION -kevm prove tests/specs/benchmarks/address00-spec.k --definition tests/specs/benchmarks/verification/haskell --verbose --save-directory kcfgs -kevm view-kcfg --verbose kcfgs tests/specs/benchmarks/address00-spec.k --definition tests/specs/benchmarks/verification/haskell -``` - -[sum-to-n-spec.k]: <./tests/specs/examples/sum-to-n-spec.k> -[erc20-spec.md]: <./tests/specs/examples/erc20-spec.md> -[ERC20.sol]: <./tests/specs/examples/ERC20.sol> -[K tutorial]: -[more about it here]: diff --git a/VERIFICATION/index.html b/VERIFICATION/index.html new file mode 100644 index 0000000000..6d84a7e3ab --- /dev/null +++ b/VERIFICATION/index.html @@ -0,0 +1,282 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Verification Instructions for KEVM

+

We assume that KEVM is installed, and the K tutorial has been completed. +This document provides instructions for kompiling and running claims using KEVM.

+

In tests/specs/examples, you can find a few examples to get you started on proving with kevm.

+

Example 1: Sum to N

+

Have a look at the sum-to-n-spec.k file. +It has two modules:

+
    +
  • VERIFICATION - containing the EVM program and a few simplification rules.
  • +
  • SUM-TO-N-SPEC - containing the claims which will be executed.
  • +
+

The first step is kompiling the .k file with the below command.

+
kevm kompile sum-to-n-spec.k --target haskell --syntax-module VERIFICATION --main-module VERIFICATION --definition sum-to-n-spec/haskell
+
+

In this example, the arguments used are:

+
    +
  • —-pyk: a flag that enables the pyk library.
  • +
  • —-backend haskell: used to kompile the definition with the Haskell backend, enabling the symbolic execution (more about it here).
  • +
  • --syntax-module VERIFICATION: explicitly state the syntax module.
  • +
  • --main-module VERIFICATION: explicitly state the main module.
  • +
  • --definition sum-to-n-spec/haskell: the path where the kompiled definition is stored.
  • +
+

Next, run the prover with:

+
kevm prove sum-to-n-spec.k --definition sum-to-n-spec/haskell
+
+

The expected output is #Top which represents that all the claims have been proven.

+

Example 2: Faulty ERC20

+

This example will describe the process of running claims for an ERC20 contract. +Have a look at erc20-spec.md. +It contains claims for a few basic ERC20 properties and the helper modules required to run the proofs. +The ERC20 Solidity contract that is tested is ERC20.sol.

+

In this example, we rely on a helper module, ERC20-VERIFICATION, which must be generated from the ERC20.sol Solidity contract. +The module is generated using the following solc-to-k command.

+
kevm solc-to-k ERC20.sol ERC20 --main-module ERC20-VERIFICATION > erc20-bin-runtime.k
+
+
    +
  • solc-to-k will parse a Solidity contract and generate a helper K module.
  • +
  • --main-module is used to set the name of the module.
  • +
+

The generated erc20-bin-runtime.k file contains K rules and productions for the contract’s bytecode, storage indexes for the state variables, and function selectors, among others. +These rules are then used in the claims. As an example, the #binRuntime(ERC20) production, which is found in the <program> cell, will rewrite to #parseByteStack (contractBytecode), parsing the hexadecimal string into a ByteStack.

+

Following this, we can compile the Markdown file with:

+
kevm kompile erc20-spec.md --target haskell --syntax-module VERIFICATION --main-module VERIFICATION --definition erc20-spec/haskell
+
+

Next, run the prover with:

+
kevm prove erc20-spec.md   --definition erc20-spec/haskell --claim ERC20-SPEC.decimals
+
+

Here, --claim tells the prover to run only the decimals spec from the ERC20-SPEC module.

+

More to know

+

To prove one of the specifications:

+
kevm prove tests/specs/erc20/ds/transfer-failure-1-a-spec.k --definition tests/specs/erc20/verification/haskell
+
+

You can also debug proofs interactively:

+
kevm prove tests/specs/erc20/ds/transfer-failure-1-a-spec.k --definition tests/specs/erc20/verification/haskell --debugger
+
+

In addition to this, you can use kevm show-kcfg ... or kevm view-kcfg ... to get a visualization.

+

kevm view-kcfg [spec_file] [--save-directory save_directory] [--claim claim_label] ... command takes the same basic arguments as kevm prove ... does, including:

+
    +
  • spec_file is the file to look in for specifications. This file is read like with kevm prove —pyk …; the KProve.get_claims invokes the frontend.
  • +
  • --save_directory must be passed as where the KCFGs have been saved (by a previous call to kevm prove --save-directory save_directory ...
  • +
  • --claim claim_label option is added, but unlike the kevm prove ..., you can only repeat it once. This option lets you select an individual claim out of the spec_file; if not supplied, it’s assumed that only one spec is present.
  • +
  • --spec-module spec_module is also an inherited option.
  • +
+

The interactive KCFG (view-kcfg) puts your terminal in application mode. To select text in this mode, hold the modifier key provided by your terminal emulator (typically SHIFT or OPTION) while clicking and dragging. Refer to the Textualize documentation for more information.

+

A running example:

+
mkdir kcfgs
+kevm kompile --target haskell tests/specs/benchmarks/verification.k --definition tests/specs/benchmarks/verification/haskell --main-module VERIFICATION --syntax-module VERIFICATION
+kevm prove tests/specs/benchmarks/address00-spec.k --definition tests/specs/benchmarks/verification/haskell --verbose --save-directory kcfgs
+kevm view-kcfg --verbose kcfgs tests/specs/benchmarks/address00-spec.k --definition tests/specs/benchmarks/verification/haskell
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/_config.yml b/_config.yml deleted file mode 100644 index f980e760b6..0000000000 --- a/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-slate diff --git a/assets/css/Firefly-Download-Icon-Inverted.32636383.png b/assets/css/Firefly-Download-Icon-Inverted.32636383.png new file mode 100644 index 0000000000000000000000000000000000000000..c87605a3d70a8940e7b547a9b635d7b16e4a80f5 GIT binary patch literal 571 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-soCO|{#S9F3${@^GvDCf{D9DoT z=V7Kx3{!3H#Rm@RFoGN7Zny3L`6l0hKBh0`FeYM zxr2b4yPKPfi?gGngM)*;y}g~St&NS1wY9aCiHWhXv5}FHp`oFHfq}lBo-T7@;bfr0 z7?Zr+T^Kr8Wj%mwZci7-kcwMxuO9C^WFXR-n0$z5FVEhVdo}M`zt`{a6j}H>p;)>;SGa5`8rZVeRFzh(Hb>4lifTn)N2h0bw9j*)SZ14;J#60Ks zTV8wSds}{||6r&PT6t~S=Z5XNqP`M#4u!!>ogA*MPV+IF@X<<`X;a99 z7ES8lQK@yUVw`9EPIJfU|FH}Q#D2G4>)v~pc?07F@wtUtt=>JUc3?QO#e7$U)Bjgb zHvc-k!rXL&L%1oQfzl<<{DO=X>)1Oc*fF@I)CzQL_-$aY<@Q8Q=I9BWjmno#f4s>0 zHT6&0>0Qi=Zk?ZfRf(NtI{W5>@d?c{S$R5|m1|xf{>Ojhi*tdk^e+)$7%_Od`njxg HN@xNAMg{L! literal 0 HcmV?d00001 diff --git a/assets/css/Firefly-Download-Icon.8094a4f0.png b/assets/css/Firefly-Download-Icon.8094a4f0.png new file mode 100644 index 0000000000000000000000000000000000000000..e0fdca7b4c45cfd913001c3a4e58442e40f5d6b2 GIT binary patch literal 586 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 z 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 d0mW2@EHO9NV8h3u2x_sp}KECIB>@9+Qn{FBV{ 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 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW 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

5q!RY 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 literal 0 HcmV?d00001 diff --git a/assets/css/fontawesome-webfont.a9323ae9.svg b/assets/css/fontawesome-webfont.a9323ae9.svg new file mode 100644 index 0000000000..756bf0896c --- /dev/null +++ b/assets/css/fontawesome-webfont.a9323ae9.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/css/fontawesome-webfont.ed962b83.woff b/assets/css/fontawesome-webfont.ed962b83.woff new file mode 100644 index 0000000000000000000000000000000000000000..400014a4b06eee3d0c0d54402a47ab2601b2862b GIT binary patch literal 98024 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 SdSQM28?+M|D(2r_;{O0|uQ74} literal 0 HcmV?d00001 diff --git a/assets/css/iconfont.960c72b2.eot b/assets/css/iconfont.960c72b2.eot new file mode 100644 index 0000000000000000000000000000000000000000..63c3474526541909b8c7f080484239aaad77102f GIT binary patch literal 2216 zcmd^A&u<$=6n^91@w&BXaZ(jRSBisCX}xYjuvH~MBS=(~l&CFHFQMIT)^?)xu4S*I zq~cIfg|-5rsFzBK$f4rE0Ra-CDkE6vH{A_0$JpdOBE@7Ozfw# zWK)&e=AF9z+3R7|N+`HrYM}t>DmcgEX=bSM# z`s-;E`p3{`t-9G5+j{srM+5F|)mf=LH+^fGDEu?@uWPnB-}`|!hsi(DU#)=skY-tjC`_~I|DzXv^2Hbv6*D&u&-{B2fS3Z!8B$S9t1~Fc{bmq~;^yovxDsBIms$687V5A513)F9Dfz&Ue>#v2YfuCcg;fQAAn_FoI%F z*zd#|MWNlK+mJ7)v5J#R+uso8cC?wwTl4frM|5H`x`Qeo97E7J>b*LWiy3~K$I#)i zcu#srbO9{ya10|N2Om*35#~Fw$H+xTu!PRB@?#GJML8nDQT^XrN+#ffN&_;|;mmPX zdBo3%JHM_DZh$-AL>`F#^Bx9vzywD@#)zy1TeO1Z5nIg-Uu%q$jAFi z`S@4Y7u%buxkUc$#Q2dL+NQlPkw2X{)%_I^eTvU%7{7fDD{*MhM>Cn1KJ{1uQd0y2b?`J2Ek z43t(l0^Fx?6uuo%I0pWx!by6Wh7{J|(HwRVksdG^YA75+(YUH`82l#+M}RjKj-rfw zsc;PZj|wMITz*qnqZh@|1&FFul}DBxU>B2E|9zRy-VY6 zt4S14R~Au|e2nv?(`8zLY|#>m?GRWWMOa5~qR7^PCR9nbQHUL29r@TV1?e#zjbkMMOkJOvFWkGM3}D?BkWT376)z{76-^4k|Zaa+~9y7EQ1O^9K_dt zy6?DmB~pMaY}8ML>r_`F3P(zSkm-059>^yDJC}ce>5vcQ-B1xg*ZVn2o4zz1sL4&C z1AczS0L!@vPr@7zJeT`7Cg=jW=TR1B`IvOp8lqVsVK0UTj;St^2NEqf)s6()1P2t+ z|IKcQ<$!_$!2tI~i{iGqGXohp4es6wi4XBdP7;YRj7 z1V<#`(hJ)1Z{Lt^9w;^<*qYn+1fcyd-;NhRL+Sv5LJKq)xg4cTNBso}L_;Nr!o>N> zhTz+k%X~|!L@sr#q8XNh#Q(c6xe`Eu0uJ9oJaT~o4+u1PKw!WF0t+4xIDohjJb-FY z2e^h?fpCWWhM``EQWeCBp~M+Xk1^j&h(TgqYi^6ftVM|n(i&}LsanY^B8Ek43q`Eu zb%s<@6xoC+&CSU?>1V|(zh$m)dQKM(;*M%5yBz=ciFwJw0_iQ?#XJf?(Vm|EbjQq- zo{y8C9%X(34%oWHY+tG3*Q;=mt=pJ2dUG1L1DG8vbue(`!yoGf3-p`T03Hs*;Y#IZrg`$uFn=qV64x zMekqg@31v*`(Ddx{!dN30C*qMHPCs9K%l^8aG0sM_;s=%_A_;3zRU`H{wWI;h$1Kp zjJ2Nk6U%=l85A$nTwMxl05s4Rf|axroM4C$4XfLqG+2>9;tE79Qz9tU4hUMU1E7Ik z5v*qS1gF*`ANcw`IO^q8gDv^^Iw3#Y=R*s%UVTE0eT7OOVojx>Bs1gH?jU9)z z8LX3%I;h~fqj%;$WQ;pZ!6T?ie@IHRvAUX$ZSiYdhcFFipy^LblTeV2Q3+3@e-(AF>axc+KgG6Ks2(riALL#%x!5#)>Mse SKJpDgOw_r+M2(v}0000s%Y`uj literal 0 HcmV?d00001 diff --git a/assets/css/iconfont.b2a06094.woff b/assets/css/iconfont.b2a06094.woff new file mode 100644 index 0000000000000000000000000000000000000000..5c0b2e3a596643441bcd143b36b2a7bf3b5fb24e GIT binary patch literal 1296 zcmXT-cXMN4WB>wI0S0am&A|ZSgV?CRJvh_}C<#=+U=73}3f-zz{=xc2Krt5}-xi3& zY|eTnCg&y=0L5B>{6rwV&34z<8|gWfX+ZW1AeIB-4br}od^1uLQy3VSLFVZJv6)yC zcWeew5GZB=Ya$jMIzsY?LzfjkBQ#uCOyxrr4( zdzpclK^}+|7)2Qj@)C1XfnpPYc4{&(Fp15czK^RQzqo{ffn^U+O)wDW{obY5SurO$ zAtfQnws=ELsC`g3^9 z8)6a-P98YGp~SGXh;uE_0TpxJPCUqaK!Jx@mZLI6b}946SO4PG7L*;5=q+*ErXuQ=j zdvW(>R>A8R`i>eNVC2{VZ_L;9%;$r-o`97K9v0pya z7=72{780-SjquT5$F)iOUq<^9RmZfW6N{J@&)NR-?V6A4VoRU-@ry0mDY@g-mAMQ# zo8C#Lg;*+hcrM73{rykzy!HLQ`91L;Jm=hvm)x&iZ=-WGd9TjV6}R-*e<$jmO6A?a zHX+AF6ch*G_-A@BFj~M=#$dOBsTE`nLzDCkLk7n;tb)LR2LTg?42Cv_MGU(bZb0oxNDoL% zNMvACQ+USY#Mbsd!H$`M=Q*Pr&>g80Z1WB|h_oC}@L&pR64BJ$9Ll9MbN(b|2Y<)u zhh}Uw+_d*vmE)q*oJB1%ipx8Snq)MRKW8N9+SeQB-+On8f$c|YdsXF*+^oG(I~H0M z&ilcq*cX-!p+&L`0>`<-Eqq)`<|77PfdOZ|-_fhfAvj3WIChu>tt~j*4 zVEVuQ0)Fj3oZmmb;=O!AWTWPtAobrmThc54t=qCTD0qdZfn78(pGsTp4Scdy;i--8rMhUfE?d+)#GrsJ^=QiuN*H ztzTQiW+)u^p|v$(RmLR6smIz*n)a;`<+I84x^B4kN7T6|OLm^gx~HP7{qOy*?Tdvk z@^8pp=5@y4k#PKz=4X6A?QI3)Rse$)6qZR13=+M3Hza3D%#@6jh?Kl3aZ}P#f@M+=FnYz-o^W{pNoj+Yy>YV(^I+cfq K;Yxy790LF=Ir-iI literal 0 HcmV?d00001 diff --git a/assets/css/index.css b/assets/css/index.css new file mode 100644 index 0000000000..5fdaff4071 --- /dev/null +++ b/assets/css/index.css @@ -0,0 +1 @@ +:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;font-family:sans-serif;line-height:1.15}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{color:#212529;text-align:left;background-color:#fff;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;line-height:1.5}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;text-decoration:underline;border-bottom:0;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}address{font-style:normal;line-height:inherit;margin-bottom:1rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;background-color:#0000;text-decoration:none}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{-ms-overflow-style:scrollbar;margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{vertical-align:middle;overflow:hidden}table{border-collapse:collapse}caption{color:#6c757d;text-align:left;caption-side:bottom;padding-top:.75rem;padding-bottom:.75rem}th{text-align:inherit;text-align:-webkit-match-parent}label{margin-bottom:.5rem;display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{resize:vertical;overflow:auto}fieldset{min-width:0;border:0;margin:0;padding:0}legend{width:100%;max-width:100%;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal;margin-bottom:.5rem;padding:0;display:block}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{cursor:pointer;display:list-item}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{border:0;border-top:1px solid #0000001a;margin-top:1rem;margin-bottom:1rem}.small,small{font-size:.875em;font-weight:400}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-unstyled,.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{text-transform:uppercase;font-size:90%}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{color:#6c757d;font-size:.875em;display:block}.blockquote-footer:before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{max-width:100%;height:auto;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;padding:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{color:#6c757d;font-size:90%}code{color:#e83e8c;word-wrap:break-word;font-size:87.5%}a>code{color:inherit}kbd{color:#fff;background-color:#212529;border-radius:.2rem;padding:.2rem .4rem;font-size:87.5%}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{color:#212529;font-size:87.5%;display:block}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{-ms-flex-wrap:wrap;flex-wrap:wrap;margin-left:-15px;margin-right:-15px;display:-ms-flexbox;display:flex}.no-gutters{margin-left:0;margin-right:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-left:0;padding-right:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{width:100%;padding-left:15px;padding-right:15px;position:relative}.col{max-width:100%;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-grow:1;flex-basis:0}.row-cols-1>*{max-width:100%;-ms-flex:0 0 100%;flex:0 0 100%}.row-cols-2>*{max-width:50%;-ms-flex:0 0 50%;flex:0 0 50%}.row-cols-3>*{max-width:33.3333%;-ms-flex:0 0 33.3333%;flex:0 0 33.3333%}.row-cols-4>*{max-width:25%;-ms-flex:0 0 25%;flex:0 0 25%}.row-cols-5>*{max-width:20%;-ms-flex:0 0 20%;flex:0 0 20%}.row-cols-6>*{max-width:16.6667%;-ms-flex:0 0 16.6667%;flex:0 0 16.6667%}.col-auto{width:auto;max-width:100%;-ms-flex:none;flex:none}.col-1{max-width:8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%}.col-2{max-width:16.6667%;-ms-flex:0 0 16.6667%;flex:0 0 16.6667%}.col-3{max-width:25%;-ms-flex:0 0 25%;flex:0 0 25%}.col-4{max-width:33.3333%;-ms-flex:0 0 33.3333%;flex:0 0 33.3333%}.col-5{max-width:41.6667%;-ms-flex:0 0 41.6667%;flex:0 0 41.6667%}.col-6{max-width:50%;-ms-flex:0 0 50%;flex:0 0 50%}.col-7{max-width:58.3333%;-ms-flex:0 0 58.3333%;flex:0 0 58.3333%}.col-8{max-width:66.6667%;-ms-flex:0 0 66.6667%;flex:0 0 66.6667%}.col-9{max-width:75%;-ms-flex:0 0 75%;flex:0 0 75%}.col-10{max-width:83.3333%;-ms-flex:0 0 83.3333%;flex:0 0 83.3333%}.col-11{max-width:91.6667%;-ms-flex:0 0 91.6667%;flex:0 0 91.6667%}.col-12{max-width:100%;-ms-flex:0 0 100%;flex:0 0 100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.6667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333%}.offset-5{margin-left:41.6667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333%}.offset-8{margin-left:66.6667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333%}.offset-11{margin-left:91.6667%}@media (min-width:576px){.col-sm{max-width:100%;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-grow:1;flex-basis:0}.row-cols-sm-1>*{max-width:100%;-ms-flex:0 0 100%;flex:0 0 100%}.row-cols-sm-2>*{max-width:50%;-ms-flex:0 0 50%;flex:0 0 50%}.row-cols-sm-3>*{max-width:33.3333%;-ms-flex:0 0 33.3333%;flex:0 0 33.3333%}.row-cols-sm-4>*{max-width:25%;-ms-flex:0 0 25%;flex:0 0 25%}.row-cols-sm-5>*{max-width:20%;-ms-flex:0 0 20%;flex:0 0 20%}.row-cols-sm-6>*{max-width:16.6667%;-ms-flex:0 0 16.6667%;flex:0 0 16.6667%}.col-sm-auto{width:auto;max-width:100%;-ms-flex:none;flex:none}.col-sm-1{max-width:8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%}.col-sm-2{max-width:16.6667%;-ms-flex:0 0 16.6667%;flex:0 0 16.6667%}.col-sm-3{max-width:25%;-ms-flex:0 0 25%;flex:0 0 25%}.col-sm-4{max-width:33.3333%;-ms-flex:0 0 33.3333%;flex:0 0 33.3333%}.col-sm-5{max-width:41.6667%;-ms-flex:0 0 41.6667%;flex:0 0 41.6667%}.col-sm-6{max-width:50%;-ms-flex:0 0 50%;flex:0 0 50%}.col-sm-7{max-width:58.3333%;-ms-flex:0 0 58.3333%;flex:0 0 58.3333%}.col-sm-8{max-width:66.6667%;-ms-flex:0 0 66.6667%;flex:0 0 66.6667%}.col-sm-9{max-width:75%;-ms-flex:0 0 75%;flex:0 0 75%}.col-sm-10{max-width:83.3333%;-ms-flex:0 0 83.3333%;flex:0 0 83.3333%}.col-sm-11{max-width:91.6667%;-ms-flex:0 0 91.6667%;flex:0 0 91.6667%}.col-sm-12{max-width:100%;-ms-flex:0 0 100%;flex:0 0 100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.6667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333%}.offset-sm-5{margin-left:41.6667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333%}.offset-sm-8{margin-left:66.6667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333%}.offset-sm-11{margin-left:91.6667%}}@media (min-width:768px){.col-md{max-width:100%;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-grow:1;flex-basis:0}.row-cols-md-1>*{max-width:100%;-ms-flex:0 0 100%;flex:0 0 100%}.row-cols-md-2>*{max-width:50%;-ms-flex:0 0 50%;flex:0 0 50%}.row-cols-md-3>*{max-width:33.3333%;-ms-flex:0 0 33.3333%;flex:0 0 33.3333%}.row-cols-md-4>*{max-width:25%;-ms-flex:0 0 25%;flex:0 0 25%}.row-cols-md-5>*{max-width:20%;-ms-flex:0 0 20%;flex:0 0 20%}.row-cols-md-6>*{max-width:16.6667%;-ms-flex:0 0 16.6667%;flex:0 0 16.6667%}.col-md-auto{width:auto;max-width:100%;-ms-flex:none;flex:none}.col-md-1{max-width:8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%}.col-md-2{max-width:16.6667%;-ms-flex:0 0 16.6667%;flex:0 0 16.6667%}.col-md-3{max-width:25%;-ms-flex:0 0 25%;flex:0 0 25%}.col-md-4{max-width:33.3333%;-ms-flex:0 0 33.3333%;flex:0 0 33.3333%}.col-md-5{max-width:41.6667%;-ms-flex:0 0 41.6667%;flex:0 0 41.6667%}.col-md-6{max-width:50%;-ms-flex:0 0 50%;flex:0 0 50%}.col-md-7{max-width:58.3333%;-ms-flex:0 0 58.3333%;flex:0 0 58.3333%}.col-md-8{max-width:66.6667%;-ms-flex:0 0 66.6667%;flex:0 0 66.6667%}.col-md-9{max-width:75%;-ms-flex:0 0 75%;flex:0 0 75%}.col-md-10{max-width:83.3333%;-ms-flex:0 0 83.3333%;flex:0 0 83.3333%}.col-md-11{max-width:91.6667%;-ms-flex:0 0 91.6667%;flex:0 0 91.6667%}.col-md-12{max-width:100%;-ms-flex:0 0 100%;flex:0 0 100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.6667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333%}.offset-md-5{margin-left:41.6667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333%}.offset-md-8{margin-left:66.6667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333%}.offset-md-11{margin-left:91.6667%}}@media (min-width:992px){.col-lg{max-width:100%;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-grow:1;flex-basis:0}.row-cols-lg-1>*{max-width:100%;-ms-flex:0 0 100%;flex:0 0 100%}.row-cols-lg-2>*{max-width:50%;-ms-flex:0 0 50%;flex:0 0 50%}.row-cols-lg-3>*{max-width:33.3333%;-ms-flex:0 0 33.3333%;flex:0 0 33.3333%}.row-cols-lg-4>*{max-width:25%;-ms-flex:0 0 25%;flex:0 0 25%}.row-cols-lg-5>*{max-width:20%;-ms-flex:0 0 20%;flex:0 0 20%}.row-cols-lg-6>*{max-width:16.6667%;-ms-flex:0 0 16.6667%;flex:0 0 16.6667%}.col-lg-auto{width:auto;max-width:100%;-ms-flex:none;flex:none}.col-lg-1{max-width:8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%}.col-lg-2{max-width:16.6667%;-ms-flex:0 0 16.6667%;flex:0 0 16.6667%}.col-lg-3{max-width:25%;-ms-flex:0 0 25%;flex:0 0 25%}.col-lg-4{max-width:33.3333%;-ms-flex:0 0 33.3333%;flex:0 0 33.3333%}.col-lg-5{max-width:41.6667%;-ms-flex:0 0 41.6667%;flex:0 0 41.6667%}.col-lg-6{max-width:50%;-ms-flex:0 0 50%;flex:0 0 50%}.col-lg-7{max-width:58.3333%;-ms-flex:0 0 58.3333%;flex:0 0 58.3333%}.col-lg-8{max-width:66.6667%;-ms-flex:0 0 66.6667%;flex:0 0 66.6667%}.col-lg-9{max-width:75%;-ms-flex:0 0 75%;flex:0 0 75%}.col-lg-10{max-width:83.3333%;-ms-flex:0 0 83.3333%;flex:0 0 83.3333%}.col-lg-11{max-width:91.6667%;-ms-flex:0 0 91.6667%;flex:0 0 91.6667%}.col-lg-12{max-width:100%;-ms-flex:0 0 100%;flex:0 0 100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.6667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333%}.offset-lg-5{margin-left:41.6667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333%}.offset-lg-8{margin-left:66.6667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333%}.offset-lg-11{margin-left:91.6667%}}@media (min-width:1200px){.col-xl{max-width:100%;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-grow:1;flex-basis:0}.row-cols-xl-1>*{max-width:100%;-ms-flex:0 0 100%;flex:0 0 100%}.row-cols-xl-2>*{max-width:50%;-ms-flex:0 0 50%;flex:0 0 50%}.row-cols-xl-3>*{max-width:33.3333%;-ms-flex:0 0 33.3333%;flex:0 0 33.3333%}.row-cols-xl-4>*{max-width:25%;-ms-flex:0 0 25%;flex:0 0 25%}.row-cols-xl-5>*{max-width:20%;-ms-flex:0 0 20%;flex:0 0 20%}.row-cols-xl-6>*{max-width:16.6667%;-ms-flex:0 0 16.6667%;flex:0 0 16.6667%}.col-xl-auto{width:auto;max-width:100%;-ms-flex:none;flex:none}.col-xl-1{max-width:8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%}.col-xl-2{max-width:16.6667%;-ms-flex:0 0 16.6667%;flex:0 0 16.6667%}.col-xl-3{max-width:25%;-ms-flex:0 0 25%;flex:0 0 25%}.col-xl-4{max-width:33.3333%;-ms-flex:0 0 33.3333%;flex:0 0 33.3333%}.col-xl-5{max-width:41.6667%;-ms-flex:0 0 41.6667%;flex:0 0 41.6667%}.col-xl-6{max-width:50%;-ms-flex:0 0 50%;flex:0 0 50%}.col-xl-7{max-width:58.3333%;-ms-flex:0 0 58.3333%;flex:0 0 58.3333%}.col-xl-8{max-width:66.6667%;-ms-flex:0 0 66.6667%;flex:0 0 66.6667%}.col-xl-9{max-width:75%;-ms-flex:0 0 75%;flex:0 0 75%}.col-xl-10{max-width:83.3333%;-ms-flex:0 0 83.3333%;flex:0 0 83.3333%}.col-xl-11{max-width:91.6667%;-ms-flex:0 0 91.6667%;flex:0 0 91.6667%}.col-xl-12{max-width:100%;-ms-flex:0 0 100%;flex:0 0 100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.6667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333%}.offset-xl-5{margin-left:41.6667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333%}.offset-xl-8{margin-left:66.6667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333%}.offset-xl-11{margin-left:91.6667%}}.table{width:100%;color:#212529;margin-bottom:1rem}.table td,.table th{vertical-align:top;border-top:1px solid #dee2e6;padding:.75rem}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(2n+1){background-color:#0000000d}.table-hover tbody tr:hover{color:#212529;background-color:#00000013}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:#00000013}.table-hover .table-active:hover{background-color:#00000013}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#00000013}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(2n+1){background-color:#ffffff0d}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:#ffffff13}@media (max-width:575.98px){.table-responsive-sm{width:100%;-webkit-overflow-scrolling:touch;display:block;overflow-x:auto}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{width:100%;-webkit-overflow-scrolling:touch;display:block;overflow-x:auto}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{width:100%;-webkit-overflow-scrolling:touch;display:block;overflow-x:auto}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{width:100%;-webkit-overflow-scrolling:touch;display:block;overflow-x:auto}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{width:100%;-webkit-overflow-scrolling:touch;display:block;overflow-x:auto}.table-responsive>.table-bordered{border:0}.form-control{width:100%;height:calc(1.5em + .75rem + 2px);color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;display:block}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:#0000;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem #007bff40}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{opacity:1;background-color:#e9ecef}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:-moz-focusring{color:#0000;text-shadow:0 0 #495057}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{width:100%;display:block}.col-form-label{font-size:inherit;margin-bottom:0;padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{width:100%;color:#212529;background-color:#0000;border:1px solid #0000;border-width:1px 0;margin-bottom:0;padding:.375rem 0;font-size:1rem;line-height:1.5;display:block}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);border-radius:.2rem;padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.form-control-lg{height:calc(1.5em + 1rem + 2px);border-radius:.3rem;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{margin-top:.25rem;display:block}.form-row{-ms-flex-wrap:wrap;flex-wrap:wrap;margin-left:-5px;margin-right:-5px;display:-ms-flexbox;display:flex}.form-row>.col,.form-row>[class*=col-]{padding-left:5px;padding-right:5px}.form-check{padding-left:1.25rem;display:block;position:relative}.form-check-input{margin-top:.3rem;margin-left:-1.25rem;position:absolute}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{align-items:center;margin-right:.75rem;padding-left:0;display:-ms-inline-flexbox;display:inline-flex}.form-check-inline .form-check-input{margin-top:0;margin-left:0;margin-right:.3125rem;position:static}.valid-feedback{width:100%;color:#28a745;margin-top:.25rem;font-size:.875em;display:none}.valid-tooltip{z-index:5;max-width:100%;color:#fff;background-color:#28a745e6;border-radius:.25rem;margin-top:.1rem;padding:.25rem .5rem;font-size:.875rem;line-height:1.5;display:none;position:absolute;top:100%;left:0}.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:#28a745;padding-right:calc(1.5em + .75rem)!important}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem #28a74540}.was-validated select.form-control:valid,select.form-control.is-valid{background-position:right 1.5rem center;padding-right:3rem!important}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{background-position:right calc(.375em + .1875rem) top calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.custom-select.is-valid,.was-validated .custom-select:valid{background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") right 1.75rem center/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat;border-color:#28a745;padding-right:calc(.75em + 2.3125rem)!important}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem #28a74540}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{background-color:#34ce57;border-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem #28a74540}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem #28a74540}.invalid-feedback{width:100%;color:#dc3545;margin-top:.25rem;font-size:.875em;display:none}.invalid-tooltip{z-index:5;max-width:100%;color:#fff;background-color:#dc3545e6;border-radius:.25rem;margin-top:.1rem;padding:.25rem .5rem;font-size:.875rem;line-height:1.5;display:none;position:absolute;top:100%;left:0}.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:#dc3545;padding-right:calc(1.5em + .75rem)!important}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem #dc354540}.was-validated select.form-control:invalid,select.form-control.is-invalid{background-position:right 1.5rem center;padding-right:3rem!important}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-position:right calc(.375em + .1875rem) top calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") right 1.75rem center/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat;border-color:#dc3545;padding-right:calc(.75em + 2.3125rem)!important}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem #dc354540}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{background-color:#e4606d;border-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem #dc354540}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem #dc354540}.form-inline{-ms-flex-flow:wrap;flex-flow:wrap;align-items:center;display:-ms-flexbox;display:flex}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{justify-content:center;align-items:center;margin-bottom:0;display:-ms-flexbox;display:flex}.form-inline .form-group{-ms-flex-flow:wrap;flex-flow:wrap;-ms-flex:none;flex:none;align-items:center;margin-bottom:0;display:-ms-flexbox;display:flex}.form-inline .form-control{width:auto;vertical-align:middle;display:inline-block}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{width:auto;justify-content:center;align-items:center;padding-left:0;display:-ms-flexbox;display:flex}.form-inline .form-check-input{-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-left:0;margin-right:.25rem;position:relative}.form-inline .custom-control{justify-content:center;align-items:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#0000;border:1px solid #0000;border-radius:.25rem;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;display:inline-block}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem #007bff40}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem #828a9180}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #828a9180}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem #48b46180}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #48b46180}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem #3ab0c380}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #3ab0c380}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem #deaa0c80}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #deaa0c80}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem #e1536180}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #e1536180}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem #d8d9db80}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #d8d9db80}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem #52585d80}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #52585d80}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem #007bff80}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:#0000}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #007bff80}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem #6c757d80}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:#0000}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #6c757d80}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem #28a74580}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:#0000}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #28a74580}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem #17a2b880}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:#0000}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #17a2b880}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem #ffc10780}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:#0000}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #ffc10780}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem #dc354580}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:#0000}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #dc354580}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem #f8f9fa80}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:#0000}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #f8f9fa80}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem #343a4080}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:#0000}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #343a4080}.btn-link{color:#007bff;font-weight:400;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{border-radius:.3rem;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5}.btn-group-sm>.btn,.btn-sm{border-radius:.2rem;padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.btn-block{width:100%;display:block}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;transition:height .35s;position:relative;overflow:hidden}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.width{width:0;height:auto;transition:width .35s}@media (prefers-reduced-motion:reduce){.collapsing.width{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{vertical-align:.255em;content:"";border:.3em solid #0000;border-top-color:currentColor;border-bottom:0;margin-left:.255em;display:inline-block}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{z-index:1000;float:left;min-width:10rem;color:#212529;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #00000026;border-radius:.25rem;margin:.125rem 0 0;padding:.5rem 0;font-size:1rem;list-style:none;display:none;position:absolute;top:100%;left:0}.dropdown-menu-left{left:0;right:auto}.dropdown-menu-right{left:auto;right:0}@media (min-width:576px){.dropdown-menu-sm-left{left:0;right:auto}.dropdown-menu-sm-right{left:auto;right:0}}@media (min-width:768px){.dropdown-menu-md-left{left:0;right:auto}.dropdown-menu-md-right{left:auto;right:0}}@media (min-width:992px){.dropdown-menu-lg-left{left:0;right:auto}.dropdown-menu-lg-right{left:auto;right:0}}@media (min-width:1200px){.dropdown-menu-xl-left{left:0;right:auto}.dropdown-menu-xl-right{left:auto;right:0}}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem;top:auto;bottom:100%}.dropup .dropdown-toggle:after{vertical-align:.255em;content:"";border:.3em solid #0000;border-top:0;border-bottom-color:currentColor;margin-left:.255em;display:inline-block}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem;top:0;left:100%;right:auto}.dropright .dropdown-toggle:after{vertical-align:.255em;content:"";border:.3em solid #0000;border-left-color:currentColor;border-right:0;margin-left:.255em;display:inline-block}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem;top:0;left:auto;right:100%}.dropleft .dropdown-toggle:after{vertical-align:.255em;content:"";margin-left:.255em;display:inline-block}.dropleft .dropdown-toggle:after{display:none}.dropleft .dropdown-toggle:before{vertical-align:.255em;content:"";border-top:.3em solid #0000;border-bottom:.3em solid #0000;border-right:.3em solid;margin-right:.255em;display:inline-block}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{bottom:auto;right:auto}.dropdown-divider{height:0;border-top:1px solid #e9ecef;margin:.5rem 0;overflow:hidden}.dropdown-item{width:100%;clear:both;color:#212529;text-align:inherit;white-space:nowrap;background-color:#0000;border:0;padding:.25rem 1.5rem;font-weight:400;display:block}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;background-color:#e9ecef;text-decoration:none}.dropdown-item.active,.dropdown-item:active{color:#fff;background-color:#007bff;text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:#0000}.dropdown-menu.show{display:block}.dropdown-header{color:#6c757d;white-space:nowrap;margin-bottom:0;padding:.5rem 1.5rem;font-size:.875rem;display:block}.dropdown-item-text{color:#212529;padding:.25rem 1.5rem;display:block}.btn-group,.btn-group-vertical{vertical-align:middle;display:-ms-inline-flexbox;display:inline-flex;position:relative}.btn-group-vertical>.btn,.btn-group>.btn{-ms-flex:auto;flex:auto;position:relative}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{-ms-flex-wrap:wrap;flex-wrap:wrap;justify-content:flex-start;display:-ms-flexbox;display:flex}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;justify-content:center;align-items:flex-start}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.input-group{width:100%;-ms-flex-wrap:wrap;flex-wrap:wrap;align-items:stretch;display:-ms-flexbox;display:flex;position:relative}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{width:1%;min-width:0;-ms-flex:auto;flex:auto;margin-bottom:0;position:relative}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{align-items:center;display:-ms-flexbox;display:flex}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label,.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label:after,.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label,.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label:after,.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.form-control:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{z-index:2;position:relative}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem;align-items:center;margin-bottom:0;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;display:-ms-flexbox;display:flex}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{border-radius:.3rem;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{border-radius:.2rem;padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{z-index:1;min-height:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact;padding-left:1.5rem;display:block;position:relative}.custom-control-inline{margin-right:1rem;display:-ms-inline-flexbox;display:inline-flex}.custom-control-input{z-index:-1;width:1rem;height:1.25rem;opacity:0;position:absolute;left:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;background-color:#007bff;border-color:#007bff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem #007bff40}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before,.custom-control-input[disabled]~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{vertical-align:top;margin-bottom:0;position:relative}.custom-control-label:before{width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:1px solid #adb5bd;display:block;position:absolute;top:.25rem;left:-1.5rem}.custom-control-label:after{width:1rem;height:1rem;content:"";background:50%/50% 50% no-repeat;display:block;position:absolute;top:.25rem;left:-1.5rem}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{background-color:#007bff;border-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:#007bff80}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:#007bff80}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:#007bff80}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{width:1.75rem;pointer-events:all;border-radius:.5rem;left:-2.25rem}.custom-switch .custom-control-label:after{width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;top:calc(.25rem + 2px);left:calc(2px - 2.25rem)}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;-webkit-transform:translate(.75rem);transform:translate(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:#007bff80}.custom-select{width:100%;height:calc(1.5em + .75rem + 2px);color:#495057;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;display:inline-block}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem #007bff40}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;background-image:none;padding-right:.75rem}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:#0000;text-shadow:0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0;display:inline-block;position:relative}.custom-file-input{z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);opacity:0;margin:0;position:relative;overflow:hidden}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem #007bff40}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{z-index:1;height:calc(1.5em + .75rem + 2px);color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;padding:.375rem .75rem;font-weight:400;line-height:1.5;position:absolute;top:0;left:0;right:0;overflow:hidden}.custom-file-label:after{z-index:3;height:calc(1.5em + .75rem);color:#495057;content:"Browse";border-left:inherit;background-color:#e9ecef;border-radius:0 .25rem .25rem 0;padding:.375rem .75rem;line-height:1.5;display:block;position:absolute;top:0;bottom:0;right:0}.custom-range{width:100%;height:1.4rem;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;padding:0}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem #007bff40}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem #007bff40}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem #007bff40}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;-webkit-appearance:none;appearance:none;background-color:#007bff;border:0;border-radius:1rem;margin-top:-.25rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:#0000;cursor:pointer;background-color:#dee2e6;border-color:#0000;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;-moz-appearance:none;appearance:none;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:#0000;cursor:pointer;background-color:#dee2e6;border-color:#0000;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;appearance:none;background-color:#007bff;border:0;border-radius:1rem;margin-top:0;margin-left:.2rem;margin-right:.2rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:#0000;cursor:pointer;background-color:#0000;border-width:.5rem;border-color:#0000}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem;margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:0;padding-left:0;list-style:none;display:-ms-flexbox;display:flex}.nav-link{padding:.5rem 1rem;display:block}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{background-color:#0000;border:1px solid #0000;border-top-left-radius:.25rem;border-top-right-radius:.25rem;margin-bottom:-1px}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:#0000;border-color:#0000}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{text-align:center;-ms-flex:auto;flex:auto}.nav-justified .nav-item,.nav-justified>.nav-link{text-align:center;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-grow:1;flex-basis:0}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{-ms-flex-wrap:wrap;flex-wrap:wrap;justify-content:space-between;align-items:center;padding:.5rem 1rem;display:-ms-flexbox;display:flex;position:relative}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{-ms-flex-wrap:wrap;flex-wrap:wrap;justify-content:space-between;align-items:center;display:-ms-flexbox;display:flex}.navbar-brand{font-size:1.25rem;line-height:inherit;white-space:nowrap;margin-right:1rem;padding-top:.3125rem;padding-bottom:.3125rem;display:inline-block}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{-ms-flex-direction:column;flex-direction:column;margin-bottom:0;padding-left:0;list-style:none;display:-ms-flexbox;display:flex}.navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-nav .dropdown-menu{float:none;position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;display:inline-block}.navbar-collapse{-ms-flex-positive:1;-ms-flex-preferred-size:100%;flex-grow:1;flex-basis:100%;align-items:center}.navbar-toggler{background-color:#0000;border:1px solid #0000;border-radius:.25rem;padding:.25rem .75rem;font-size:1.25rem;line-height:1}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50%/100% 100% no-repeat;display:inline-block}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-left:0;padding-right:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row;flex-flow:row;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{-ms-flex-preferred-size:auto;flex-basis:auto;display:-ms-flexbox!important;display:flex!important}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-left:0;padding-right:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row;flex-flow:row;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{-ms-flex-preferred-size:auto;flex-basis:auto;display:-ms-flexbox!important;display:flex!important}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-left:0;padding-right:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row;flex-flow:row;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{-ms-flex-preferred-size:auto;flex-basis:auto;display:-ms-flexbox!important;display:flex!important}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-left:0;padding-right:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row;flex-flow:row;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{-ms-flex-preferred-size:auto;flex-basis:auto;display:-ms-flexbox!important;display:flex!important}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row;flex-flow:row;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-left:0;padding-right:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{-ms-flex-preferred-size:auto;flex-basis:auto;display:-ms-flexbox!important;display:flex!important}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:#000000e6}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:#000000e6}.navbar-light .navbar-nav .nav-link{color:#00000080}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:#000000b3}.navbar-light .navbar-nav .nav-link.disabled{color:#0000004d}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:#000000e6}.navbar-light .navbar-toggler{color:#00000080;border-color:#0000001a}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:#00000080}.navbar-light .navbar-text a{color:#000000e6}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:#000000e6}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:#ffffff80}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:#ffffffbf}.navbar-dark .navbar-nav .nav-link.disabled{color:#ffffff40}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:#ffffff80;border-color:#ffffff1a}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:#ffffff80}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid #00000020;border-radius:.25rem;-ms-flex-direction:column;flex-direction:column;display:-ms-flexbox;display:flex;position:relative}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-left-radius:calc(.25rem - 1px);border-bottom-right-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{min-height:1px;-ms-flex:auto;flex:auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{background-color:#00000008;border-bottom:1px solid #00000020;margin-bottom:0;padding:.75rem 1.25rem}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{background-color:#00000008;border-top:1px solid #00000020;padding:.75rem 1.25rem}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{border-bottom:0;margin-bottom:-.75rem;margin-left:-.625rem;margin-right:-.625rem}.card-header-pills{margin-left:-.625rem;margin-right:-.625rem}.card-img-overlay{border-radius:calc(.25rem - 1px);padding:1.25rem;position:absolute;inset:0}.card-img,.card-img-bottom,.card-img-top{width:100%;-ms-flex-negative:0;flex-shrink:0}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-left-radius:calc(.25rem - 1px);border-bottom-right-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:wrap;flex-flow:wrap;margin-left:-15px;margin-right:-15px;display:-ms-flexbox;display:flex}.card-deck .card{-ms-flex:1 0;flex:1 0;margin-bottom:0;margin-left:15px;margin-right:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:wrap;flex-flow:wrap;display:-ms-flexbox;display:flex}.card-group>.card{-ms-flex:1 0;flex:1 0;margin-bottom:0}.card-group>.card+.card{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;orphans:1;widows:1;column-gap:1.25rem}.card-columns .card{width:100%;display:inline-block}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{background-color:#e9ecef;border-radius:.25rem;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1rem;padding:.75rem 1rem;list-style:none;display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{float:left;color:#6c757d;content:"/";padding-right:.5rem}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{border-radius:.25rem;padding-left:0;list-style:none;display:-ms-flexbox;display:flex}.page-link{color:#007bff;background-color:#fff;border:1px solid #dee2e6;margin-left:-1px;padding:.5rem .75rem;line-height:1.25;display:block;position:relative}.page-link:hover{z-index:2;color:#0056b3;background-color:#e9ecef;border-color:#dee2e6;text-decoration:none}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem #007bff40}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;margin-left:0}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;display:inline-block}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{border-radius:10rem;padding-left:.6em;padding-right:.6em}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem #007bff80}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem #6c757d80}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem #28a74580}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem #17a2b880}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem #ffc10780}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem #dc354580}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem #f8f9fa80}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem #343a4080}.jumbotron{background-color:#e9ecef;border-radius:.3rem;margin-bottom:2rem;padding:2rem 1rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{border-radius:0;padding-left:0;padding-right:0}.alert{border:1px solid #0000;border-radius:.25rem;margin-bottom:1rem;padding:.75rem 1.25rem;position:relative}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{z-index:2;color:inherit;padding:.75rem 1.25rem;position:absolute;top:0;right:0}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;background-color:#e9ecef;border-radius:.25rem;font-size:.75rem;line-height:0;display:-ms-flexbox;display:flex;overflow:hidden}.progress-bar{color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;-ms-flex-direction:column;flex-direction:column;justify-content:center;transition:width .6s;display:-ms-flexbox;display:flex;overflow:hidden}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,#ffffff26 25%,#0000 25% 50%,#ffffff26 50% 75%,#0000 75%,#0000);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{align-items:flex-start;display:-ms-flexbox;display:flex}.media-body{-ms-flex:1;flex:1}.list-group{border-radius:.25rem;-ms-flex-direction:column;flex-direction:column;margin-bottom:0;padding-left:0;display:-ms-flexbox;display:flex}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;background-color:#f8f9fa;text-decoration:none}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{background-color:#fff;border:1px solid #00000020;padding:.75rem 1.25rem;display:block;position:relative}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:1px;margin-top:-1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-top-right-radius:0;border-bottom-left-radius:.25rem}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-top-right-radius:0;border-bottom-left-radius:.25rem}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-top-right-radius:0;border-bottom-left-radius:.25rem}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-top-right-radius:0;border-bottom-left-radius:.25rem}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-top-right-radius:0;border-bottom-left-radius:.25rem}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;color:#000;text-shadow:0 1px #fff;opacity:.5;font-size:1.5rem;font-weight:700;line-height:1}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{background-color:#0000;border:0;padding:0}a.close.disabled{pointer-events:none}.toast{max-width:350px;opacity:0;background-color:#ffffffd9;background-clip:padding-box;border:1px solid #0000001a;border-radius:.25rem;-ms-flex-preferred-size:350px;flex-basis:350px;font-size:.875rem;box-shadow:0 .25rem .75rem #0000001a}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{opacity:1;display:block}.toast.hide{display:none}.toast-header{color:#6c757d;background-color:#ffffffd9;background-clip:padding-box;border-bottom:1px solid #0000000d;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px);align-items:center;padding:.25rem .75rem;display:-ms-flexbox;display:flex}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow:hidden auto}.modal{z-index:1050;width:100%;height:100%;outline:0;display:none;position:fixed;top:0;left:0;overflow:hidden}.modal-dialog{width:auto;pointer-events:none;margin:.5rem;position:relative}.modal.fade .modal-dialog{transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{max-height:calc(100% - 1rem);display:-ms-flexbox;display:flex}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{min-height:calc(100% - 1rem);align-items:center;display:-ms-flexbox;display:flex}.modal-dialog-centered:before{height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:"";display:block}.modal-dialog-centered.modal-dialog-scrollable{height:100%;-ms-flex-direction:column;flex-direction:column;justify-content:center}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid #0003;border-radius:.3rem;outline:0;-ms-flex-direction:column;flex-direction:column;display:-ms-flexbox;display:flex;position:relative}.modal-backdrop{z-index:1040;width:100vw;height:100vh;background-color:#000;position:fixed;top:0;left:0}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px);justify-content:space-between;align-items:flex-start;padding:1rem;display:-ms-flexbox;display:flex}.modal-header .close{margin:-1rem -1rem -1rem auto;padding:1rem}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{-ms-flex:auto;flex:auto;padding:1rem;position:relative}.modal-footer{border-top:1px solid #dee2e6;border-bottom-left-radius:calc(.3rem - 1px);border-bottom-right-radius:calc(.3rem - 1px);-ms-flex-wrap:wrap;flex-wrap:wrap;justify-content:flex-end;align-items:center;padding:.75rem;display:-ms-flexbox;display:flex}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{width:50px;height:50px;position:absolute;top:-9999px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{z-index:1070;text-align:left;text-align:start;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;word-wrap:break-word;opacity:0;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:.875rem;font-style:normal;font-weight:400;line-height:1.5;text-decoration:none;display:block;position:absolute}.tooltip.show{opacity:.9}.tooltip .arrow{width:.8rem;height:.4rem;display:block;position:absolute}.tooltip .arrow:before{content:"";border-style:solid;border-color:#0000;position:absolute}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{border-width:.4rem .4rem 0;border-top-color:#000;top:0}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{width:.4rem;height:.8rem;left:0}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{border-width:.4rem .4rem .4rem 0;border-right-color:#000;right:0}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{border-width:0 .4rem .4rem;border-bottom-color:#000;bottom:0}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{width:.4rem;height:.8rem;right:0}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{border-width:.4rem 0 .4rem .4rem;border-left-color:#000;left:0}.tooltip-inner{max-width:200px;color:#fff;text-align:center;background-color:#000;border-radius:.25rem;padding:.25rem .5rem}.popover{z-index:1060;max-width:276px;text-align:left;text-align:start;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid #0003;border-radius:.3rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:.875rem;font-style:normal;font-weight:400;line-height:1.5;text-decoration:none;display:block;position:absolute;top:0;left:0}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem;display:block;position:absolute}.popover .arrow:after,.popover .arrow:before{content:"";border-style:solid;border-color:#0000;display:block;position:absolute}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{border-width:.5rem .5rem 0;border-top-color:#00000040;bottom:0}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{border-width:.5rem .5rem 0;border-top-color:#fff;bottom:1px}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{width:.5rem;height:1rem;margin:.3rem 0;left:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{border-width:.5rem .5rem .5rem 0;border-right-color:#00000040;left:0}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{border-width:.5rem .5rem .5rem 0;border-right-color:#fff;left:1px}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{border-width:0 .5rem .5rem;border-bottom-color:#00000040;top:0}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{border-width:0 .5rem .5rem;border-bottom-color:#fff;top:1px}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{width:1rem;content:"";border-bottom:1px solid #f7f7f7;margin-left:-.5rem;display:block;position:absolute;top:0;left:50%}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{width:.5rem;height:1rem;margin:.3rem 0;right:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{border-width:.5rem 0 .5rem .5rem;border-left-color:#00000040;right:0}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{border-width:.5rem 0 .5rem .5rem;border-left-color:#fff;right:1px}.popover-header{background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px);margin-bottom:0;padding:.5rem .75rem;font-size:1rem}.popover-header:empty{display:none}.popover-body{color:#212529;padding:.5rem .75rem}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{width:100%;position:relative;overflow:hidden}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{float:left;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;margin-right:-100%;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out;display:none;position:relative}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translate(100%);transform:translate(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translate(-100%);transform:translate(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{z-index:1;width:15%;color:#fff;text-align:center;opacity:.5;background:0 0;border:0;justify-content:center;align-items:center;padding:0;transition:opacity .15s;display:-ms-flexbox;display:flex;position:absolute;top:0;bottom:0}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{width:20px;height:20px;background:50%/100% 100% no-repeat;display:inline-block}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{z-index:15;justify-content:center;margin-left:15%;margin-right:15%;padding-left:0;list-style:none;display:-ms-flexbox;display:flex;position:absolute;bottom:0;left:0;right:0}.carousel-indicators li{box-sizing:content-box;width:30px;height:3px;text-indent:-999px;cursor:pointer;opacity:.5;background-color:#fff;background-clip:padding-box;border-top:10px solid #0000;border-bottom:10px solid #0000;-ms-flex:0 auto;flex:0 auto;margin-left:3px;margin-right:3px;transition:opacity .6s}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{z-index:10;color:#fff;text-align:center;padding-top:20px;padding-bottom:20px;position:absolute;bottom:20px;left:15%;right:15%}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid;border-right-color:#0000;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite;display:inline-block}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{width:2rem;height:2rem;vertical-align:-.125em;opacity:0;background-color:currentColor;border-radius:50%;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite;display:inline-block}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:#0000!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-left-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{clear:both;content:"";display:block}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{width:100%;padding:0;display:block;position:relative;overflow:hidden}.embed-responsive:before{content:"";display:block}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{width:100%;height:100%;border:0;position:absolute;top:0;bottom:0;left:0}.embed-responsive-21by9:before{padding-top:42.8571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:auto!important;flex:auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:auto!important;flex:auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:auto!important;flex:auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:auto!important;flex:auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:auto!important;flex:auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{z-index:1030;position:fixed;top:0;left:0;right:0}.fixed-bottom{z-index:1030;position:fixed;bottom:0;left:0;right:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{z-index:1020;position:-webkit-sticky;position:sticky;top:0}}.sr-only{width:1px;height:1px;clip:rect(0,0,0,0);white-space:nowrap;border:0;margin:-1px;padding:0;position:absolute;overflow:hidden}.sr-only-focusable:active,.sr-only-focusable:focus{width:auto;height:auto;clip:auto;white-space:normal;position:static;overflow:visible}.shadow-sm{box-shadow:0 .125rem .25rem #00000013!important}.shadow{box-shadow:0 .5rem 1rem #00000026!important}.shadow-lg{box-shadow:0 1rem 3rem #0000002d!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link:after{z-index:1;pointer-events:auto;content:"";background-color:#0000;position:absolute;inset:0}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:#00000080!important}.text-white-50{color:#ffffff80!important}.text-hide{font:0/0 a;color:#0000;text-shadow:none;background-color:#0000;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title)")"}pre{white-space:pre-wrap!important}blockquote,pre{page-break-inside:avoid;border:1px solid #adb5bd}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body,.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}@-webkit-keyframes bs-notify-fadeOut{0%{opacity:.9}to{opacity:0}}@-o-keyframes bs-notify-fadeOut{0%{opacity:.9}to{opacity:0}}@keyframes bs-notify-fadeOut{0%{opacity:.9}to{opacity:0}}.bootstrap-select>select.bs-select-hidden,select.bs-select-hidden,select.selectpicker{display:none!important}.bootstrap-select{width:220px�;vertical-align:middle}.bootstrap-select>.dropdown-toggle{width:100%;text-align:right;white-space:nowrap;justify-content:space-between;align-items:center;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;position:relative}.bootstrap-select>.dropdown-toggle:after{margin-top:-1px}.bootstrap-select>.dropdown-toggle.bs-placeholder,.bootstrap-select>.dropdown-toggle.bs-placeholder:active,.bootstrap-select>.dropdown-toggle.bs-placeholder:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder:hover{color:#999}.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:hover{color:#ffffff80}.bootstrap-select>select{border:none;bottom:0;left:50%;width:.5px!important;height:100%!important;opacity:0!important;z-index:0!important;padding:0!important;display:block!important;position:absolute!important}.bootstrap-select>select.mobile-device{top:0;left:0;width:100%!important;z-index:2!important;display:block!important}.bootstrap-select.is-invalid .dropdown-toggle,.error .bootstrap-select .dropdown-toggle,.has-error .bootstrap-select .dropdown-toggle,.was-validated .bootstrap-select select:invalid+.dropdown-toggle{border-color:#b94a48}.bootstrap-select.is-valid .dropdown-toggle,.was-validated .bootstrap-select select:valid+.dropdown-toggle{border-color:#28a745}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:220px}.bootstrap-select .dropdown-toggle:focus,.bootstrap-select>select.mobile-device:focus+.dropdown-toggle{outline-offset:-2px;outline:thin dotted #333!important;outline:5px auto -webkit-focus-ring-color!important}.bootstrap-select.form-control{height:auto;border:none;margin-bottom:0;padding:0}:not(.input-group)>.bootstrap-select.form-control:not([class*=col-]){width:100%}.bootstrap-select.form-control.input-group-btn{float:none;z-index:auto}.form-inline .bootstrap-select,.form-inline .bootstrap-select.form-control:not([class*=col-]){width:auto}.bootstrap-select:not(.input-group-btn),.bootstrap-select[class*=col-]{float:none;margin-left:0;display:inline-block}.bootstrap-select.dropdown-menu-right,.bootstrap-select[class*=col-].dropdown-menu-right,.row .bootstrap-select[class*=col-].dropdown-menu-right{float:right}.form-group .bootstrap-select,.form-horizontal .bootstrap-select,.form-inline .bootstrap-select{margin-bottom:0}.form-group-lg .bootstrap-select.form-control,.form-group-sm .bootstrap-select.form-control{padding:0}.form-group-lg .bootstrap-select.form-control .dropdown-toggle,.form-group-sm .bootstrap-select.form-control .dropdown-toggle{height:100%;font-size:inherit;line-height:inherit;border-radius:inherit}.bootstrap-select.form-control-lg .dropdown-toggle,.bootstrap-select.form-control-sm .dropdown-toggle{font-size:inherit;line-height:inherit;border-radius:inherit}.bootstrap-select.form-control-sm .dropdown-toggle{padding:.25rem .5rem}.bootstrap-select.form-control-lg .dropdown-toggle{padding:.5rem 1rem}.form-inline .bootstrap-select .form-control{width:100%}.bootstrap-select.disabled,.bootstrap-select>.disabled{cursor:not-allowed}.bootstrap-select.disabled:focus,.bootstrap-select>.disabled:focus{outline:0!important}.bootstrap-select.bs-container{position:absolute;top:0;left:0;height:0!important;padding:0!important}.bootstrap-select.bs-container .dropdown-menu{z-index:1060}.bootstrap-select .dropdown-toggle .filter-option{float:left;height:100%;width:100%;text-align:left;-webkit-box-flex:0;-webkit-flex:0 auto;-ms-flex:0 auto;flex:0 auto;position:static;top:0;left:0;overflow:hidden}.bs3.bootstrap-select .dropdown-toggle .filter-option{padding-right:inherit}.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option{padding-top:inherit;padding-bottom:inherit;padding-left:inherit;float:none;position:absolute}.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option .filter-option-inner{padding-right:inherit}.bootstrap-select .dropdown-toggle .filter-option-inner-inner{overflow:hidden}.bootstrap-select .dropdown-toggle .filter-expand{float:left;overflow:hidden;width:0!important;opacity:0!important}.bootstrap-select .dropdown-toggle .caret{vertical-align:middle;margin-top:-2px;position:absolute;top:50%;right:12px}.input-group .bootstrap-select.form-control .dropdown-toggle{border-radius:inherit}.bootstrap-select[class*=col-] .dropdown-toggle{width:100%}.bootstrap-select .dropdown-menu{min-width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select .dropdown-menu>.inner:focus{outline:0!important}.bootstrap-select .dropdown-menu.inner{float:none;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;margin:0;padding:0;position:static}.bootstrap-select .dropdown-menu li{position:relative}.bootstrap-select .dropdown-menu li.active small{color:#ffffff80!important}.bootstrap-select .dropdown-menu li.disabled a{cursor:not-allowed}.bootstrap-select .dropdown-menu li a{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bootstrap-select .dropdown-menu li a.opt{padding-left:2.25em;position:relative}.bootstrap-select .dropdown-menu li a span.check-mark{display:none}.bootstrap-select .dropdown-menu li a span.text{display:inline-block}.bootstrap-select .dropdown-menu li small{padding-left:.5em}.bootstrap-select .dropdown-menu .notify{width:96%;min-height:26px;pointer-events:none;opacity:.9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#f5f5f5;border:1px solid #e3e3e3;margin:0 2%;padding:3px 5px;position:absolute;bottom:5px;-webkit-box-shadow:inset 0 1px 1px #0000000d;box-shadow:inset 0 1px 1px #0000000d}.bootstrap-select .dropdown-menu .notify.fadeOut{-webkit-animation:bs-notify-fadeOut .3s linear .75s forwards;-o-animation:bs-notify-fadeOut .3s linear .75s forwards;animation:bs-notify-fadeOut .3s linear .75s forwards}.bootstrap-select .no-results{white-space:nowrap;background:#f5f5f5;margin:0 5px;padding:3px}.bootstrap-select.fit-width .dropdown-toggle .filter-option{padding:0;display:inline;position:static}.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner,.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner-inner{display:inline}.bootstrap-select.fit-width .dropdown-toggle .bs-caret:before{content:" "}.bootstrap-select.fit-width .dropdown-toggle .caret{margin-top:-1px;position:static;top:auto}.bootstrap-select.show-tick .dropdown-menu .selected span.check-mark{display:inline-block;position:absolute;top:5px;right:15px}.bootstrap-select.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select .bs-ok-default:after{content:"";width:.5em;height:1em;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;border-style:solid;border-width:0 .26em .26em 0;display:block;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle{z-index:1061}.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:before{content:"";border-bottom:7px solid #ccc3;border-left:7px solid #0000;border-right:7px solid #0000;display:none;position:absolute;bottom:-4px;left:9px}.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:after{content:"";border-bottom:6px solid #fff;border-left:6px solid #0000;border-right:6px solid #0000;display:none;position:absolute;bottom:-4px;left:10px}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:before{border-top:7px solid #ccc3;border-bottom:0;top:-4px;bottom:auto}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:after{border-top:6px solid #fff;border-bottom:0;top:-4px;bottom:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:before{left:auto;right:12px}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:after{left:auto;right:13px}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle .filter-option:after,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle .filter-option:before,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle .filter-option:after,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle .filter-option:before{display:block}.bs-actionsbox,.bs-donebutton,.bs-searchbox{padding:4px 8px}.bs-actionsbox{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-actionsbox .btn-group button{width:50%}.bs-donebutton{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-donebutton .btn-group button{width:100%}.bs-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox .form-control{width:100%;float:none;margin-bottom:0}@font-face{font-family:FontAwesome;src:url(fontawesome-webfont.3981e506.eot);src:url(fontawesome-webfont.3981e506.eot#iefix&v=4.7.0)format("embedded-opentype"),url(fontawesome-webfont.58488e7e.woff2)format("woff2"),url(fontawesome-webfont.ed962b83.woff)format("woff"),url(fontawesome-webfont.0caf0c90.ttf)format("truetype"),url(fontawesome-webfont.a9323ae9.svg#fontawesomeregular)format("svg");font-weight:400;font-style:normal}.fa{font:14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block}.fa-lg{vertical-align:-15%;font-size:1.33333em;line-height:.75em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{margin-left:2.14286em;padding-left:0;list-style-type:none}.fa-ul>li{position:relative}.fa-li{width:2.14286em;text-align:center;position:absolute;top:.142857em;left:-2.14286em}.fa-li.fa-lg{left:-1.85714em}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8,end) infinite;animation:fa-spin 1s steps(8,end) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{width:2em;height:2em;vertical-align:middle;line-height:2em;display:inline-block;position:relative}.fa-stack-1x,.fa-stack-2x{width:100%;text-align:center;position:absolute;left:0}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{width:1px;height:1px;clip:rect(0,0,0,0);border:0;margin:-1px;padding:0;position:absolute;overflow:hidden}.sr-only-focusable:active,.sr-only-focusable:focus{width:auto;height:auto;clip:auto;margin:0;position:static;overflow:visible}.mfp-bg{width:100%;height:100%;z-index:1042;opacity:.8;background:#0b0b0b;position:fixed;top:0;left:0;overflow:hidden}.mfp-wrap{width:100%;height:100%;z-index:1043;-webkit-backface-visibility:hidden;position:fixed;top:0;left:0;outline:none!important}.mfp-container{text-align:center;width:100%;height:100%;box-sizing:border-box;padding:0 8px;position:absolute;top:0;left:0}.mfp-container:before{content:"";height:100%;vertical-align:middle;display:inline-block}.mfp-align-top .mfp-container:before{display:none}.mfp-content{vertical-align:middle;text-align:left;z-index:1045;margin:0 auto;display:inline-block;position:relative}.mfp-inline-holder .mfp-content,.mfp-ajax-holder .mfp-content{width:100%;cursor:auto}.mfp-ajax-cur{cursor:progress}.mfp-zoom-out-cur,.mfp-zoom-out-cur .mfp-image-holder .mfp-close{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out}.mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.mfp-auto-cursor .mfp-content{cursor:auto}.mfp-close,.mfp-arrow,.mfp-preloader,.mfp-counter{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none!important}.mfp-preloader{color:#ccc;width:auto;text-align:center;z-index:1044;margin-top:-.8em;position:absolute;top:50%;left:8px;right:8px}.mfp-preloader a{color:#ccc}.mfp-preloader a:hover{color:#fff}.mfp-s-ready .mfp-preloader,.mfp-s-error .mfp-content{display:none}button.mfp-close,button.mfp-arrow{cursor:pointer;-webkit-appearance:none;z-index:1046;box-shadow:none;touch-action:manipulation;background:0 0;border:0;outline:none;padding:0;display:block;overflow:visible}button::-moz-focus-inner{border:0;padding:0}.mfp-close{width:44px;height:44px;text-align:center;opacity:.65;color:#fff;padding:0 0 18px 10px;font-family:Arial,Baskerville,monospace;font-size:28px;font-style:normal;line-height:44px;text-decoration:none;position:absolute;top:0;right:0}.mfp-close:hover,.mfp-close:focus{opacity:1}.mfp-close:active{top:1px}.mfp-close-btn-in .mfp-close{color:#333}.mfp-image-holder .mfp-close,.mfp-iframe-holder .mfp-close{color:#fff;text-align:right;width:100%;padding-right:6px;right:-6px}.mfp-counter{color:#ccc;white-space:nowrap;font-size:12px;line-height:18px;position:absolute;top:0;right:0}.mfp-arrow{opacity:.65;width:90px;height:110px;-webkit-tap-highlight-color:transparent;margin:-55px 0 0;padding:0;position:absolute;top:50%}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:hover,.mfp-arrow:focus{opacity:1}.mfp-arrow:before,.mfp-arrow:after{content:"";width:0;height:0;border:inset #0000;margin-top:35px;margin-left:35px;display:block;position:absolute;top:0;left:0}.mfp-arrow:after{border-top-width:13px;border-bottom-width:13px;top:8px}.mfp-arrow:before{opacity:.7;border-top-width:21px;border-bottom-width:21px}.mfp-arrow-left{left:0}.mfp-arrow-left:after{border-right:17px solid #fff;margin-left:31px}.mfp-arrow-left:before{border-right:27px solid #3f3f3f;margin-left:25px}.mfp-arrow-right{right:0}.mfp-arrow-right:after{border-left:17px solid #fff;margin-left:39px}.mfp-arrow-right:before{border-left:27px solid #3f3f3f}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{width:100%;max-width:900px;line-height:0}.mfp-iframe-holder .mfp-close{top:-40px}.mfp-iframe-scaler{width:100%;height:0;padding-top:56.25%;overflow:hidden}.mfp-iframe-scaler iframe{width:100%;height:100%;background:#000;display:block;position:absolute;top:0;left:0;box-shadow:0 0 8px #0009}img.mfp-img{width:auto;max-width:100%;height:auto;box-sizing:border-box;margin:0 auto;padding:40px 0;line-height:0;display:block}.mfp-figure{line-height:0}.mfp-figure:after{content:"";width:auto;height:auto;z-index:-1;background:#444;display:block;position:absolute;inset:40px 0;box-shadow:0 0 8px #0009}.mfp-figure small{color:#bdbdbd;font-size:12px;line-height:14px;display:block}.mfp-figure figure{margin:0}.mfp-bottom-bar{width:100%;cursor:auto;margin-top:-36px;position:absolute;top:100%;left:0}.mfp-title{text-align:left;color:#f3f3f3;word-wrap:break-word;padding-right:36px;line-height:18px}.mfp-image-holder .mfp-content{max-width:100%}.mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width:800px) and (orientation:landscape),screen and (max-height:300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-figure small{margin-left:5px;display:inline}.mfp-img-mobile .mfp-bottom-bar{box-sizing:border-box;background:#0009;margin:0;padding:3px 5px;position:fixed;top:auto;bottom:0}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{top:3px;right:5px}.mfp-img-mobile .mfp-close{width:35px;height:35px;text-align:center;background:#0009;padding:0;line-height:35px;position:fixed;top:0;right:0}}@media (max-width:900px){.mfp-arrow{-webkit-transform:scale(.75);transform:scale(.75)}.mfp-arrow-left{-webkit-transform-origin:0;transform-origin:0}.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%}.mfp-container{padding-left:6px;padding-right:6px}}.owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{width:100%;z-index:1;display:none}.owl-carousel .owl-stage{-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden;position:relative}.owl-carousel .owl-stage:after{content:".";clear:both;visibility:hidden;height:0;line-height:0;display:block}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate(0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate(0,0);-moz-transform:translate(0,0);-ms-transform:translate(0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{width:100%;display:block}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-khtml-user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{color:inherit;font:inherit;background:0 0;border:none;padding:0!important}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{height:100%;background:#000;position:relative}.owl-carousel .owl-video-play-icon{height:80px;width:80px;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;background:url(owl.video.play.e7a23fb2.png) no-repeat;margin-top:-40px;margin-left:-40px;transition:transform .1s;position:absolute;top:50%;left:50%}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3);transform:scale(1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:50%;background-repeat:no-repeat;background-size:contain;transition:opacity .4s}.owl-carousel .owl-video-frame{z-index:1;height:100%;width:100%;position:relative}.owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#fff;cursor:pointer;background:#d6d6d6;border-radius:3px;margin:5px;padding:4px 7px;font-size:14px;display:inline-block}.owl-theme .owl-nav [class*=owl-]:hover{color:#fff;background:#869791;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{zoom:1;display:inline-block}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;-webkit-backface-visibility:visible;background:#d6d6d6;border-radius:30px;margin:5px 7px;transition:opacity .2s;display:block}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791}.toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{float:right;color:#fff;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px #fff;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80);font-size:20px;font-weight:700;line-height:1;position:relative;top:-.3em;right:-.3em}.toast-close-button:focus,.toast-close-button:hover{color:#000;cursor:pointer;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40);text-decoration:none}.rtl .toast-close-button{float:left;left:-.3em;right:.3em}button.toast-close-button{cursor:pointer;-webkit-appearance:none;background:0 0;border:0;padding:0}.toast-top-center{width:100%;top:0;right:0}.toast-bottom-center{width:100%;bottom:0;right:0}.toast-top-full-width{width:100%;top:0;right:0}.toast-bottom-full-width{width:100%;bottom:0;right:0}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{bottom:12px;right:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{z-index:999999;pointer-events:none;position:fixed}#toast-container *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#toast-container>div{pointer-events:auto;width:300px;color:#fff;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80);background-position:15px;background-repeat:no-repeat;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin:0 0 6px;padding:15px 15px 15px 50px;position:relative;overflow:hidden;-webkit-box-shadow:0 0 12px #999;-moz-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999}#toast-container>div.rtl{direction:rtl;background-position:right 15px center;padding:15px 50px 15px 15px}#toast-container>div:hover{opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer;-webkit-box-shadow:0 0 12px #000;-moz-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{width:300px;margin-left:auto;margin-right:auto}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{width:96%;margin-left:auto;margin-right:auto}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}.toast-progress{height:4px;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40);background-color:#000;position:absolute;bottom:0;left:0}@media (max-width:240px){#toast-container>div{width:11em;padding:8px 8px 8px 50px}#toast-container>div.rtl{padding:8px 50px 8px 8px}#toast-container .toast-close-button{top:-.2em;right:-.2em}#toast-container .rtl .toast-close-button{left:-.2em;right:.2em}}@media (min-width:241px) and (max-width:480px){#toast-container>div{width:18em;padding:8px 8px 8px 50px}#toast-container>div.rtl{padding:8px 50px 8px 8px}#toast-container .toast-close-button{top:-.2em;right:-.2em}#toast-container .rtl .toast-close-button{left:-.2em;right:.2em}}@media (min-width:481px) and (max-width:768px){#toast-container>div{width:25em;padding:15px 15px 15px 50px}#toast-container>div.rtl{padding:15px 50px 15px 15px}}:root{--animate-duration:1s;--animate-delay:1s;--animate-repeat:1}.animate__animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-duration:var(--animate-duration);animation-duration:var(--animate-duration);-webkit-animation-fill-mode:both;animation-fill-mode:both}.animate__animated.animate__infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animate__animated.animate__repeat-1{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-iteration-count:var(--animate-repeat);animation-iteration-count:var(--animate-repeat)}.animate__animated.animate__repeat-2{-webkit-animation-iteration-count:2;animation-iteration-count:2;-webkit-animation-iteration-count:calc(var(--animate-repeat)*2);animation-iteration-count:calc(var(--animate-repeat)*2)}.animate__animated.animate__repeat-3{-webkit-animation-iteration-count:3;animation-iteration-count:3;-webkit-animation-iteration-count:calc(var(--animate-repeat)*3);animation-iteration-count:calc(var(--animate-repeat)*3)}.animate__animated.animate__delay-1s{-webkit-animation-delay:1s;animation-delay:1s;-webkit-animation-delay:var(--animate-delay);animation-delay:var(--animate-delay)}.animate__animated.animate__delay-2s{-webkit-animation-delay:2s;animation-delay:2s;-webkit-animation-delay:calc(var(--animate-delay)*2);animation-delay:calc(var(--animate-delay)*2)}.animate__animated.animate__delay-3s{-webkit-animation-delay:3s;animation-delay:3s;-webkit-animation-delay:calc(var(--animate-delay)*3);animation-delay:calc(var(--animate-delay)*3)}.animate__animated.animate__delay-4s{-webkit-animation-delay:4s;animation-delay:4s;-webkit-animation-delay:calc(var(--animate-delay)*4);animation-delay:calc(var(--animate-delay)*4)}.animate__animated.animate__delay-5s{-webkit-animation-delay:5s;animation-delay:5s;-webkit-animation-delay:calc(var(--animate-delay)*5);animation-delay:calc(var(--animate-delay)*5)}.animate__animated.animate__faster{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-duration:calc(var(--animate-duration)/2);animation-duration:calc(var(--animate-duration)/2)}.animate__animated.animate__fast{-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-duration:calc(var(--animate-duration)*.8);animation-duration:calc(var(--animate-duration)*.8)}.animate__animated.animate__slow{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2)}.animate__animated.animate__slower{-webkit-animation-duration:3s;animation-duration:3s;-webkit-animation-duration:calc(var(--animate-duration)*3);animation-duration:calc(var(--animate-duration)*3)}@media (prefers-reduced-motion:reduce),print{.animate__animated{-webkit-transition-duration:1ms!important;transition-duration:1ms!important;-webkit-animation-duration:1ms!important;animation-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important}.animate__animated[class*=Out]{opacity:0}}@-webkit-keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:matrix(1,0,0,1.1,0,-30);transform:matrix(1,0,0,1.1,0,-30)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:matrix(1,0,0,1.05,0,-15);transform:matrix(1,0,0,1.05,0,-15)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:scaleY(.95);transform:scaleY(.95)}90%{-webkit-transform:matrix(1,0,0,1.02,0,-4);transform:matrix(1,0,0,1.02,0,-4)}}@keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:matrix(1,0,0,1.1,0,-30);transform:matrix(1,0,0,1.1,0,-30)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:matrix(1,0,0,1.05,0,-15);transform:matrix(1,0,0,1.05,0,-15)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:scaleY(.95);transform:scaleY(.95)}90%{-webkit-transform:matrix(1,0,0,1.02,0,-4);transform:matrix(1,0,0,1.02,0,-4)}}.animate__bounce{-webkit-transform-origin:bottom;transform-origin:bottom;-webkit-animation-name:bounce;animation-name:bounce}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.animate__flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__pulse{-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale(1.25,.75);transform:scale(1.25,.75)}40%{-webkit-transform:scale(.75,1.25);transform:scale(.75,1.25)}50%{-webkit-transform:scale(1.15,.85);transform:scale(1.15,.85)}65%{-webkit-transform:scale(.95,1.05);transform:scale(.95,1.05)}75%{-webkit-transform:scale(1.05,.95);transform:scale(1.05,.95)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale(1.25,.75);transform:scale(1.25,.75)}40%{-webkit-transform:scale(.75,1.25);transform:scale(.75,1.25)}50%{-webkit-transform:scale(1.15,.85);transform:scale(1.15,.85)}65%{-webkit-transform:scale(.95,1.05);transform:scale(.95,1.05)}75%{-webkit-transform:scale(1.05,.95);transform:scale(1.05,.95)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate(-10px);transform:translate(-10px)}20%,40%,60%,80%{-webkit-transform:translate(10px);transform:translate(10px)}}@keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate(-10px);transform:translate(-10px)}20%,40%,60%,80%{-webkit-transform:translate(10px);transform:translate(10px)}}.animate__shakeX{-webkit-animation-name:shakeX;animation-name:shakeX}@-webkit-keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translateY(-10px);transform:translateY(-10px)}20%,40%,60%,80%{-webkit-transform:translateY(10px);transform:translateY(10px)}}@keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translateY(-10px);transform:translateY(-10px)}20%,40%,60%,80%{-webkit-transform:translateY(10px);transform:translateY(10px)}}.animate__shakeY{-webkit-animation-name:shakeY;animation-name:shakeY}@-webkit-keyframes headShake{0%{-webkit-transform:translate(0);transform:translate(0)}6.5%{-webkit-transform:translate(-6px)rotateY(-9deg);transform:translate(-6px)rotateY(-9deg)}18.5%{-webkit-transform:translate(5px)rotateY(7deg);transform:translate(5px)rotateY(7deg)}31.5%{-webkit-transform:translate(-3px)rotateY(-5deg);transform:translate(-3px)rotateY(-5deg)}43.5%{-webkit-transform:translate(2px)rotateY(3deg);transform:translate(2px)rotateY(3deg)}50%{-webkit-transform:translate(0);transform:translate(0)}}@keyframes headShake{0%{-webkit-transform:translate(0);transform:translate(0)}6.5%{-webkit-transform:translate(-6px)rotateY(-9deg);transform:translate(-6px)rotateY(-9deg)}18.5%{-webkit-transform:translate(5px)rotateY(7deg);transform:translate(5px)rotateY(7deg)}31.5%{-webkit-transform:translate(-3px)rotateY(-5deg);transform:translate(-3px)rotateY(-5deg)}43.5%{-webkit-transform:translate(2px)rotateY(3deg);transform:translate(2px)rotateY(3deg)}50%{-webkit-transform:translate(0);transform:translate(0)}}.animate__headShake{-webkit-animation-name:headShake;animation-name:headShake;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.animate__swing{-webkit-transform-origin:top;transform-origin:top;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9)rotate(-3deg);transform:scale3d(.9,.9,.9)rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1)rotate(3deg);transform:scale3d(1.1,1.1,1.1)rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1)rotate(-3deg);transform:scale3d(1.1,1.1,1.1)rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9)rotate(-3deg);transform:scale3d(.9,.9,.9)rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1)rotate(3deg);transform:scale3d(1.1,1.1,1.1)rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1)rotate(-3deg);transform:scale3d(1.1,1.1,1.1)rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate(-25%)rotate(-5deg);transform:translate(-25%)rotate(-5deg)}30%{-webkit-transform:translate(20%)rotate(3deg);transform:translate(20%)rotate(3deg)}45%{-webkit-transform:translate(-15%)rotate(-3deg);transform:translate(-15%)rotate(-3deg)}60%{-webkit-transform:translate(10%)rotate(2deg);transform:translate(10%)rotate(2deg)}75%{-webkit-transform:translate(-5%)rotate(-1deg);transform:translate(-5%)rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate(-25%)rotate(-5deg);transform:translate(-25%)rotate(-5deg)}30%{-webkit-transform:translate(20%)rotate(3deg);transform:translate(20%)rotate(3deg)}45%{-webkit-transform:translate(-15%)rotate(-3deg);transform:translate(-15%)rotate(-3deg)}60%{-webkit-transform:translate(10%)rotate(2deg);transform:translate(10%)rotate(2deg)}75%{-webkit-transform:translate(-5%)rotate(-1deg);transform:translate(-5%)rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skew(-12.5deg)skewY(-12.5deg);transform:skew(-12.5deg)skewY(-12.5deg)}33.3%{-webkit-transform:skew(6.25deg)skewY(6.25deg);transform:skew(6.25deg)skewY(6.25deg)}44.4%{-webkit-transform:skew(-3.125deg)skewY(-3.125deg);transform:skew(-3.125deg)skewY(-3.125deg)}55.5%{-webkit-transform:skew(1.5625deg)skewY(1.5625deg);transform:skew(1.5625deg)skewY(1.5625deg)}66.6%{-webkit-transform:skew(-.78125deg)skewY(-.78125deg);transform:skew(-.78125deg)skewY(-.78125deg)}77.7%{-webkit-transform:skew(.390625deg)skewY(.390625deg);transform:skew(.390625deg)skewY(.390625deg)}88.8%{-webkit-transform:skew(-.195313deg)skewY(-.195313deg);transform:skew(-.195313deg)skewY(-.195313deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skew(-12.5deg)skewY(-12.5deg);transform:skew(-12.5deg)skewY(-12.5deg)}33.3%{-webkit-transform:skew(6.25deg)skewY(6.25deg);transform:skew(6.25deg)skewY(6.25deg)}44.4%{-webkit-transform:skew(-3.125deg)skewY(-3.125deg);transform:skew(-3.125deg)skewY(-3.125deg)}55.5%{-webkit-transform:skew(1.5625deg)skewY(1.5625deg);transform:skew(1.5625deg)skewY(1.5625deg)}66.6%{-webkit-transform:skew(-.78125deg)skewY(-.78125deg);transform:skew(-.78125deg)skewY(-.78125deg)}77.7%{-webkit-transform:skew(.390625deg)skewY(.390625deg);transform:skew(.390625deg)skewY(.390625deg)}88.8%{-webkit-transform:skew(-.195313deg)skewY(-.195313deg);transform:skew(-.195313deg)skewY(-.195313deg)}}.animate__jello{-webkit-transform-origin:50%;transform-origin:50%;-webkit-animation-name:jello;animation-name:jello}@-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}.animate__heartBeat{-webkit-animation-name:heartBeat;animation-name:heartBeat;-webkit-animation-duration:1.3s;animation-duration:1.3s;-webkit-animation-duration:calc(var(--animate-duration)*1.3);animation-duration:calc(var(--animate-duration)*1.3);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes backInDown{0%{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,0,-1200);transform:matrix(.7,0,0,.7,0,-1200)}80%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes backInDown{0%{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,0,-1200);transform:matrix(.7,0,0,.7,0,-1200)}80%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.animate__backInDown{-webkit-animation-name:backInDown;animation-name:backInDown}@-webkit-keyframes backInLeft{0%{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,-2000,0);transform:matrix(.7,0,0,.7,-2000,0)}80%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes backInLeft{0%{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,-2000,0);transform:matrix(.7,0,0,.7,-2000,0)}80%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.animate__backInLeft{-webkit-animation-name:backInLeft;animation-name:backInLeft}@-webkit-keyframes backInRight{0%{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,2000,0);transform:matrix(.7,0,0,.7,2000,0)}80%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes backInRight{0%{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,2000,0);transform:matrix(.7,0,0,.7,2000,0)}80%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.animate__backInRight{-webkit-animation-name:backInRight;animation-name:backInRight}@-webkit-keyframes backInUp{0%{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,0,1200);transform:matrix(.7,0,0,.7,0,1200)}80%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes backInUp{0%{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,0,1200);transform:matrix(.7,0,0,.7,0,1200)}80%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.animate__backInUp{-webkit-animation-name:backInUp;animation-name:backInUp}@-webkit-keyframes backOutDown{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,0,700);transform:matrix(.7,0,0,.7,0,700)}}@keyframes backOutDown{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,0,700);transform:matrix(.7,0,0,.7,0,700)}}.animate__backOutDown{-webkit-animation-name:backOutDown;animation-name:backOutDown}@-webkit-keyframes backOutLeft{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,-2000,0);transform:matrix(.7,0,0,.7,-2000,0)}}@keyframes backOutLeft{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,-2000,0);transform:matrix(.7,0,0,.7,-2000,0)}}.animate__backOutLeft{-webkit-animation-name:backOutLeft;animation-name:backOutLeft}@-webkit-keyframes backOutRight{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,2000,0);transform:matrix(.7,0,0,.7,2000,0)}}@keyframes backOutRight{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,2000,0);transform:matrix(.7,0,0,.7,2000,0)}}.animate__backOutRight{-webkit-animation-name:backOutRight;animation-name:backOutRight}@-webkit-keyframes backOutUp{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,0,-700);transform:matrix(.7,0,0,.7,0,-700)}}@keyframes backOutUp{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:.7;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:.7;-webkit-transform:matrix(.7,0,0,.7,0,-700);transform:matrix(.7,0,0,.7,0,-700)}}.animate__backOutUp{-webkit-animation-name:backOutUp;animation-name:backOutUp}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*.75);animation-duration:calc(var(--animate-duration)*.75);-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:matrix(1,0,0,3,0,-3000);transform:matrix(1,0,0,3,0,-3000)}60%{opacity:1;-webkit-transform:matrix(1,0,0,.9,0,25);transform:matrix(1,0,0,.9,0,25)}75%{-webkit-transform:matrix(1,0,0,.95,0,-10);transform:matrix(1,0,0,.95,0,-10)}90%{-webkit-transform:matrix(1,0,0,.985,0,5);transform:matrix(1,0,0,.985,0,5)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:matrix(1,0,0,3,0,-3000);transform:matrix(1,0,0,3,0,-3000)}60%{opacity:1;-webkit-transform:matrix(1,0,0,.9,0,25);transform:matrix(1,0,0,.9,0,25)}75%{-webkit-transform:matrix(1,0,0,.95,0,-10);transform:matrix(1,0,0,.95,0,-10)}90%{-webkit-transform:matrix(1,0,0,.985,0,5);transform:matrix(1,0,0,.985,0,5)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:matrix(3,0,0,1,-3000,0);transform:matrix(3,0,0,1,-3000,0)}60%{opacity:1;-webkit-transform:translate(25px);transform:translate(25px)}75%{-webkit-transform:matrix(.98,0,0,1,-10,0);transform:matrix(.98,0,0,1,-10,0)}90%{-webkit-transform:matrix(.995,0,0,1,5,0);transform:matrix(.995,0,0,1,5,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:matrix(3,0,0,1,-3000,0);transform:matrix(3,0,0,1,-3000,0)}60%{opacity:1;-webkit-transform:translate(25px);transform:translate(25px)}75%{-webkit-transform:matrix(.98,0,0,1,-10,0);transform:matrix(.98,0,0,1,-10,0)}90%{-webkit-transform:matrix(.995,0,0,1,5,0);transform:matrix(.995,0,0,1,5,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:matrix(3,0,0,1,3000,0);transform:matrix(3,0,0,1,3000,0)}60%{opacity:1;-webkit-transform:translate(-25px);transform:translate(-25px)}75%{-webkit-transform:matrix(.98,0,0,1,10,0);transform:matrix(.98,0,0,1,10,0)}90%{-webkit-transform:matrix(.995,0,0,1,-5,0);transform:matrix(.995,0,0,1,-5,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:matrix(3,0,0,1,3000,0);transform:matrix(3,0,0,1,3000,0)}60%{opacity:1;-webkit-transform:translate(-25px);transform:translate(-25px)}75%{-webkit-transform:matrix(.98,0,0,1,10,0);transform:matrix(.98,0,0,1,10,0)}90%{-webkit-transform:matrix(.995,0,0,1,-5,0);transform:matrix(.995,0,0,1,-5,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:matrix(1,0,0,5,0,3000);transform:matrix(1,0,0,5,0,3000)}60%{opacity:1;-webkit-transform:matrix(1,0,0,.9,0,-20);transform:matrix(1,0,0,.9,0,-20)}75%{-webkit-transform:matrix(1,0,0,.95,0,10);transform:matrix(1,0,0,.95,0,10)}90%{-webkit-transform:matrix(1,0,0,.985,0,-5);transform:matrix(1,0,0,.985,0,-5)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:matrix(1,0,0,5,0,3000);transform:matrix(1,0,0,5,0,3000)}60%{opacity:1;-webkit-transform:matrix(1,0,0,.9,0,-20);transform:matrix(1,0,0,.9,0,-20)}75%{-webkit-transform:matrix(1,0,0,.95,0,10);transform:matrix(1,0,0,.95,0,10)}90%{-webkit-transform:matrix(1,0,0,.985,0,-5);transform:matrix(1,0,0,.985,0,-5)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.animate__bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*.75);animation-duration:calc(var(--animate-duration)*.75);-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:matrix(1,0,0,.985,0,10);transform:matrix(1,0,0,.985,0,10)}40%,45%{opacity:1;-webkit-transform:matrix(1,0,0,.9,0,-20);transform:matrix(1,0,0,.9,0,-20)}to{opacity:0;-webkit-transform:matrix(1,0,0,3,0,2000);transform:matrix(1,0,0,3,0,2000)}}@keyframes bounceOutDown{20%{-webkit-transform:matrix(1,0,0,.985,0,10);transform:matrix(1,0,0,.985,0,10)}40%,45%{opacity:1;-webkit-transform:matrix(1,0,0,.9,0,-20);transform:matrix(1,0,0,.9,0,-20)}to{opacity:0;-webkit-transform:matrix(1,0,0,3,0,2000);transform:matrix(1,0,0,3,0,2000)}}.animate__bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:matrix(.9,0,0,1,20,0);transform:matrix(.9,0,0,1,20,0)}to{opacity:0;-webkit-transform:matrix(2,0,0,1,-2000,0);transform:matrix(2,0,0,1,-2000,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:matrix(.9,0,0,1,20,0);transform:matrix(.9,0,0,1,20,0)}to{opacity:0;-webkit-transform:matrix(2,0,0,1,-2000,0);transform:matrix(2,0,0,1,-2000,0)}}.animate__bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:matrix(.9,0,0,1,-20,0);transform:matrix(.9,0,0,1,-20,0)}to{opacity:0;-webkit-transform:matrix(2,0,0,1,2000,0);transform:matrix(2,0,0,1,2000,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:matrix(.9,0,0,1,-20,0);transform:matrix(.9,0,0,1,-20,0)}to{opacity:0;-webkit-transform:matrix(2,0,0,1,2000,0);transform:matrix(2,0,0,1,2000,0)}}.animate__bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:matrix(1,0,0,.985,0,-10);transform:matrix(1,0,0,.985,0,-10)}40%,45%{opacity:1;-webkit-transform:matrix(1,0,0,.9,0,20);transform:matrix(1,0,0,.9,0,20)}to{opacity:0;-webkit-transform:matrix(1,0,0,3,0,-2000);transform:matrix(1,0,0,3,0,-2000)}}@keyframes bounceOutUp{20%{-webkit-transform:matrix(1,0,0,.985,0,-10);transform:matrix(1,0,0,.985,0,-10)}40%,45%{opacity:1;-webkit-transform:matrix(1,0,0,.9,0,20);transform:matrix(1,0,0,.9,0,20)}to{opacity:0;-webkit-transform:matrix(1,0,0,3,0,-2000);transform:matrix(1,0,0,3,0,-2000)}}.animate__bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.animate__fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate(-100%);transform:translate(-100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate(-100%);transform:translate(-100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate(-2000px);transform:translate(-2000px)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate(-2000px);transform:translate(-2000px)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate(100%);transform:translate(100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate(100%);transform:translate(100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate(2000px);transform:translate(2000px)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate(2000px);transform:translate(2000px)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(100%);transform:translateY(100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(100%);transform:translateY(100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate(-100%,-100%);transform:translate(-100%,-100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate(-100%,-100%);transform:translate(-100%,-100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopLeft{-webkit-animation-name:fadeInTopLeft;animation-name:fadeInTopLeft}@-webkit-keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate(100%,-100%);transform:translate(100%,-100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate(100%,-100%);transform:translate(100%,-100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopRight{-webkit-animation-name:fadeInTopRight;animation-name:fadeInTopRight}@-webkit-keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate(-100%,100%);transform:translate(-100%,100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate(-100%,100%);transform:translate(-100%,100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomLeft{-webkit-animation-name:fadeInBottomLeft;animation-name:fadeInBottomLeft}@-webkit-keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate(100%,100%);transform:translate(100%,100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate(100%,100%);transform:translate(100%,100%)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomRight{-webkit-animation-name:fadeInBottomRight;animation-name:fadeInBottomRight}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.animate__fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translateY(100%);transform:translateY(100%)}}.animate__fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}}.animate__fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate(-100%);transform:translate(-100%)}}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate(-100%);transform:translate(-100%)}}.animate__fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate(-2000px);transform:translate(-2000px)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate(-2000px);transform:translate(-2000px)}}.animate__fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate(100%);transform:translate(100%)}}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate(100%);transform:translate(100%)}}.animate__fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate(2000px);transform:translate(2000px)}}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate(2000px);transform:translate(2000px)}}.animate__fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translateY(-100%);transform:translateY(-100%)}}.animate__fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}}.animate__fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate(-100%,-100%);transform:translate(-100%,-100%)}}@keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate(-100%,-100%);transform:translate(-100%,-100%)}}.animate__fadeOutTopLeft{-webkit-animation-name:fadeOutTopLeft;animation-name:fadeOutTopLeft}@-webkit-keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate(100%,-100%);transform:translate(100%,-100%)}}@keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate(100%,-100%);transform:translate(100%,-100%)}}.animate__fadeOutTopRight{-webkit-animation-name:fadeOutTopRight;animation-name:fadeOutTopRight}@-webkit-keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate(100%,100%);transform:translate(100%,100%)}}@keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate(100%,100%);transform:translate(100%,100%)}}.animate__fadeOutBottomRight{-webkit-animation-name:fadeOutBottomRight;animation-name:fadeOutBottomRight}@-webkit-keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate(-100%,100%);transform:translate(-100%,100%)}}@keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate(-100%,100%);transform:translate(-100%,100%)}}.animate__fadeOutBottomLeft{-webkit-animation-name:fadeOutBottomLeft;animation-name:fadeOutBottomLeft}@-webkit-keyframes flip{0%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:perspective(400px)scaleX(1)translateZ(0)rotateY(-1turn);transform:perspective(400px)scaleX(1)translateZ(0)rotateY(-1turn)}40%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:perspective(400px)scaleX(1)translateZ(150px)rotateY(-190deg);transform:perspective(400px)scaleX(1)translateZ(150px)rotateY(-190deg)}50%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px)scaleX(1)translateZ(150px)rotateY(-170deg);transform:perspective(400px)scaleX(1)translateZ(150px)rotateY(-170deg)}80%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:matrix3d(.95,0,0,0,0,.95,0,0,0,0,.95,-.002375,0,0,0,1);transform:matrix3d(.95,0,0,0,0,.95,0,0,0,0,.95,-.002375,0,0,0,1)}to{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,-.0025,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,-.0025,0,0,0,1)}}@keyframes flip{0%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:perspective(400px)scaleX(1)translateZ(0)rotateY(-1turn);transform:perspective(400px)scaleX(1)translateZ(0)rotateY(-1turn)}40%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:perspective(400px)scaleX(1)translateZ(150px)rotateY(-190deg);transform:perspective(400px)scaleX(1)translateZ(150px)rotateY(-190deg)}50%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px)scaleX(1)translateZ(150px)rotateY(-170deg);transform:perspective(400px)scaleX(1)translateZ(150px)rotateY(-170deg)}80%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:matrix3d(.95,0,0,0,0,.95,0,0,0,0,.95,-.002375,0,0,0,1);transform:matrix3d(.95,0,0,0,0,.95,0,0,0,0,.95,-.002375,0,0,0,1)}to{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,-.0025,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,-.0025,0,0,0,1)}}.animate__animated.animate__flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{opacity:0;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px)rotateX(90deg);transform:perspective(400px)rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px)rotateX(-20deg);transform:perspective(400px)rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px)rotateX(10deg);transform:perspective(400px)rotateX(10deg)}80%{-webkit-transform:perspective(400px)rotateX(-5deg);transform:perspective(400px)rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{opacity:0;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px)rotateX(90deg);transform:perspective(400px)rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px)rotateX(-20deg);transform:perspective(400px)rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px)rotateX(10deg);transform:perspective(400px)rotateX(10deg)}80%{-webkit-transform:perspective(400px)rotateX(-5deg);transform:perspective(400px)rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInX{-webkit-animation-name:flipInX;animation-name:flipInX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipInY{0%{opacity:0;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px)rotateY(90deg);transform:perspective(400px)rotateY(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px)rotateY(-20deg);transform:perspective(400px)rotateY(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px)rotateY(10deg);transform:perspective(400px)rotateY(10deg)}80%{-webkit-transform:perspective(400px)rotateY(-5deg);transform:perspective(400px)rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{opacity:0;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px)rotateY(90deg);transform:perspective(400px)rotateY(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px)rotateY(-20deg);transform:perspective(400px)rotateY(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px)rotateY(10deg);transform:perspective(400px)rotateY(10deg)}80%{-webkit-transform:perspective(400px)rotateY(-5deg);transform:perspective(400px)rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInY{-webkit-animation-name:flipInY;animation-name:flipInY;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px)rotateX(-20deg);transform:perspective(400px)rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px)rotateX(90deg);transform:perspective(400px)rotateX(90deg)}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px)rotateX(-20deg);transform:perspective(400px)rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px)rotateX(90deg);transform:perspective(400px)rotateX(90deg)}}.animate__flipOutX{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*.75);animation-duration:calc(var(--animate-duration)*.75);-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px)rotateY(-15deg);transform:perspective(400px)rotateY(-15deg)}to{opacity:0;-webkit-transform:perspective(400px)rotateY(90deg);transform:perspective(400px)rotateY(90deg)}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px)rotateY(-15deg);transform:perspective(400px)rotateY(-15deg)}to{opacity:0;-webkit-transform:perspective(400px)rotateY(90deg);transform:perspective(400px)rotateY(90deg)}}.animate__flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*.75);animation-duration:calc(var(--animate-duration)*.75);-webkit-animation-name:flipOutY;animation-name:flipOutY;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes lightSpeedInRight{0%{opacity:0;-webkit-transform:translate(100%)skew(-30deg);transform:translate(100%)skew(-30deg)}60%{opacity:1;-webkit-transform:skew(20deg);transform:skew(20deg)}80%{-webkit-transform:skew(-5deg);transform:skew(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInRight{0%{opacity:0;-webkit-transform:translate(100%)skew(-30deg);transform:translate(100%)skew(-30deg)}60%{opacity:1;-webkit-transform:skew(20deg);transform:skew(20deg)}80%{-webkit-transform:skew(-5deg);transform:skew(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInRight{-webkit-animation-name:lightSpeedInRight;animation-name:lightSpeedInRight;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedInLeft{0%{opacity:0;-webkit-transform:translate(-100%)skew(30deg);transform:translate(-100%)skew(30deg)}60%{opacity:1;-webkit-transform:skew(-20deg);transform:skew(-20deg)}80%{-webkit-transform:skew(5deg);transform:skew(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInLeft{0%{opacity:0;-webkit-transform:translate(-100%)skew(30deg);transform:translate(-100%)skew(30deg)}60%{opacity:1;-webkit-transform:skew(-20deg);transform:skew(-20deg)}80%{-webkit-transform:skew(5deg);transform:skew(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInLeft{-webkit-animation-name:lightSpeedInLeft;animation-name:lightSpeedInLeft;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate(100%)skew(30deg);transform:translate(100%)skew(30deg)}}@keyframes lightSpeedOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate(100%)skew(30deg);transform:translate(100%)skew(30deg)}}.animate__lightSpeedOutRight{-webkit-animation-name:lightSpeedOutRight;animation-name:lightSpeedOutRight;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes lightSpeedOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate(-100%)skew(-30deg);transform:translate(-100%)skew(-30deg)}}@keyframes lightSpeedOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate(-100%)skew(-30deg);transform:translate(-100%)skew(-30deg)}}.animate__lightSpeedOutLeft{-webkit-animation-name:lightSpeedOutLeft;animation-name:lightSpeedOutLeft;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{opacity:0;-webkit-transform:rotate(-200deg);transform:rotate(-200deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rotateIn{0%{opacity:0;-webkit-transform:rotate(-200deg);transform:rotate(-200deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__rotateIn{-webkit-transform-origin:50%;transform-origin:50%;-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{opacity:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rotateInDownLeft{0%{opacity:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__rotateInDownLeft{-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{opacity:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rotateInDownRight{0%{opacity:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__rotateInDownRight{-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{opacity:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rotateInUpLeft{0%{opacity:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__rotateInUpLeft{-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{opacity:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rotateInUpRight{0%{opacity:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__rotateInUpRight{-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{opacity:1}to{opacity:0;-webkit-transform:rotate(200deg);transform:rotate(200deg)}}@keyframes rotateOut{0%{opacity:1}to{opacity:0;-webkit-transform:rotate(200deg);transform:rotate(200deg)}}.animate__rotateOut{-webkit-transform-origin:50%;transform-origin:50%;-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{opacity:1}to{opacity:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}}@keyframes rotateOutDownLeft{0%{opacity:1}to{opacity:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}}.animate__rotateOutDownLeft{-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{opacity:1}to{opacity:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}}@keyframes rotateOutDownRight{0%{opacity:1}to{opacity:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}}.animate__rotateOutDownRight{-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{opacity:1}to{opacity:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}}@keyframes rotateOutUpLeft{0%{opacity:1}to{opacity:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}}.animate__rotateOutUpLeft{-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{opacity:1}to{opacity:0;-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes rotateOutUpRight{0%{opacity:1}to{opacity:0;-webkit-transform:rotate(90deg);transform:rotate(90deg)}}.animate__rotateOutUpRight{-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-transform:rotate(80deg);transform:rotate(80deg)}40%,80%{opacity:1;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-transform:rotate(60deg);transform:rotate(60deg)}to{opacity:0;-webkit-transform:translateY(700px);transform:translateY(700px)}}@keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-transform:rotate(80deg);transform:rotate(80deg)}40%,80%{opacity:1;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-transform:rotate(60deg);transform:rotate(60deg)}to{opacity:0;-webkit-transform:translateY(700px);transform:translateY(700px)}}.animate__hinge{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes jackInTheBox{0%{opacity:0;-webkit-transform-origin:bottom;transform-origin:bottom;-webkit-transform:scale(.1)rotate(30deg);transform:scale(.1)rotate(30deg)}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes jackInTheBox{0%{opacity:0;-webkit-transform-origin:bottom;transform-origin:bottom;-webkit-transform:scale(.1)rotate(30deg);transform:scale(.1)rotate(30deg)}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.animate__jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate(-100%)rotate(-120deg);transform:translate(-100%)rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate(-100%)rotate(-120deg);transform:translate(-100%)rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate(100%)rotate(120deg);transform:translate(100%)rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate(100%)rotate(120deg);transform:translate(100%)rotate(120deg)}}.animate__rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.animate__zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:translateY(-100px)scale3d(.1,.1,.1);transform:translateY(-100px)scale3d(.1,.1,.1)}60%{opacity:1;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475)translateY(60px);transform:scale3d(.475,.475,.475)translateY(60px)}}@keyframes zoomInDown{0%{opacity:0;-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:translateY(-100px)scale3d(.1,.1,.1);transform:translateY(-100px)scale3d(.1,.1,.1)}60%{opacity:1;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475)translateY(60px);transform:scale3d(.475,.475,.475)translateY(60px)}}.animate__zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:translate(-100px)scale3d(.1,.1,.1);transform:translate(-100px)scale3d(.1,.1,.1)}60%{opacity:1;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475)translate(10px);transform:scale3d(.475,.475,.475)translate(10px)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:translate(-100px)scale3d(.1,.1,.1);transform:translate(-100px)scale3d(.1,.1,.1)}60%{opacity:1;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475)translate(10px);transform:scale3d(.475,.475,.475)translate(10px)}}.animate__zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:translate(100px)scale3d(.1,.1,.1);transform:translate(100px)scale3d(.1,.1,.1)}60%{opacity:1;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475)translate(-10px);transform:scale3d(.475,.475,.475)translate(-10px)}}@keyframes zoomInRight{0%{opacity:0;-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:translate(100px)scale3d(.1,.1,.1);transform:translate(100px)scale3d(.1,.1,.1)}60%{opacity:1;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475)translate(-10px);transform:scale3d(.475,.475,.475)translate(-10px)}}.animate__zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:translateY(100px)scale3d(.1,.1,.1);transform:translateY(100px)scale3d(.1,.1,.1)}60%{opacity:1;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475)translateY(-60px);transform:scale3d(.475,.475,.475)translateY(-60px)}}@keyframes zoomInUp{0%{opacity:0;-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:translateY(100px)scale3d(.1,.1,.1);transform:translateY(100px)scale3d(.1,.1,.1)}60%{opacity:1;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475)translateY(-60px);transform:scale3d(.475,.475,.475)translateY(-60px)}}.animate__zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.animate__zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.475,.475,.475)translateY(-60px);transform:scale3d(.475,.475,.475)translateY(-60px)}to{opacity:0;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:translateY(200px)scale3d(.1,.1,.1);transform:translateY(200px)scale3d(.1,.1,.1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.475,.475,.475)translateY(-60px);transform:scale3d(.475,.475,.475)translateY(-60px)}to{opacity:0;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:translateY(200px)scale3d(.1,.1,.1);transform:translateY(200px)scale3d(.1,.1,.1)}}.animate__zoomOutDown{-webkit-transform-origin:bottom;transform-origin:bottom;-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475)translate(42px);transform:scale3d(.475,.475,.475)translate(42px)}to{opacity:0;-webkit-transform:matrix(.1,0,0,.1,-200,0);transform:matrix(.1,0,0,.1,-200,0)}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475)translate(42px);transform:scale3d(.475,.475,.475)translate(42px)}to{opacity:0;-webkit-transform:matrix(.1,0,0,.1,-200,0);transform:matrix(.1,0,0,.1,-200,0)}}.animate__zoomOutLeft{-webkit-transform-origin:0;transform-origin:0;-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475)translate(-42px);transform:scale3d(.475,.475,.475)translate(-42px)}to{opacity:0;-webkit-transform:matrix(.1,0,0,.1,200,0);transform:matrix(.1,0,0,.1,200,0)}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475)translate(-42px);transform:scale3d(.475,.475,.475)translate(-42px)}to{opacity:0;-webkit-transform:matrix(.1,0,0,.1,200,0);transform:matrix(.1,0,0,.1,200,0)}}.animate__zoomOutRight{-webkit-transform-origin:100%;transform-origin:100%;-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.475,.475,.475)translateY(60px);transform:scale3d(.475,.475,.475)translateY(60px)}to{opacity:0;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:translateY(-200px)scale3d(.1,.1,.1);transform:translateY(-200px)scale3d(.1,.1,.1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.475,.475,.475)translateY(60px);transform:scale3d(.475,.475,.475)translateY(60px)}to{opacity:0;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:translateY(-200px)scale3d(.1,.1,.1);transform:translateY(-200px)scale3d(.1,.1,.1)}}.animate__zoomOutUp{-webkit-transform-origin:bottom;transform-origin:bottom;-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{0%{visibility:visible;-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{visibility:visible;-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{visibility:visible;-webkit-transform:translate(-100%);transform:translate(-100%)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{visibility:visible;-webkit-transform:translate(-100%);transform:translate(-100%)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{visibility:visible;-webkit-transform:translate(100%);transform:translate(100%)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{visibility:visible;-webkit-transform:translate(100%);transform:translate(100%)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{visibility:visible;-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{visibility:visible;-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translateY(100%);transform:translateY(100%)}}.animate__slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate(-100%);transform:translate(-100%)}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate(-100%);transform:translate(-100%)}}.animate__slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate(100%);transform:translate(100%)}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate(100%);transform:translate(100%)}}.animate__slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translateY(-100%);transform:translateY(-100%)}}.animate__slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}code[class*=language-],pre[class*=language-]{color:#000;text-shadow:0 1px #fff;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;background:0 0;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;line-height:1.5}pre[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,code[class*=language-] ::-moz-selection{text-shadow:none;background:#b3d4fc}pre[class*=language-]::selection,pre[class*=language-] ::selection,code[class*=language-]::selection,code[class*=language-] ::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{margin:.5em 0;padding:1em;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{white-space:normal;border-radius:.3em;padding:.1em}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.deleted{color:#905}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:#690}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string{color:#9a6e3a;background:#ffffff80}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.function,.token.class-name{color:#dd4a68}.token.regex,.token.important,.token.variable{color:#e90}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}pre[class*=language-].line-numbers{counter-reset:linenumber;padding-left:3.8em;position:relative}pre[class*=language-].line-numbers>code{white-space:inherit;position:relative}.line-numbers .line-numbers-rows{pointer-events:none;width:3em;letter-spacing:-1px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-right:1px solid #999;font-size:100%;position:absolute;top:0;left:-3.8em}.line-numbers-rows>span{counter-increment:linenumber;display:block}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;text-align:right;padding-right:.8em;display:block}#vl-menu{z-index:1200;position:relative}.vlmenu,.vlmenu ul{margin:0;padding:0;list-style:none}.vlmenu>li{float:left;padding:0 20px}.vlmenu li li{position:relative}.vlmenu li>a{display:block}.vlmenu a i{padding-right:10px;font-size:10px}.vlmenu .search a i,.vlmenu a i.arrow{padding-right:0}.vlmenu>li>a>i.arrow{margin-top:3px;margin-left:10px}.vlmenu a{color:#222;text-decoration:none}.vlmenu>li>a{padding:20px 0}.vlmenu>li{padding:0 20px}.vlmenu>li>a:hover,.vlmenu>li.active>a{color:#000}.vlmenu ul{width:190px;z-index:1300;display:none;position:absolute}.vlmenu>li.menu-right>ul ul{left:-190px}.vlmenu ul a{color:#222;padding:10px 20px}.vlmenu li:hover>ul{display:block}.vlmenu ul ul{top:0;left:190px}.container-fluid .vlmenu>li.menu-right>ul,.container-fluid .vlmenu>li.menu-right>div{right:0}.vlmenu li a i.arrow{float:right;margin-top:5px}.vlmenu li.search a i.arrow{display:none}.vlmenu ul a:hover,.mega-menu ol li a:hover{background:#ffffff1a}.vlmenu li>div{padding:10px}.mega-menu ol{padding-left:0;list-style:none}.mega-menu ol li a{color:#222;padding:10px 20px}.mega-menu h1,.mega-menu h2,.mega-menu h3,.mega-menu h4,.mega-menu h5,.mega-menu h6,.mega-menu p{padding-left:20px;font-weight:400}.vlmenu .full-nav,.vlmenu .half-nav,.vlmenu .quarter-nav{z-index:1300;display:none;position:absolute}.vlmenu>li:hover>div{display:block}.vlmenu .full-nav{width:100%;left:0;right:0}.vlmenu .half-nav{width:50%;left:auto;right:auto}.vlmenu .quarter-nav{width:25%;left:auto;right:auto}.vlmenu li.menu-right .half-nav{width:50%;left:auto;right:0}.vlmenu li.menu-right .quarter-nav{width:25%;left:auto;right:0}.vlmenu li>div input{box-shadow:none;border:none;border-radius:0}.vlmenu.light-sub-menu input{border:1px solid #ddd}.vlmenu li>div input:focus,.vlmenu.light-sub-menu input:focus{box-shadow:none}.light-sub-menu .mega-menu li a span,.dark-sub-menu .mega-menu li a span{color:#bbb;display:block}.light-sub-menu .mega-menu li a:hover span,.dark-sub-menu .mega-menu li a:hover span{color:#fff}.light-sub-menu .mega-menu li a span,.light-sub-menu .mega-menu li a:hover span,.dark-sub-menu .mega-menu li a span{-webkit-transition:all .3s;-moz-transition:all .3s;transition:all .3s}.vlmenu .col1,.vlmenu .col2,.vlmenu .col3,.vlmenu .col4,.vlmenu .col5,.vlmenu .col6{float:left}.mega-menu .col1{width:100%}.mega-menu .col2{width:50%}.mega-menu .col3{width:33.33%}.mega-menu .col4{width:25%}.mega-menu .col5{width:20%}.mega-menu .col6{width:16.66%}.grid .col1,.grid .col2,.grid .col3,.grid .col4,.grid .col5,.grid .col6{margin-right:1%;padding:5px;display:inline-block}.grid.gray .col1,.grid.gray .col2,.grid.gray .col3,.grid.gray .col4,.grid.gray .col5,.grid.gray .col6{background:#ddd}.grid .mega-menu .col1{width:99%}.grid .mega-menu .col2{width:49%}.grid .mega-menu .col3{width:32.33%}.grid .mega-menu .col4{width:24%}.grid .mega-menu .col5{width:19%}.grid .mega-menu .col6{width:15.66%}.menu-row{width:100%;margin-bottom:10px;margin-left:.5%;display:inline-block}.menu-row:last-child{margin-bottom:0}.dark-sub-menu ul,.dark-sub-menu li>div{background:#222}.dark-sub-menu ul a,.dark-sub-menu li>div a,.dark-sub-menu li>div h1,.dark-sub-menu li>div h2,.dark-sub-menu li>div h3,.dark-sub-menu li>div h4,.dark-sub-menu li>div h5,.dark-sub-menu li>div h6,.dark-sub-menu li>div p{color:#fff}.light-sub-menu ul,.light-sub-menu li>div{background:#fff;box-shadow:0 0 1px #d1d1d1}.light-sub-menu ul a,.light-sub-menu li>div a,.light-sub-menu li>div h1,.light-sub-menu li>div h2,.light-sub-menu li>div h3,.light-sub-menu li>div h4,.light-sub-menu li>div h5,.light-sub-menu li>div h6,.light-sub-menu li>div p{color:#222}.light-sub-menu ul a:hover,.light-sub-menu ol li a:hover{color:#fff}.light-sub-menu ul a:hover,.light-sub-menu ol li a:hover{color:#fff;background:#222}.container header{width:100%;display:inline-block}.container header .vl-logo{margin-left:20px}.container header .nav-btn{margin-right:20px}.container header.float-menu{width:100%;margin-top:50px;display:inline-block}.container header.float-menu .vl-logo{margin-left:20px}.container header.float-menu .nav-btn{margin-right:20px}.center-menu{text-align:center}.center-menu .center-logo,.center-menu .vlmenu{display:inline-block}.center-menu .vlmenu ul,.center-menu .vlmenu li>div{text-align:left!important}.no-bg{background:0 0}.dark-menu{background:#000}.dark-menu a{color:#fff}.menu-bg{background-position:100% 100%!important;background-repeat:no-repeat!important;background-size:auto!important}.grid .mega-menu .col1 img,.grid .mega-menu .col2 img,.grid .mega-menu .col3 img,.grid .mega-menu .col4 img,.grid .mega-menu .col5 img,.grid .mega-menu .col6 img{width:100%;height:auto;margin-bottom:10px}.contact-form{padding:0 20px}.contact-form input,.contact-form textarea{width:100%;height:35px;color:#222;background:#fff;border:1px solid #ddd;margin-bottom:10px;padding-left:10px;padding-right:10px;display:inline-block}input[type=checkbox]{width:auto;height:auto;float:left;margin-right:10px}.contact-form input:focus,.contact-form textarea:focus{outline:0}.contact-form textarea{height:150px}.vl-btn{border:none;padding:10px 20px}@media (max-width:1480px){#blog-menu>ul{right:-100px}}@media (max-width:1024px){.menu,.menu ul,div.mega-menu{display:inline-block;background:#333!important}.mega-menu p{padding-left:40px!important}.vl-logo{margin-top:10px}.vlmenu,.vlmenu ul,div.mega-menu{display:inline-block;background:#333!important}.vlmenu a{color:#fff!important}.vlmenu li{z-index:1300;background:#333;position:relative}.vlmenu>li{width:100%;border-bottom:1px solid #ffffff0d;padding:0;display:block}.vlmenu>li>a,.vlmenu>li>a>i.arrow{line-height:50px}.vlmenu>li>a{padding:0 20px}.vlmenu>li a:hover{background:#111}.vlmenu>li>a>i.arrow{margin-right:0}.vlmenu ul{width:100%;border:none;display:none;position:relative;overflow:hidden}.hidden-sub{display:none!important}.visible-sub{visibility:visible;opacity:1;display:block!important}.vlmenu ul a,.vlmenu li>div,.mega-menu ol li a{padding:10px 20px}.mega-menu ol li a,.vlmenu ul a{border-top:1px solid #ffffff0d}.vlmenu li>div{padding:10px 0}.vlmenu ul ul,.vlmenu>li.menu-right>ul ul{left:0}.vlmenu li li a{padding-left:40px}.vlmenu li li li a{padding-left:60px}.vlmenu li li li li a{padding-left:80px}.vlmenu li li li li li a{padding-left:100px}.vlmenu li li li li li li a{padding-left:120px}.vlmenu .full-nav,.vlmenu .half-nav,.vlmenu .quarter-nav{display:block;position:relative}.vlmenu .col1,.vlmenu .col2,.vlmenu .col3,.vlmenu .col4,.vlmenu .col5,.vlmenu .col6,.mega-menu ol,.grid .col1,.grid .col2,.grid .col3,.grid .col4,.grid .col5,.grid .col6{width:100%!important}.grid .col1,.grid .col2,.grid .col3,.grid .col4,.grid .col5,.grid .col6{margin-bottom:10px;display:inline-block}.vlmenu li>div{border:none}.vlmenu h1,.vlmenu h2,.vlmenu h3,.vlmenu h4,.vlmenu h5,.vlmenu h6{color:#fff;margin:10px 20px}.vlmenu p{color:#fff;padding:10px 20px}.vlmenu ul a:hover,.mega-menu ol li a:hover{color:#fff;background:#111}.mega-menu ol li a{margin-bottom:0}.wrapper,.vlmenu .half-nav,.vlmenu .quarter-nav,.vlmenu li.menu-right .half-nav,.vlmenu li.menu-right .quarter-nav{width:100%}.vlmenu{width:100%;display:none}.light-sub-menu ul a,.light-sub-menu li>div a,.light-sub-menu li>div h1,.light-sub-menu li>div h2,.light-sub-menu li>div h3,.light-sub-menu li>div h4,.light-sub-menu li>div h5,.light-sub-menu li>div h6,.light-sub-menu li>div p,.light-sub-menu li>div span{color:#fff}.light-sub-menu ul,.light-sub-menu li>div{box-shadow:none}.vlmenu ul,.vlmenu li>div{top:auto}.vlmenu>li>a{height:53px;border-radius:0;border:none!important}.vlmenu>li,.menu-row{margin:0}.center-menu .vlmenu ul,.center-menu .vlmenu li>div{top:0}.center-menu{text-align:left}.center-menu .vlmenu{display:none}.nav-btn{float:right;cursor:pointer;margin-top:10px;margin-bottom:10px;margin-right:0;display:block}.nav-btn .bars{vertical-align:bottom;height:2px;width:30px;background-color:#333;display:inline-block;position:relative;top:-5px}.nav-btn .bars:before,.nav-btn .bars:after{content:"";width:30px;height:2px;background-color:#333;display:inline-block;position:absolute;top:-8px}.nav-btn .bars:after{top:8px}#blog-menu>ul{right:0}}.introjs-overlay{box-sizing:content-box;z-index:999999;opacity:0;background-color:#000;background:-moz-radial-gradient( center,ellipse farthest-corner,#0006 0,#000000e6 100% );background:-webkit-gradient( radial,center center,0px,center center,100%,color-stop(0%,#0006),color-stop(100%,#000000e6));background:-webkit-radial-gradient( center,ellipse farthest-corner,#0006 0,#000000e6 100% );background:-o-radial-gradient( center,ellipse farthest-corner,#0006 0,#000000e6 100% );background:-ms-radial-gradient( center,ellipse farthest-corner,#0006 0,#000000e6 100% );background:radial-gradient( center,ellipse farthest-corner,#0006 0,#000000e6 100% );filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr='#66000000',endColorstr='#e6000000',GradientType=1)";-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";filter:alpha(opacity=50);-o-transition:all .3s ease-out;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;transition:all .3s ease-out;position:absolute}.introjs-fixParent{z-index:auto!important;opacity:1!important;-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;-o-transform:none!important;transform:none!important}.introjs-showElement,tr.introjs-showElement>td,tr.introjs-showElement>th{z-index:9999999!important}.introjs-disableInteraction{opacity:0;filter:alpha(opacity=0);background-color:#fff;position:absolute;z-index:99999999!important}.introjs-relativePosition,tr.introjs-showElement>td,tr.introjs-showElement>th{position:relative}.introjs-helperLayer{box-sizing:content-box;z-index:9999998;-o-transition:all .3s ease-out;background-color:#ffffffe6;border:1px solid #00000080;border-radius:4px;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;transition:all .3s ease-out;position:absolute;box-shadow:0 2px 15px #0006}.introjs-tooltipReferenceLayer{box-sizing:content-box;visibility:hidden;z-index:100000000;-o-transition:all .3s ease-out;background-color:#0000;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;transition:all .3s ease-out;position:absolute}.introjs-helperLayer *,.introjs-helperLayer :before,.introjs-helperLayer :after{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box}.introjs-helperNumberLayer{box-sizing:content-box;visibility:visible;color:#fff;text-align:center;text-shadow:1px 1px 1px #0000004d;background:-moz-linear-gradient(#cf0404 0%,#ff3019 100%);background:-ms-linear-gradient(top,#ff3019 0%,#cf0404 100%);width:20px;height:20px;filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0)";filter:"progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000)";background:-moz-linear-gradient(#cf0404 0%,#ff3019 100%);background:-webkit-linear-gradient(#cf0404 0%,#ff3019 100%);background:-webkit-gradient(linear,0 0,0 100%,from(#ff3019),to(#cf0404));background:-moz-linear-gradient(#cf0404 0%,#ff3019 100%);background:-o-linear-gradient(#cf0404 0%,#ff3019 100%);background:linear-gradient(#ff3019 0%,#cf0404 100%);border:3px solid #fff;border-radius:50%;padding:2px;font-family:Arial,verdana,tahoma;font-size:13px;font-weight:700;line-height:20px;position:absolute;top:-16px;left:-16px;box-shadow:0 2px 5px #0006;z-index:2147483647!important}.introjs-arrow{content:"";border:5px solid #0000;position:absolute}.introjs-arrow.top{border-bottom-color:#fff;top:-10px}.introjs-arrow.top-right{border-bottom-color:#fff;top:-10px;right:10px}.introjs-arrow.top-middle{border-bottom-color:#fff;margin-left:-5px;top:-10px;left:50%}.introjs-arrow.right{border-left-color:#fff;top:10px;right:-10px}.introjs-arrow.right-bottom{border-left-color:#fff;bottom:10px;right:-10px}.introjs-arrow.bottom{border-top-color:#fff;bottom:-10px}.introjs-arrow.bottom-right{border-top-color:#fff;bottom:-10px;right:10px}.introjs-arrow.bottom-middle{border-top-color:#fff;margin-left:-5px;bottom:-10px;left:50%}.introjs-arrow.left{border-right-color:#fff;top:10px;left:-10px}.introjs-arrow.left-bottom{border-right-color:#fff;bottom:10px;left:-10px}.introjs-tooltip{box-sizing:content-box;visibility:visible;min-width:200px;max-width:300px;-o-transition:opacity .1s ease-out;background-color:#fff;border-radius:3px;padding:10px;-webkit-transition:opacity .1s ease-out;-moz-transition:opacity .1s ease-out;-ms-transition:opacity .1s ease-out;transition:opacity .1s ease-out;position:absolute;box-shadow:0 1px 10px #0006}.introjs-tooltipbuttons{text-align:right;white-space:nowrap}.introjs-button{box-sizing:content-box;text-shadow:1px 1px #fff;color:#333;white-space:nowrap;cursor:pointer;background-color:#ececec;background-image:linear-gradient(#f4f4f4,#ececec);-webkit-background-clip:padding;-moz-background-clip:padding;-o-background-clip:padding-box;zoom:1;background-image:-webkit-gradient(linear,0 0,0 100%,from(#f4f4f4),to(#ececec));background-image:-moz-linear-gradient(#f4f4f4,#ececec);background-image:-o-linear-gradient(#f4f4f4,#ececec);border:1px solid #d4d4d4;-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em;outline:none;margin:10px 0 0;padding:.3em .8em;font:11px sans-serif;text-decoration:none;display:inline;position:relative;overflow:visible}.introjs-button:hover{border-color:#bcbcbc;text-decoration:none;box-shadow:0 1px 1px #e3e3e3}.introjs-button:focus,.introjs-button:active{background-image:-webkit-gradient(linear,0 0,0 100%,from(#ececec),to(#f4f4f4));background-image:-moz-linear-gradient(#ececec,#f4f4f4);background-image:-o-linear-gradient(#ececec,#f4f4f4);background-image:linear-gradient(#ececec,#f4f4f4)}.introjs-button::-moz-focus-inner{border:0;padding:0}.introjs-skipbutton{box-sizing:content-box;color:#7a7a7a;margin-right:5px}.introjs-prevbutton{border-right:none;-webkit-border-radius:.2em 0 0 .2em;-moz-border-radius:.2em 0 0 .2em;border-radius:.2em 0 0 .2em}.introjs-prevbutton.introjs-fullbutton{border:1px solid #d4d4d4;-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em}.introjs-nextbutton{-webkit-border-radius:0 .2em .2em 0;-moz-border-radius:0 .2em .2em 0;border-radius:0 .2em .2em 0}.introjs-nextbutton.introjs-fullbutton{-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em}.introjs-disabled,.introjs-disabled:hover,.introjs-disabled:focus{color:#9a9a9a;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;border-color:#d4d4d4;text-decoration:none}.introjs-hidden{display:none}.introjs-bullets{text-align:center}.introjs-bullets ul{box-sizing:content-box;clear:both;margin:15px auto 0;padding:0;display:inline-block}.introjs-bullets ul li{box-sizing:content-box;float:left;margin:0 2px;list-style:none}.introjs-bullets ul li a{box-sizing:content-box;width:6px;height:6px;cursor:pointer;background:#ccc;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;text-decoration:none;display:block}.introjs-bullets ul li a:hover{background:#999}.introjs-bullets ul li a.active{background:#999}.introjs-progress{box-sizing:content-box;height:10px;background-color:#ecf0f1;border-radius:4px;margin:10px 0 5px;overflow:hidden}.introjs-progressbar{box-sizing:content-box;float:left;width:0%;height:100%;text-align:center;background-color:#08c;font-size:10px;line-height:10px}.introjsFloatingElement{height:0;width:0;position:absolute;top:50%;left:50%}.introjs-fixedTooltip{position:fixed}.introjs-hint{box-sizing:content-box;width:20px;height:15px;cursor:pointer;background:0 0;position:absolute}.introjs-hint:focus{border:0;outline:0}.introjs-hidehint{display:none}.introjs-fixedhint{position:fixed}.introjs-hint:hover>.introjs-hint-pulse{border:5px solid #3c3c3c91}.introjs-hint-pulse{box-sizing:content-box;width:10px;height:10px;z-index:10;-o-transition:all .2s ease-out;background-color:#8888883d;border:5px solid #3c3c3c45;-webkit-border-radius:30px;-moz-border-radius:30px;border-radius:30px;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-ms-transition:all .2s ease-out;transition:all .2s ease-out;position:absolute}.introjs-hint-no-anim .introjs-hint-dot{-webkit-animation:none;-moz-animation:none;animation:none}.introjs-hint-dot{box-sizing:content-box;height:50px;width:50px;z-index:1;opacity:0;background:0 0;border:10px solid #9292925c;-webkit-border-radius:60px;-moz-border-radius:60px;border-radius:60px;-webkit-animation:introjspulse 3s ease-out infinite;-moz-animation:introjspulse 3s ease-out infinite;animation:introjspulse 3s ease-out infinite;position:absolute;top:-25px;left:-25px}@-webkit-keyframes introjspulse{0%{opacity:0;-webkit-transform:scale(0)}25%{opacity:.1;-webkit-transform:scale(0)}50%{opacity:.3;-webkit-transform:scale(.1)}75%{opacity:.5;-webkit-transform:scale(.5)}to{opacity:0;-webkit-transform:scale(1)}}@-moz-keyframes introjspulse{0%{opacity:0;-moz-transform:scale(0)}25%{opacity:.1;-moz-transform:scale(0)}50%{opacity:.3;-moz-transform:scale(.1)}75%{opacity:.5;-moz-transform:scale(.5)}to{opacity:0;-moz-transform:scale(1)}}@keyframes introjspulse{0%{opacity:0;transform:scale(0)}25%{opacity:.1;transform:scale(0)}50%{opacity:.3;transform:scale(.1)}75%{opacity:.5;transform:scale(.5)}to{opacity:0;transform:scale(1)}}@font-face{font-family:iconfont;src:url(iconfont.960c72b2.eot#iefix)format("embedded-opentype"),url(iconfont.a07d77e0.woff2)format("woff2"),url(iconfont.b2a06094.woff)format("woff")}.icon{line-height:1}.icon:before{vertical-align:top;font-style:normal;font-family:iconfont!important;font-weight:400!important}.icon-close-fullscreen:before{content:""}.icon-open-fullscreen:before{content:""}.icon-output:before{content:""}.icon-coverage:before{content:""}.icon-more:before{content:""}.icon-copy:before{content:""}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-ms-text-size-adjust:100%;font-family:Nunito,sans-serif;font-size:16px;font-weight:400;line-height:1.6;overflow-x:hidden}html{scroll-behavior:smooth}a{color:#09c;word-break:break-word;text-decoration:none;transition:all .3s}a:hover{color:#069;text-decoration:none}button,a,.btn{outline:0;transition:all .3s}button:focus,a:focus,.btn:focus{outline:none;text-decoration:none;box-shadow:none!important}img{max-width:100%;height:auto}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{font-family:Nunito,sans-serif;font-weight:700;transition:all .3s}h1 a,.h1 a,h2 a,.h2 a,h3 a,.h3 a,h4 a,.h4 a,h5 a,.h5 a,h6 a,.h6 a{color:#242424}h1 a:hover,.h1 a:hover,h2 a:hover,.h2 a:hover,h3 a:hover,.h3 a:hover,h4 a:hover,.h4 a:hover,h5 a:hover,.h5 a:hover,h6 a:hover,.h6 a:hover{color:#09c;text-decoration:none}@media (min-width:576px){h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{margin-top:-64px;padding-top:64px}}h1,.h1{font-size:32px}h2,.h2{font-size:28px}h3,.h3{font-size:24px}h4,.h4{font-size:20px}h5,.h5{font-size:18px}h6,.h6{font-size:16px}.section-gap{padding-top:3rem;padding-bottom:3rem;position:relative}@media (max-width:991px){h1,.h1{font-size:32px}h2,.h2{font-size:28px}h3,.h3{font-size:24px}h4,.h4{font-size:20px}h5,.h5{font-size:18px}h6,.h6{font-size:16px}.app-header+.section-gap{padding-top:5rem}}@media (max-width:767px){h1,.h1{font-size:28px}h2,.h2{font-size:26px}h3,.h3{font-size:24px}h4,.h4{font-size:20px}h5,.h5{font-size:18px}h6,.h6{font-size:16px}}@media (max-width:667px){h1,.h1{font-size:26px}h2,.h2{font-size:24px}h3,.h3{font-size:22px}h4,.h4{font-size:20px}h5,.h5{font-size:18px}h6,.h6{font-size:16px}}@media (min-width:769px){.section-gap{padding-top:7.5rem;padding-bottom:7.5rem}}.vlmenu>li>a:hover,.vlmenu>li.active>a{color:#09c}.hamburger{cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:#0000;border:0;margin:10px 0 0;padding:0;transition-property:opacity,filter;transition-duration:.15s;transition-timing-function:linear;display:inline-block;overflow:visible}.hamburger:hover{opacity:.7}.hamburger.is-active:hover{opacity:.7}.hamburger.is-active .hamburger-inner,.hamburger.is-active .hamburger-inner:before,.hamburger.is-active .hamburger-inner:after{background-color:#000}@media screen and (prefers-color-scheme:dark){.hamburger.is-active .hamburger-inner,.hamburger.is-active .hamburger-inner:before,.hamburger.is-active .hamburger-inner:after{background-color:#fff}}.hamburger-box{width:20px;height:17px;display:inline-block;position:relative}.hamburger-inner{margin-top:-2px;display:block;top:50%}.hamburger-inner,.hamburger-inner:before,.hamburger-inner:after{width:20px;height:2px;background-color:#000;border-radius:4px;transition-property:transform;transition-duration:.15s;transition-timing-function:ease;position:absolute}@media screen and (prefers-color-scheme:dark){.hamburger-inner,.hamburger-inner:before,.hamburger-inner:after{background-color:#fff}}.hamburger-inner:before,.hamburger-inner:after{content:"";display:block}.hamburger-inner:before{top:-10px}.hamburger-inner:after{bottom:-10px}.hamburger--slider .hamburger-inner{top:2px}.hamburger--slider .hamburger-inner:before{width:14px;transition-property:transform,opacity;transition-duration:.15s;transition-timing-function:ease;top:7px}.hamburger--slider .hamburger-inner:after{top:14px}.hamburger--slider.is-active .hamburger-inner{transform:translateY(7px)rotate(45deg)}.hamburger--slider.is-active .hamburger-inner:before{opacity:0;transform:rotate(-45deg)translate(-5.71429px,-6px)}.hamburger--slider.is-active .hamburger-inner:after{transform:translateY(-14px)rotate(-90deg)}.vl-accordion{font-family:Nunito,sans-serif!important}@media (max-width:1024px){.vlmenu{margin-top:10px}.app-header{width:100%;z-index:10;background:#fff;padding:.3em 0;position:absolute;top:auto}.app-header .logo-dark{height:50px;display:block}.app-header .logo-light{display:none}}@media screen and (max-width:1024px) and (prefers-color-scheme:dark){.app-header{background:#000}}@media (max-width:1024px){.app-header.transparent-header .logo-light{display:none}.header-links.navbar{position:absolute;right:15px}.vlmenu .vl-accordion .fa-angle-down{display:none}.vlmenu li li a{font-family:Nunito,sans-serif}.vlmenu>li>a{cursor:pointer}.mega-menu h3{font-size:14px;font-weight:700}.vlmenu .vl-accordion .fa-angle-down,.nav-extra-link{display:none}}@media (max-width:767px){.header-links.navbar{right:25px}}@media (min-width:1025px){.app-header{width:100%;z-index:10;background:#fff;transition:all .1s;position:absolute;top:auto}.app-header .navbar-brand{margin-top:0}.app-header .logo-light{display:none}.app-header.transparent-header .logo-light{display:block}.app-header.sticky-nav{z-index:1030;background:#fff;padding:0;animation:smoothScroll .3s forwards;position:fixed;top:0;bottom:auto;box-shadow:0 1px 10px #97a4af26}@keyframes smoothScroll{0%{transform:translateY(-100px)}to{transform:translateY(0)}}.transparent-header{background:0 0;padding-top:2rem;top:auto}.transparent-header .vlmenu>li>a{color:#fff}.transparent-header .vlmenu>li>a:hover{opacity:.7}.transparent-header .logo-dark{height:70px;display:none}.transparent-header.sticky-nav{background:#fff;top:0;box-shadow:0 1px 10px #97a4af26}.transparent-header.sticky-nav .vlmenu>li>a{color:#242424}.transparent-header.sticky-nav .vlmenu>li>a:hover{color:#09c}.transparent-header.sticky-nav .logo-light{display:none}.transparent-header.sticky-nav .logo-dark{height:50px;display:block}}@media screen and (min-width:1025px) and (prefers-color-scheme:dark){.transparent-header.sticky-nav{background:#000;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.transparent-header.sticky-nav .vlmenu>li>a{color:#fff}}@media (min-width:1025px){.transparent-header-dark-nav .vlmenu>li>a{color:#242424}.transparent-header-dark-nav .vlmenu>li>a:hover{color:#09c}}@media screen and (min-width:1025px) and (prefers-color-scheme:dark){.transparent-header-dark-nav .vlmenu>li>a{color:#fff}}@media (min-width:1025px){.transparent-header-dark-nav .logo-dark{display:block}.transparent-header-dark-nav .logo-light{display:none!important}.vlmenu>li>a>i.arrow{display:none;position:relative;top:2px}.light-sub-menu ul,.light-sub-menu li>div{box-shadow:0 1px 15px 1px #45414e1a}}@media screen and (min-width:1025px) and (prefers-color-scheme:dark){.light-sub-menu ul,.light-sub-menu li>div{color:#fff;background-color:#141414}}@media (min-width:1025px){.vlmenu ul{width:250px;padding-top:15px;padding-bottom:15px}.vlmenu ul a{padding:12px 30px;font-size:14px}.vlmenu ul ul{left:251px}.vlmenu li>div{padding:30px}.vlmenu li>div p{font-size:12px}.vlmenu>li.menu-right>ul ul{left:-251px}.vlmenu h3{margin-bottom:20px;font-size:14px;font-weight:700}.vlmenu .mega-menu ol li a{border-radius:6px;padding:12px 20px;font-size:14px}.vlmenu>li{padding:0 10px}}@media screen and (min-width:1025px) and (prefers-color-scheme:dark){.light-sub-menu ul a,.light-sub-menu ol li a{color:#fff}}@media (min-width:1025px){.light-sub-menu ul a:hover,.light-sub-menu ol li a:hover{color:#fff;background:#09c}}@media screen and (min-width:1025px) and (prefers-color-scheme:dark){.light-sub-menu ul a:hover,.light-sub-menu ol li a:hover{color:#fff}}@media (min-width:1025px){.vlmenu>li>a{cursor:pointer;padding:19.5px 0}.nav-btn{display:none}.vlmenu .half-nav,.vlmenu .full-nav,.vlmenu ul{border-radius:6px}.nav-extra-link .mt-3{margin-top:.85rem!important}}.overlay-nav{z-index:6;position:relative;top:1.7rem}.toggle-wrap{height:16px;width:20px;cursor:pointer;z-index:100;-webkit-transition:opacity .25s;transition:opacity .25s;position:absolute;top:3%;right:0}.toggle-wrap.active .top{background:#fff;-webkit-transform:translateY(7px)rotate(45deg);transform:translateY(7px)rotate(45deg)}.toggle-wrap.active .middle{opacity:0;background:#fff}.toggle-wrap.active .bottom{background:#fff;-webkit-transform:translateY(-7px)translate(0)rotate(-45deg);transform:translateY(-7px)translate(0)rotate(-45deg)}.toggle-wrap span{height:2px;width:100%;cursor:pointer;background:#242424;border:none;-webkit-transition:all .35s;transition:all .35s;position:absolute;top:0;left:0}.toggle-wrap span:nth-of-type(2){width:60%;top:7px}.toggle-wrap span:nth-of-type(3){top:14px}.overlay{width:100%;height:0;opacity:0;visibility:hidden;background:#242424;-webkit-transition:opacity .35s,visibility .35s,height .35s;transition:opacity .35s,visibility .35s,height .35s;position:fixed;top:0;left:0;overflow:hidden}.overlay.open{opacity:1;visibility:visible;height:100%}.overlay.open li{-webkit-animation:fadeInDown .5s .35s forwards;animation:fadeInDown .5s .35s forwards}.overlay.open li:nth-of-type(2){-webkit-animation-delay:.4s;animation-delay:.4s}.overlay.open li:nth-of-type(3){-webkit-animation-delay:.45s;animation-delay:.45s}.overlay.open li:nth-of-type(4){-webkit-animation-delay:.5s;animation-delay:.5s}.overlay.open li:nth-of-type(5){-webkit-animation-delay:.55s;animation-delay:.55s}.overlay.open li:nth-of-type(6){-webkit-animation-delay:.6s;animation-delay:.6s}.overlay.open li:nth-of-type(7){-webkit-animation-delay:.65s;animation-delay:.65s}.overlay.open li:nth-of-type(8){-webkit-animation-delay:.7s;animation-delay:.7s}.overlay nav{height:60%;text-align:center;font-size:1.5rem;position:relative;top:45%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.overlay ul{height:100%;margin:0 auto;padding:0;list-style:none;display:inline-block;position:relative}.overlay ul li{height:10%;min-height:50px;opacity:0;display:block;position:relative}.overlay ul li a{color:#fff;padding:0 0 10px;text-decoration:none;display:block;position:relative;overflow:hidden}.overlay ul li a:hover{color:#09c}.overlay ul li a:hover:after,.overlay ul li a:focus:after,.overlay ul li a:active:after{width:100%}.overlay ul li a:after{content:"";width:0%;height:1px;background:#09c;-webkit-transition:all .35s;transition:all .35s;position:absolute;bottom:5px;left:50%;-webkit-transform:translate(-50%);transform:translate(-50%)}.overlay-nav-social-link a{color:#8c8c8c;opacity:0;margin:0 .8rem;font-size:18px}.overlay-nav-social-link a:hover{color:#09c}.overlay-nav-social-link.open a{-webkit-animation:fadeInDown .6s .8s forwards;animation:fadeInDown .6s .8s forwards}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{opacity:1;-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{opacity:1;-webkit-transform:translate(0,0);transform:translate(0,0)}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}.app-footer{border-top:1px solid #e8e8e8;padding:3rem 0;font-family:Arial,Helvetica,sans-serif}.app-footer .footer-link{margin-bottom:.5rem;padding:0}.app-footer .footer-link li{margin-bottom:.5rem;margin-right:15px;display:inline-block}.app-footer .footer-link li a{text-transform:uppercase;color:#8c8c8c;font-size:12px}.app-footer .footer-link li a:hover{color:#242424;text-decoration:none}.app-footer .footer-link li:last-child{margin-right:0}.app-footer .social-links li a{font-size:16px}.app-footer .copyright{color:#8c8c8c;margin:0;font-size:14px}@media screen and (prefers-color-scheme:dark){.app-footer{border-color:#414141}}.app-footer.bg-dark{color:#fff;padding:4rem 0}.app-footer.bg-dark .border-right{border-right:1px solid #616161!important}.app-footer.bg-dark .border-left{border-left:1px solid #616161!important}.app-footer.bg-dark .border-top{border-top:1px solid #616161!important}.app-footer.bg-dark .border-bottom{border-bottom:1px solid #616161!important}.app-secondary-footer{background:#171717;padding:2rem 0}.two-col-link li{width:50%;float:left;box-sizing:border-box;margin-right:0!important}.instagram-feed a{width:75px;height:75px;margin:0 .3rem .2rem 0;display:inline-block;overflow:hidden}.instagram-feed a img{width:100%;height:100%}.social-media-list{padding:0;list-style:none}.social-media-list a{text-transform:capitalize;color:#242424;margin-bottom:.5rem;font-size:18px;font-weight:700;display:inline-block}.social-media-list a:hover{color:#09c}.go-up-link i{font-weight:700}.go-up-link:hover{text-decoration:none}@media (max-width:767px){.app-footer .border-right,.app-footer.bg-dark .border-right{border-right:none!important}.app-footer,.app-footer.bg-dark{padding:2rem 0}.social-media-list a{font-size:14px}.footer-logo{max-height:32px}}img.footer-icon{width:28px;height:28px;margin:0}@media screen and (prefers-color-scheme:dark){code[class*=language-],pre[class*=language-]{color:#c5c8c6;text-shadow:0 1px #0000004d;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;font-family:Inconsolata,Monaco,Consolas,Courier New,Courier,monospace;line-height:1.5}pre[class*=language-]{border-radius:.3em;margin:.5em 0;padding:1em;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#1d1f21}:not(pre)>code[class*=language-]{border-radius:.3em;padding:.1em}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:#7c7c7c}.token.punctuation{color:#c5c8c6}.namespace{opacity:.7}.token.property,.token.keyword,.token.tag{color:#96cbfe}.token.class-name{color:#ffffb6;text-decoration:underline}.token.boolean,.token.constant{color:#9c9}.token.symbol,.token.deleted{color:#f92672}.token.number{color:#ff73fd}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:#a8ff60}.token.variable{color:#c6c5fe}.token.operator{color:#ededed;background-color:inherit}.token.entity{color:#ffffb6;cursor:help}.token.url{color:#96cbfe}.language-css .token.string,.style .token.string{color:#87c38a}.token.atrule,.token.attr-value{color:#f9ee98}.token.function{color:#dad085}.token.regex{color:#e9c062}.token.important{color:#fd971f}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}}.hero-img{background-position:50%;background-repeat:no-repeat;background-size:cover}.hero-img,.bg-overlay,.bg-overlay:before,.bg-theme-overlay,.bg-theme-overlay:before,.bg-navy-overlay,.bg-navy-overlay:before,.bg-gradient-overlay,.bg-gradient-overlay:before{position:absolute;inset:0}.bg-overlay:before{content:"";background-color:#242424}.bg-theme-overlay:before{content:"";background:#09c}.bg-navy-overlay:before{content:"";background:#1d2b40}.bg-gradient-overlay:before{content:"";background-image:linear-gradient(90deg,#09c 0%,#7431ff 100%)}[data-overlay="0"]:before{opacity:0}[data-overlay="1"]:before{opacity:.1}[data-overlay="2"]:before{opacity:.2}[data-overlay="3"]:before{opacity:.3}[data-overlay="4"]:before{opacity:.4}[data-overlay="5"]:before{opacity:.5}[data-overlay="6"]:before{opacity:.6}[data-overlay="7"]:before{opacity:.7}[data-overlay="8"]:before{opacity:.8}[data-overlay="9"]:before{opacity:.9}@media (max-width:768px){.section-top{padding-top:5rem}.hero-avatar-bottom{position:relative;bottom:-3rem}.scroll-down{bottom:10px;left:0;right:0}.scroll-down span{color:#09c;display:block}.scroll-down-circle{display:none}}@media (min-width:769px){.section-full>.section-full-exception,.section-full>.container:not(#homepage-container)>.row{min-height:calc(100vh - 20.8125rem)}.section-full .container>.row:before{min-height:inherit;content:""}.section-top{padding-top:13.3125rem}.scroll-down{bottom:50px;left:0;right:0}.scroll-down span{color:#09c;display:block}.scroll-down-circle{width:80px;height:80px;background:#fff;border-radius:50%;line-height:80px;position:absolute;bottom:-100px;left:50%;transform:translate(-50%);box-shadow:0 .2rem .8rem #24242426}}.btn{text-transform:uppercase;white-space:nowrap;padding:.75rem 2rem;font-size:11px;font-weight:700}.btn.btn-sm{padding:.485rem 1.2rem;font-size:10px;font-weight:700;line-height:1.6}.btn.btn-lg{padding:.965rem 2rem}.btn-pill{border-radius:5rem}.btn-theme{background:#09c;border:2px solid #09c;color:#fff!important}.btn-theme:hover{color:#fff;background:#069;border:2px solid #069}.btn-rv-blue{background:#09c;border:2px solid #09c;color:#fff!important}.btn-rv-blue:hover{color:#fff;background:#069;border:2px solid #069}.btn-outline{cursor:pointer;color:#242424;background:#fff;border:2px solid #e8e8e8;margin-left:2em}.btn-outline:hover{background:#242424;border-color:#242424;color:#fff!important}@media screen and (prefers-color-scheme:dark){.btn-outline{color:#fff;background:#000;border-color:#e8e8e8}.btn-outline:hover{border-color:#777}}.btn-outline-dark{color:#242424;background:0 0;border:2px solid #242424}.btn-outline-dark:hover{color:#fff;background:#242424;border-color:#242424}.btn-outline-light{color:#fff;background:0 0;border:2px solid #fff}.btn-outline-light:hover{color:#242424;background:#fff;border-color:#fff}.btn-solid-light{color:#242424;background:#fff;border:2px solid #fff}.btn-solid-light:hover{color:#fff;background:#09c;border-color:#09c}.btn-solid-dark{color:#fff;background:#242424;border:2px solid #242424}.btn-solid-dark:hover{color:#fff;background:#09c;border-color:#09c}.video-btn .video-play-icon,.video-btn span{display:inline-block}.video-btn .video-play-icon{width:46px;height:46px;text-align:center;color:#242424;cursor:pointer;background:#fff;border-radius:50%;line-height:46px;box-shadow:0 3px 6px #0000000d}.video-btn .video-play-icon i{font-size:12px;position:relative;top:0;left:2px}.video-btn .video-play-icon:hover i{color:#09c}.video-btn span{text-transform:uppercase;font-size:11px;font-weight:700;position:relative;left:10px}.video-play-btn-align-center{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.btn-read-more{display:inline-block;position:relative}.btn-read-more:hover{text-decoration:none}.btn-read-more:hover:after{right:-30px}@media (max-width:767px){.btn.btn-sm{padding:.4rem 1rem}.btn{padding:.5rem 1.3rem}.btn.btn-lg{padding:.7rem 1.4rem}}.accordion .card{border-color:#e8e8e8}.accordion .card p{color:#8c8c8c}.accordion .card-header{border-color:#e8e8e8;padding:0}.accordion .card-header h6{margin-bottom:0;font-size:16px;font-weight:400}.accordion .card-header a{cursor:pointer;color:#09c;background:#fff;border-radius:4px 4px 0 0;padding:1.2rem 1.5rem;display:block;position:relative}.accordion .card-header a:hover{color:#09c}.accordion .card-header .collapsed{color:#242424}.accordion .card-header .collapsed:after{content:""}.accordion .accordion-list{list-style:none}.accordion .accordion-list li{margin-bottom:.5rem}.accordion .accordion-list li a{color:#8c8c8c}.accordion .accordion-list li a i{font-size:14px}.accordion .accordion-list li a:hover{color:#09c;text-decoration:none}.accordion.accordion-style-1 .card-header a{color:#09c;background:#fff}.accordion.accordion-style-1 .card-header a:hover{color:#09c}.accordion.accordion-style-1 .card-header a:hover:after{color:#fff;background:#09c;border:1px solid #09c;transition:all .3s}.accordion.accordion-style-1 .card-header .collapsed{color:#242424}.accordion.accordion-style-1 .card-header .collapsed:after{content:"";color:#8c8c8c;background:#fff;border:1px solid #ccc}.accordion.accordion-style-2 .card{border-radius:4px;margin-bottom:10px}.accordion.accordion-style-2 .card .card-header{background:0 0;border:none;margin-bottom:0}.accordion.accordion-style-2 .card .card-header a:after{content:"";font-family:fontawesome;font-size:14px;position:absolute;top:35%;right:20px}.accordion.accordion-style-2 .card .card-header a.collapsed{border-radius:4px;position:relative}.accordion.accordion-style-2 .card .card-header a.collapsed:after{content:""}.accordion.accordion-style-2 .card:not(:first-of-type):not(:last-of-type){border-radius:4px}.accordion.accordion-style-2 .card:first-of-type,.accordion.accordion-style-2 .card:not(:first-of-type):not(:last-of-type){border-bottom:1px solid #e8e8e8}.accordion.accordion-style-3 .card,.accordion.accordion-style-3 .card-header,.accordion.accordion-style-3 .card-header a{background:0 0;border:none}.accordion.accordion-style-3 .card-header a{color:#09c;padding:1.2rem 0 1.2rem 4rem}.accordion.accordion-style-3 .card-header a:before{width:40px;height:40px;text-align:center;color:#fff;content:"";background:#09c;border-radius:50%;font-family:fontawesome;font-size:14px;line-height:40px;position:absolute;top:8px;left:5px}.accordion.accordion-style-3 .card-header a:after{content:""}.accordion.accordion-style-3 .card-header .collapsed{color:#242424}.accordion.accordion-style-3 .card-header .collapsed:before{content:"";width:40px;height:40px;text-align:center;color:#242424;background:#fff;border:1px solid #f5f5f5;border-radius:50%;line-height:38px;box-shadow:0 3px 6px #0000000d}.accordion.accordion-style-3 .card-body{padding:1.25rem 0 1.25rem 4rem}.accordion.accordion-style-4 .card{border-radius:4px;margin-bottom:10px}.accordion.accordion-style-4 .card .card-header{background:0 0;border:none;margin-bottom:0;position:relative}.accordion.accordion-style-4 .card .card-header a{color:#242424;padding:2.5rem 1.5rem;font-weight:700}.accordion.accordion-style-4 .card .card-header a.collapsed{border-radius:4px;position:relative}.accordion.accordion-style-4 .card .card-header a.collapsed:after{content:""}.accordion.accordion-style-4 .card .card-header i{color:#09c;position:absolute;top:28px}.accordion.accordion-style-4 .card .card-header span{padding-left:3rem}.accordion.accordion-style-4 .card:not(:first-of-type):not(:last-of-type){border-radius:4px}.accordion.accordion-style-4 .card:first-of-type,.accordion.accordion-style-4 .card:not(:first-of-type):not(:last-of-type){border-bottom:1px solid #e8e8e8}.blurb i{margin-bottom:2rem;font-size:3rem;display:inline-block}.blurb p{color:#8c8c8c;padding-right:2rem}.blurb.text-right p{padding-left:2rem;padding-right:0}.blurb-border{background:#fff;border:1px solid #e8e8e8;border-radius:6px;padding:1.8rem}.blurb-border p{margin-bottom:.5rem;padding:0}@media (max-width:767px){.blurb i{font-size:2.5rem}.blurb-border{margin-bottom:1.5rem}}.list-group-right-arrow a{position:relative}.list-group-right-arrow a:after{content:"";width:25px;height:25px;text-align:center;border:1px solid #e8e8e8;border-radius:50%;padding-left:2px;font-family:fontawesome;font-size:14px;line-height:23px;position:absolute;top:30%;right:20px}.list-group-right-arrow a:hover:after{color:#fff;background:#09c;border-color:#09c;transition:all .3s}.list-group-right-arrow .list-group-item.active{color:#09c;background:#fff;border-color:#e8e8e8}.list-group-right-arrow .list-group-item.active:after{color:#fff;background:#09c;border-color:#09c}.list-group-right-arrow-on-hover a:after{opacity:0;width:30px;height:30px;border:3px solid #fff;line-height:25px;top:33%;right:13px}.list-group-right-arrow-on-hover a:hover:after{opacity:1;width:30px;height:30px;border:3px solid #fff;line-height:25px;right:-13px}.list-group-right-arrow-on-hover .list-group-item.active:after{opacity:1;width:30px;height:30px;border:3px solid #fff;line-height:25px;right:-13px}.list-group .list-group-item h6{color:#242424}.list-group .list-group-item:hover h6{color:#09c}.list-group-gap .list-group-item{border-radius:6px;margin-bottom:10px;padding:1.8rem 1.25rem}@media (prefers-color-scheme:dark){.list-group-item{color:#fff;background-color:#1b1b1b;border-color:#414141}}.custom-list{padding:0;list-style:none}.custom-list li{padding:.8rem 0}.custom-list li a{color:#242424}.custom-list li a:hover{color:#09c;text-decoration:none}.custom-list-border li{border-bottom:1px solid #e8e8e8}.custom-list-border li:first-child{border-top:1px solid #e8e8e8}@media (prefers-color-scheme:dark){.list-group-item{color:#fff;background-color:#1b1b1b;border-color:#414141}}.clients-thumb{width:100%;max-width:10rem;height:auto;opacity:.5;margin-left:auto;margin-right:auto}.clients-thumb:hover{opacity:1}.dot-style-1.owl-theme .owl-dots .owl-dot span{width:6px;height:6px;background:#242424;transition:all .3s}.dot-style-1.owl-theme .owl-dots .owl-dot.active span{transform:scale(1.5)}.dot-style-2.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;background:#ccc;transition:all .3s}.dot-style-2.owl-theme .owl-dots .owl-dot.active span{width:20px;height:10px;background:#09c;margin:5px 3px}.owl-carousel.text-center .owl-stage{display:inline-block}.carousel-highlighter.owl-carousel .owl-item{opacity:.2}.carousel-highlighter.owl-carousel .owl-item .card-img-overlay{opacity:0}.carousel-highlighter.owl-carousel .owl-item.center,.carousel-highlighter.owl-carousel .owl-item.center .card-img-overlay{opacity:1}.carousel-zoom-img .owl-stage-outer{overflow:visible}.carousel-zoom-img .owl-item .item h6{opacity:0}.carousel-zoom-img .owl-item.center .item{z-index:100;position:relative;transform:scale(1.2)}.carousel-zoom-img .owl-item.center .item h6{opacity:1}.carousel-zoom-img .owl-dots{margin-top:4rem}.owl-theme .owl-nav,.owl-theme .owl-nav.disabled+.owl-dots{margin-top:30px}.nav-circle.owl-theme .owl-nav [class*=owl-],.nav-circle-light.owl-theme .owl-nav [class*=owl-],.nav-circle-solid-light.owl-theme .owl-nav [class*=owl-]{width:50px;height:50px;text-align:center;color:#8c8c8c;border:1px solid #ccc;border-radius:50%;margin-bottom:2rem;font-size:12px;line-height:50px;position:relative}.nav-circle.owl-theme .owl-nav [class*=owl-]:hover,.nav-circle-light.owl-theme .owl-nav [class*=owl-]:hover,.nav-circle-solid-light.owl-theme .owl-nav [class*=owl-]:hover{color:#fff;background:#242424;border-color:#242424}.nav-circle-light.owl-theme .owl-nav [class*=owl-]:hover{color:#242424;background:#fff;border-color:#fff}.nav-circle-solid-light.owl-theme .owl-nav [class*=owl-]{color:#242424;background:#fff;border-color:#fff}.nav-circle-solid-light.owl-theme .owl-nav [class*=owl-]:hover{color:#fff;background:#09c;border-color:#09c}.nav-round.owl-theme .owl-nav [class*=owl-]{width:40px;height:90px;text-align:center;color:#fff;background:#0000004d;border-radius:6px;margin-bottom:2rem;font-size:12px;line-height:90px;position:relative}.nav-round.owl-theme .owl-nav [class*=owl-]:hover{background:#242424}.nav-round.owl-carousel .owl-nav .owl-prev,.nav-round.owl-carousel .owl-nav .owl-next{margin-top:-90px;position:absolute;top:50%}.nav-round.owl-carousel .owl-nav .owl-prev{border-radius:0 6px 6px 0;left:-5px}.nav-round.owl-carousel .owl-nav .owl-next{border-radius:6px 0 0 6px;right:-5px}.custom-testimonial.owl-theme .owl-nav{margin-top:0;bottom:2%}.custom-testimonial.owl-theme .owl-nav [class*=owl-]{width:35px;height:35px;text-align:center;color:#8c8c8c;border:1px solid #ccc;border-radius:50%;font-size:12px;line-height:35px;position:relative}.custom-testimonial.owl-theme .owl-nav [class*=owl-]:hover{color:#fff;background:#242424;border-color:#242424}.owl-carousel .owl-item img{width:auto}@media (min-width:1025px){.nav-circle.owl-carousel .owl-nav .owl-prev,.nav-circle.owl-carousel .owl-nav .owl-next,.nav-circle-light.owl-carousel .owl-nav .owl-prev,.nav-circle-light.owl-carousel .owl-nav .owl-next,.nav-circle-solid-light.owl-carousel .owl-nav .owl-prev,.nav-circle-solid-light.owl-carousel .owl-nav .owl-next,.nav-inside.owl-carousel .owl-nav .owl-prev,.nav-inside.owl-carousel .owl-nav .owl-next{margin-top:-50px;position:absolute;top:50%}.nav-circle.owl-carousel .owl-nav .owl-prev,.nav-circle-light.owl-carousel .owl-nav .owl-prev,.nav-circle-solid-light.owl-carousel .owl-nav .owl-prev{left:-8%}.nav-circle.owl-carousel .owl-nav .owl-next,.nav-circle-light.owl-carousel .owl-nav .owl-next,.nav-circle-solid-light.owl-carousel .owl-nav .owl-next{right:-8%}.nav-inside.owl-carousel .owl-nav .owl-prev,.nav-inside.owl-carousel .owl-nav .owl-prev{left:3%}.nav-inside.owl-carousel .owl-nav .owl-next,.nav-inside.owl-carousel .owl-nav .owl-next{right:3%}.custom-testimonial.owl-theme .owl-nav{z-index:100;margin-top:0;position:absolute;bottom:8%;right:11%}}.t-star-icon{font-size:8px;position:relative;bottom:2px}.justify-content-between .card-arrow-icon{width:25px;height:25px;text-align:center;border:1px solid #ddd;border-radius:50%;line-height:25px;transition:all .3s;position:relative}.justify-content-between .card-arrow-icon:after{content:"";font-family:fontawesome;font-size:14px;position:absolute;top:-1px;left:9px}.justify-content-between>a{text-decoration:none}.justify-content-between>a:hover+.card-arrow-icon{color:#fff;background:#09c;border-color:#09c}.card-img-overlay{top:auto;left:auto;right:auto}.box-hover,img.box-hover{transition:top .2s,box-shadow .2s;position:relative;top:0;box-shadow:0 0 #0000}.box-hover:hover,img.box-hover:hover{top:-.5rem;box-shadow:0 .2rem .8rem #24242426}@media (min-width:768px){.card.flex-md-row .card-img{object-fit:cover;border-radius:.375rem 0 0 .375rem}.card.flex-md-row .card-img-right{object-fit:cover;border-radius:0 .375rem .375rem 0}}@media (max-width:991.98px){.card.flex-column .card-img{border-radius:.375rem .375rem 0 0}.card.flex-md-row .card-img-right{border-radius:0 0 .375rem .375rem}}.form-control,.custom-select,.custom-file,.custom-file-input,.custom-file-label{height:calc(2.25rem + 12px);border:1px solid #e8e8e8}.form-control:focus,.custom-select:focus,.custom-file:focus,.custom-file-input:focus,.custom-file-label:focus{box-shadow:none}@media screen and (prefers-color-scheme:dark){.form-control,.form-control:focus{color:#fff;background-color:#1b1b1b;border-color:#414141}}.form-inline .form-control{height:calc(2.25rem + 8px)}.custom-file{border:none}.custom-file-label{padding:.65rem .75rem}.custom-file-label:after{height:2.85rem;padding:inherit;background:#fafafa;border-radius:0 .15rem .15rem 0}.icon-field,.icon-field-right{position:relative}.icon-field i,.icon-field-right i{user-select:none;cursor:default;color:#8c8c8c;position:absolute}.icon-field i{top:15px;left:15px}.icon-field input{padding-left:45px}.icon-field-right i{top:15px;right:15px}.icon-field-right input{padding-right:45px}.custom-control-label:before,.custom-control-label:after{width:1.3rem;height:1.3rem;top:.1rem;left:-1.5rem}.custom-control-label:before{border:1px solid #e8e8e8}.custom-control-label{padding-left:10px}.custom-switch .custom-control-label:before{width:40px;pointer-events:all;height:24px;background:#e8e8e8;border-radius:5rem;left:-2.25rem}.custom-switch .custom-control-label:after{width:calc(1.4rem - 2px);height:calc(1.4rem - 2px);background-color:#fff;border-radius:5rem;top:calc(.25rem - 1px);left:calc(3px - 2.25rem)}.custom-switch .custom-control-input:checked~.custom-control-label:after{transform:translate(.95rem)}.custom-switch .custom-control-label{padding-left:20px}.custom-file-input:focus~.custom-file-label,.custom-control-input:focus~.custom-control-label:before{box-shadow:none}.custom-control-input:checked~.custom-control-label:before,.custom-control-input:focus:not(:checked)~.custom-control-label:before{border:1px solid #e8e8e8}.custom-select{background:#fff url(select-arrow.b8e89c0c.svg) right .75rem center/8px 10px no-repeat}.login-content{color:#fff;text-align:center;width:100%;padding:2rem;position:absolute;top:50%;transform:translateY(-50%)}.login-circle-logo{width:80px;height:80px;background:#fff;border-radius:50%;line-height:80px;display:inline-block;box-shadow:0 .2rem .8rem #24242426}.c-form-content,.coming-soon-social{color:#fff;text-align:center;width:100%;padding:3rem;position:absolute;bottom:3%}.coming-soon-social{left:0}@media (max-width:991px){.coming-soon-social{margin-top:3rem;padding:0;position:relative}}@media (max-width:767px){.form-inline .form-control{height:2.25rem}}.steps-solid,.steps-dashed,.steps-dashed-light{width:150px;height:150px;text-align:center;background:#fff;border:2px solid #e8e8e8;border-radius:50%;line-height:150px;display:inline-block;position:relative}.steps-solid:after,.steps-dashed:after,.steps-dashed-light:after{content:"";width:100px;border-bottom:1px dashed #ccc;position:absolute;top:50%;right:-110%}.steps-solid i,.steps-dashed i,.steps-dashed-light i{line-height:150px}.steps-solid .step-number,.steps-dashed .step-number,.steps-dashed-light .step-number{color:#fff;background:#09c;border:3px solid #fff;border-radius:30px;padding:2px 10px;font-size:12px;font-weight:700;line-height:normal;position:absolute;top:10px;right:5px}.steps-solid.step-last:after,.steps-dashed.step-last:after,.steps-dashed-light.step-last:after{border-bottom:none}.steps-dashed{background:0 0;border:2px dashed #ccc}.steps-dashed-light{background:0 0;border:2px dashed #fff}.steps-dashed-light i{color:#fff}.steps-dashed-light:after{border-bottom:2px dashed #fff}.steps-dashed-light+.steps-info{color:#fff}.steps-info{padding:0 2rem}@media (max-width:1024px){.steps-solid:after,.steps-dashed:after,.steps-dashed-light:after{width:100%;top:50%;right:-110%}}@media (max-width:991px){.steps-solid:after,.steps-dashed:after,.steps-dashed-light:after{width:55%;right:-60%}}@media (max-width:767px){.steps-solid,.steps-dashed,.steps-dashed-light{width:100px;height:100px;line-height:100px}.steps-solid i,.steps-dashed i,.steps-dashed-light i{line-height:100px}.steps-solid:after,.steps-dashed:after,.steps-dashed-light:after{border-bottom:none}.steps-solid .step-number,.steps-dashed .step-number,.steps-dashed-light .step-number{right:-15px}.steps-info{margin-bottom:2rem}}.block-image{width:100%;height:100%;z-index:0;top:0;left:0}img.block-image{object-fit:cover}.block-image:not([class*=absolute]){position:absolute}.img-caption{width:70%;background:#ffffffe6;border-radius:0 .375rem .375rem 0;padding:1.5rem;position:absolute;bottom:10%;left:0}@media (min-width:1025px){.parallax-img{background-attachment:fixed}}@media (max-width:767px){.img-caption{padding:1rem}}.custom-progress{height:2px;box-shadow:none;background:#e8e8e8;border-radius:0;margin-top:4rem;position:relative}.custom-progress .progress-bar .skills-info{color:#242424;text-align:left;font-size:14px;position:relative;top:-20px}.custom-progress .progress-bar span{float:right;color:#242424;line-height:normal;position:relative;bottom:0}.custom-progress:first-child{margin-top:1.5rem}.custom-progress.progress{overflow:visible}.custom-progress.dark-progress .progress-bar,.custom-progress-inside.dark-progress .progress-bar{background:#242424}.progress-light-txt .progress-bar .skills-info,.progress-light-txt .progress-bar span{color:#fff}.custom-progress-inside{height:30px;background:#e8e8e8;margin-top:2rem}.custom-progress-inside .progress-bar .skills-info{color:#fff;text-align:left;padding:0 1rem;font-size:14px;position:relative;top:0}.custom-progress-inside .progress-bar span{float:right;color:#fff;line-height:normal;position:relative;bottom:0}.custom-progress-inside:first-child{margin-top:0}.nav.nav-group{display:inline-block}.nav.nav-group>li{text-align:center;float:left;margin:0 auto}.nav.nav-group>li .nav-link{color:#242424;padding:1rem 2rem;display:block}@media screen and (prefers-color-scheme:dark){.nav.nav-group>li .nav-link{color:#fff}}.nav.nav-group li a{background:#f9f9f9;border:1px solid #e8e8e8;margin-right:-1px}@media screen and (prefers-color-scheme:dark){.nav.nav-group li a{color:#fff;background-color:#000;border:1px solid #2f2f2f}}.nav.nav-group li a.active{color:#09c;background:#fff}@media screen and (prefers-color-scheme:dark){.nav.nav-group li a.active{background-color:#000}}.nav.nav-group li:first-child a{border-radius:30px 0 0 30px}.nav.nav-group li:last-child a{border-radius:0 30px 30px 0}.nav-line{border-bottom:1px solid #e8e8e8}.nav-line>li .nav-link{color:#242424;border-bottom:1px solid #0000;padding:1.5rem 3rem;display:block;position:relative;bottom:-1px}.nav-line>li a.active{color:#09c;border-bottom:1px solid #242424}.nav-vertical{border-right:1px solid #e8e8e8}.nav-vertical .nav-link{color:#242424;border-right:1px solid #0000;padding:1rem;display:block;position:relative;right:-1px}.nav-vertical i{position:relative;top:5px}.nav-vertical a.active{color:#09c;border-right:1px solid #242424}@media (max-width:1024px){.nav.nav-group>li .nav-link,.nav.nav-line>li .nav-link{padding:.6rem 1.5rem}}@media (max-width:767px){.nav-vertical{margin-bottom:2rem}}@media screen and (prefers-color-scheme:dark){.nav-tabs{border-color:#777}.nav-tabs .nav-link{color:#fff!important}.nav-tabs .nav-link.active{background-color:inherit;border-color:#777}}.vl-custom-table{border-spacing:0 1em;border-collapse:separate}.vl-custom-table h6{color:#616161;margin-top:0;padding-top:0;font-size:16px}.vl-custom-table thead th{vertical-align:middle;border-bottom:none;padding:.5rem 1.75rem}.vl-custom-table th,.vl-custom-table td{vertical-align:middle;border-top:none;font-family:Nunito,sans-serif}.vl-custom-table td:first-child{border-left:1px solid #e8e8e8;border-top-left-radius:10px;border-bottom-left-radius:10px}.vl-custom-table td:last-child{border-right:1px solid #e8e8e8;border-top-right-radius:10px;border-bottom-right-radius:10px}.vl-custom-table tbody td{background:#fff;border-top:1px solid #e8e8e8;border-bottom:1px solid #e8e8e8;padding:1.75rem}@media screen and (prefers-color-scheme:dark){.vl-custom-table h6{color:#777}.vl-custom-table td:first-child,.vl-custom-table td:last-child{border-color:#414141}.vl-custom-table tbody .report-row-header>td{background-color:#000;border-color:#414141}.vl-custom-table tbody .report-output-row>td{color:#fff;background-color:#000}.vl-custom-table tbody .report-output-row>td .report-view-box{color:#fff}.vl-custom-table tbody td{background-color:inherit}}.table-striped td,.table-striped th{vertical-align:middle}.table-striped tbody tr:nth-of-type(2n+1){background-color:#00000006}.table thead th{border-bottom-width:1px}.table .btn{white-space:nowrap}@media screen and (prefers-color-scheme:dark){.table thead,.table td{color:#fff}}.team-card{cursor:pointer;position:relative;overflow:hidden;box-shadow:0 8px 16px #0000001a}.team-card:hover{transition:all .3s;box-shadow:0 8px 16px #0003}@media screen and (prefers-color-scheme:dark){.team-card{color:#fff;background-color:#000}}.team-info .top-section{flex-direction:row;display:flex}.team-info .top-section .profile-img{width:200px;height:200px;background-color:#efefef;background-size:cover;margin-bottom:24px;margin-right:24px}.team-info .top-section .team-title p.team-position{margin-bottom:.5rem;font-size:14px}.team-info .top-section .team-social-links a{display:inline-block}@media (max-width:568px){.team-info .top-section{flex-direction:column;margin-bottom:16px}.team-info .top-section .profile-img{margin:0 auto 24px}}.team-info .modal-header{border-bottom:none;padding-bottom:0}@media screen and (prefers-color-scheme:dark){.team-info{color:#fff;background-color:#000}}.social-links a{color:#8c8c8c;margin-right:15px;display:inline-block}.social-links a:hover{color:#09c}@-webkit-keyframes blink{0%{opacity:1}50%{opacity:0}to{opacity:1}}@keyframes blink{0%{opacity:1}50%{opacity:0}to{opacity:1}}.typist-blink:after{height:26px;content:" ";border-right:2px solid;margin-left:3px;margin-right:7px;animation:blink 1s step-start infinite;display:inline-block;position:relative;top:3px}@media (max-width:667px){.typist-blink:after{height:22px;top:2px}}.typist-blink>.selectedText{display:none}.typist-mark>.selectedText{color:#fff;background-color:#242424;font-style:normal}@media screen and (max-width:1080px) and (min-width:768px){.firefly-typist-header{min-height:180px}}@media screen and (max-width:767px) and (min-width:668px){.firefly-typist-header{min-height:102px}}@media screen and (max-width:667px){.firefly-typist-header{min-height:124px}}.count-block{width:150px;height:150px;text-align:center;margin:0 20px;display:inline-block}.count-block h2{margin:2.5rem 0 0;font-weight:700}.count-block span{font-size:16px}.count-solid-light .count-block{background:#fff;border:1px solid #e8e8e8;margin-bottom:20px}.count-solid-dark .count-block{background:#242424;margin-bottom:20px}.count-solid-dark .count-block h2,.count-solid-dark .count-block span{color:#fff}.circle .count-block{border-radius:50%}.round .count-block{border-radius:6px}@media screen and (max-width:767px){.count-block{width:100px;height:100px}.count-block h2{margin:1.5rem 0 0}}.portfolio-filter{margin-bottom:50px;padding:0 1rem;list-style:none}.portfolio-filter li{margin:0 20px;font-family:Lora,serif;display:inline-block;position:relative}.portfolio-filter li a{color:#8c8c8c;text-transform:capitalize;font-size:16px;text-decoration:none}.portfolio-filter li a:hover{color:#242424}.portfolio-filter li:after{content:"/";color:#8c8c8c;position:absolute;top:0;right:-30px}.portfolio-filter li:last-child:after{content:" "}.portfolio-filter li.active a{color:#242424}.portfolio-grid .portfolio-item{float:left}.portfolio-grid .portfolio-item a{text-decoration:none}.portfolio-grid .portfolio-item a:focus{outline:none}.portfolio-grid .portfolio-item .portfolio-image{display:block;position:relative}.portfolio-grid .portfolio-item .portfolio-image img{width:100%;height:auto;display:block}.portfolio-grid .portfolio-item .portfolio-image .portfolio-hover-title{opacity:0;background-color:#242424e6;justify-content:center;align-items:center;margin:0;padding:30px;transition:all .3s;position:absolute;inset:0}.portfolio-grid .portfolio-item .portfolio-image .portfolio-hover-title .portfolio-content{width:100%;text-align:left;transition:all .3s;position:absolute;bottom:2rem;left:2rem}.portfolio-grid .portfolio-item .portfolio-image .portfolio-hover-title .portfolio-content h6{color:#fff;margin-bottom:.2rem;font-size:16px}.portfolio-grid .portfolio-item .portfolio-image .portfolio-hover-title .portfolio-content .portfolio-category span{color:#ccc;margin-right:5px;font-family:Lora,serif;font-size:14px}.portfolio-grid .portfolio-item:hover .portfolio-hover-title{opacity:1}.portfolio-grid .portfolio-title{margin:5% 0}.portfolio-grid .portfolio-title .portfolio-content h6{color:#242424;margin-bottom:.2rem}.portfolio-grid .portfolio-title .portfolio-content span{color:#8c8c8c;font-family:Lora,serif}.portfolio-grid.grid-2 .portfolio-item{width:50%}@media (max-width:768px){.portfolio-grid.grid-2 .portfolio-item{width:50%}}@media (max-width:568px){.portfolio-grid.grid-2 .portfolio-item{width:100%}}.portfolio-grid.grid-3 .portfolio-item{width:33.33%}@media (max-width:768px){.portfolio-grid.grid-3 .portfolio-item{width:50%}}@media (max-width:568px){.portfolio-grid.grid-3 .portfolio-item{width:100%}}.portfolio-grid.grid-4 .portfolio-item{width:25%}@media (max-width:768px){.portfolio-grid.grid-4 .portfolio-item{width:50%}}@media (max-width:568px){.portfolio-grid.grid-4 .portfolio-item{width:100%}}.portfolio-grid.grid-4 .portfolio-item .portfolio-content h6{font-size:16px}.portfolio-grid.grid-4 .portfolio-item .portfolio-content span{font-size:14px}.portfolio-grid.grid-5 .portfolio-item{width:20%}@media (max-width:768px){.portfolio-grid.grid-5 .portfolio-item{width:50%}}@media (max-width:568px){.portfolio-grid.grid-5 .portfolio-item{width:100%}}.portfolio-grid.grid-5 .portfolio-item .portfolio-content h6,.portfolio-grid.grid-5 .portfolio-item .portfolio-content span{font-size:14px}.portfolio-grid.grid-2.gutter{margin-right:-2%}.portfolio-grid.grid-2.gutter .portfolio-item{width:48%;margin-bottom:2%;margin-right:2%}@media (max-width:768px){.portfolio-grid.grid-2.gutter .portfolio-item{width:48%}}@media (max-width:568px){.portfolio-grid.grid-2.gutter .portfolio-item{width:98%}}.portfolio-grid.grid-3.gutter{margin-right:-2%}.portfolio-grid.grid-3.gutter .portfolio-item{width:31.33%;margin-bottom:2%;margin-right:2%}@media (max-width:768px){.portfolio-grid.grid-3.gutter .portfolio-item{width:48%}}@media (max-width:568px){.portfolio-grid.grid-3.gutter .portfolio-item{width:98%}}.portfolio-grid.grid-4.gutter{margin-right:-2%}.portfolio-grid.grid-4.gutter .portfolio-item{width:23%;margin-bottom:2%;margin-right:2%}@media (max-width:768px){.portfolio-grid.grid-4.gutter .portfolio-item{width:48%}}@media (max-width:568px){.portfolio-grid.grid-4.gutter .portfolio-item{width:98%}}.portfolio-grid.grid-5.gutter{margin-right:-2%}.portfolio-grid.grid-5.gutter .portfolio-item{width:18%;margin-bottom:2%;margin-right:2%}@media (max-width:768px){.portfolio-grid.grid-5.gutter .portfolio-item{width:48%}}@media (max-width:568px){.portfolio-grid.grid-5.gutter .portfolio-item{width:98%}}.portfolio-masonry .portfolio-title{padding-left:3%}.portfolio-masonry.gutter .portfolio-title{padding-left:0}.portfolio-grid.gutter .portfolio-item .portfolio-image .portfolio-hover-title,.portfolio-masonry.gutter .portfolio-item .portfolio-image .portfolio-hover-title,.portfolio-grid.gutter img,.portfolio-masonry.gutter img{border-radius:6px}.isotope-item{z-index:2}.isotope-hidden.isotope-item{pointer-events:none;z-index:1}.isotope,.isotope .isotope-item{transition-duration:.8s}.isotope{transition-property:height,width}.isotope .isotope-item{transition-property:transform,opacity}.isotope.no-transition,.isotope.no-transition .isotope-item,.isotope .isotope-item.no-transition{transition-duration:0s}.isotope.infinite-scrolling{transition:none}.twitter-feed-style{background:#fff;border:1px solid #e8e8e8;position:relative}.twitter-feed-style:after{content:"";color:#e8e8e8;font-family:FontAwesome;font-size:24px;position:absolute;top:1rem;right:1.5rem}.twitter-feed-style ul{margin-bottom:0;padding:0;list-style:none}.twitter-feed-style ul li{padding:2rem;position:relative;overflow:hidden}.twitter-feed-style .user{width:18%;float:left;margin-bottom:.928571em}.twitter-feed-style .user img{max-width:80%;height:auto;border-radius:50%}.twitter-feed-style .user [data-scribe=component\:author]{margin-left:1.3rem;position:absolute;top:10%;left:18%}.twitter-feed-style .user [data-scribe=component\:author] a{text-decoration:none}.twitter-feed-style .user [data-scribe=component\:author] span{display:block}.twitter-feed-style .user [data-scribe=component\:author] [data-scribe=element\:name]{color:#242424;font-weight:700}.twitter-feed-style .user [data-scribe=component\:author] [data-scribe=element\:screen_name]{color:#8c8c8c;font-size:14px}.twitter-feed-style .tweet{color:#8c8c8c;word-break:break-all;margin-top:4rem;margin-bottom:.464286em}.twitter-feed-style .tweet a{margin:0 3px}.twitter-feed-style .tweet,.twitter-feed-style .timePosted{width:82%;float:right}.twitter-feed-style .timePosted{margin-bottom:0;font-size:14px}.twitter-feed-style .timePosted a{color:#8c8c8c}.twitter-feed-style .interact{display:none}.twitter-feed-alt .user [data-scribe=component\:author]{display:none}.twitter-feed-alt .tweet{margin-top:0}.twitter-feed-alt:after{content:""}.floating-search-wrap{position:fixed;top:40%;left:3%}.floating-search-wrap a{color:#242424;margin-bottom:1.5rem;text-decoration:none;display:block}.floating-search-wrap a:hover{color:#09c}.floating-social-link{position:fixed;top:70%;right:0%;transform:translate(30%)rotate(-90deg)}.floating-social-link a{color:#242424;margin-left:.5rem;text-decoration:none}.floating-social-link a:hover{color:#09c}.floating-social-link span{color:#ccc}@media (max-width:1249px){.floating-search-wrap,.floating-social-link{display:none}}.blog-post{border-bottom:1px solid #ccc;margin-bottom:3.5rem;padding-bottom:3rem}.meta a,.meta.text-white a{color:#616161}.meta .meta-separator,.meta.text-white .meta-separator{width:30px;border-top:1px solid #616161;margin:0 15px;display:inline-block;position:relative;bottom:3px}.meta.text-white a{color:#fff}.meta.text-white .meta-separator{border-top:1px solid #fff}.blog-widget .instagram-feed a{width:95px;height:95px}.blog-single p{margin-bottom:3rem}.single-post .comments-area,.single-post .comments{margin-bottom:5rem;display:block}.single-post .comments-area .comments-title,.single-post .comments .comments-title{margin-bottom:5rem;font-size:28px}.single-post .comments-area ol,.single-post .comments-area ul,.single-post .comments ol,.single-post .comments ul,.single-post .comments-area ol ol,.single-post .comments-area ol ul,.single-post .comments-area ul ol,.single-post .comments-area ul ul,.single-post .comments ol ol,.single-post .comments ol ul,.single-post .comments ul ol,.single-post .comments ul ul{list-style:none}.single-post .comment-list,.single-post .comments>ul{margin:0;padding:0;list-style:none}.single-post .comment-list li,.single-post .comments>ul li{margin-bottom:1rem}.single-post .comment-list li .comment-body,.single-post .comments>ul li .comment-body{border-bottom:1px solid #e8e8e8;margin-bottom:3rem;padding-bottom:1.5rem;position:relative}.single-post .comment-list .comment-meta,.single-post .comments>ul .comment-meta{margin-bottom:1rem}.single-post .comment-list .comment-meta .comment-author img,.single-post .comments>ul .comment-meta .comment-author img{width:100px;height:100px;float:left;border-radius:6px;margin-right:2rem}.single-post .comment-list .comment-meta .comment-author a,.single-post .comments>ul .comment-meta .comment-author a{font-size:16px;font-weight:700}.single-post .comment-list .comment-meta .comment-author .says,.single-post .comments>ul .comment-meta .comment-author .says{display:none}.single-post .comment-list .comment-meta .comment-metadata a,.single-post .comments>ul .comment-meta .comment-metadata a{color:#8c8c8c;font-size:14px}.single-post .comment-list .comment-content,.single-post .comments>ul .comment-content{overflow:hidden}.single-post .comment-list .reply,.single-post .comments>ul .reply{position:absolute;top:0;right:0}.single-post .comment-list .reply a,.single-post .comments>ul .reply a{color:#09c}.single-post .comment-list .reply a:hover,.single-post .comments>ul .reply a:hover{color:#242424}@media (max-width:991px){.single-post .comments-area .comments-title,.comment-reply-title{font-size:1.5rem}.single-post .comments-area .comments-title{margin-bottom:3rem}}@media (max-width:767px){.single-post .comments-area .comments-title,.comment-reply-title{font-size:1.2rem}.single-post .comments-area .comment-list .comment-meta .comment-author img{width:50px;height:auto}.blog-post{margin-bottom:1.5rem;padding-bottom:1.5rem}}.form-qty{height:calc(2.25rem + 8px)}.bd-toc{order:2;padding-top:1.5rem;padding-bottom:1.5rem;font-size:.875rem}@supports (position: sticky){.bd-toc{height:calc(100vh - 4rem);position:sticky;top:4rem;overflow-y:auto}}.section-nav{border-left:1px solid #eee;padding-left:0}.section-nav ul{padding-left:1rem}.toc-entry{display:block}.toc-entry a{color:#77757a;padding:.125rem 1.5rem;display:block}.toc-entry a:hover{color:#007bff;text-decoration:none}.bd-sidebar{order:0}@media (min-width:768px){.bd-sidebar{border-right:1px solid #0000001a}@supports (position: sticky){.bd-sidebar{z-index:1000;height:calc(100vh - 4rem);position:sticky;top:4rem}}}@media (min-width:1200px){.bd-sidebar{flex:0 320px}}@media (prefers-color-scheme:dark){.bd-sidebar{border-right-color:#414141}}.bd-links{margin-left:-15px;margin-right:-15px;padding-top:1rem;padding-bottom:1rem}@media (min-width:768px){@supports (position: sticky){.bd-links{max-height:calc(100vh - 9rem);overflow-y:auto}}.bd-links{display:block!important}}.bd-search{border-bottom:1px solid #0000000d;margin-left:-15px;margin-right:-15px;padding:1rem 15px;position:relative}.bd-search .form-control:focus{border-color:#fc0;box-shadow:0 0 0 3px #ffcc0040}.bd-search-docs-toggle{color:#212529}@media screen and (prefers-color-scheme:dark){.bd-search-docs-toggle{color:#ccc}.bd-search-docs-toggle:hover{color:#e8e8e8}}.bd-sidenav{display:none}.bd-toc-link{color:#000000a6;padding:.25rem 1.5rem;font-weight:600;display:block}.bd-toc-link:hover{color:#000000d9;text-decoration:none}.bd-toc-link code{color:#e83e8c}.bd-toc-link.selected{color:#09c;font-weight:800}.bd-toc-link.selected:hover{color:#069}@media screen and (prefers-color-scheme:dark){.bd-toc-link{color:#fff}.bd-toc-link:hover{color:#ccc}}.bd-toc-item.active{margin-bottom:1rem}.bd-toc-item.active:not(:first-child){margin-top:1rem}.bd-toc-item.active>.bd-toc-link{color:#000000d9}.bd-toc-item.active>.bd-toc-link:hover{background-color:#0000}.bd-toc-item.active>.bd-sidenav{display:block}.bd-sidebar .nav>li>a{color:#000000a6;padding:.25rem 1.5rem;font-size:90%;display:block}.bd-sidebar .nav>li>a:hover{color:#000000d9;background-color:#0000;text-decoration:none}.bd-sidebar .nav>.active>a,.bd-sidebar .nav>.active:hover>a{color:#000000d9;background-color:#0000;font-weight:600}.navbar{flex-wrap:wrap;justify-content:space-between;align-items:center;padding:.5rem 1rem;display:flex;position:relative}.navbar>.container,.navbar>.container-fluid{flex-wrap:wrap;justify-content:space-between;align-items:center;display:flex}.navbar-brand{font-size:1.25rem;line-height:inherit;white-space:nowrap;margin-right:1rem;padding-top:.3125rem;padding-bottom:.3125rem;display:inline-block}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{flex-direction:column;margin-bottom:0;padding-left:0;list-style:none;display:flex}.navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-nav .dropdown-menu{float:none;position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;display:inline-block}.navbar-collapse{flex-grow:1;flex-basis:100%;align-items:center}.navbar-toggler{background-color:#0000;border:1px solid #0000;border-radius:.25rem;padding:.25rem .75rem;font-size:1.25rem;line-height:1}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50%/100% 100% no-repeat;display:inline-block}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-left:0;padding-right:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{left:auto;right:0}.navbar-expand-sm .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{flex-basis:auto;display:flex!important}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-left:0;padding-right:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{left:auto;right:0}.navbar-expand-md .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{flex-basis:auto;display:flex!important}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-left:0;padding-right:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{left:auto;right:0}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{flex-basis:auto;display:flex!important}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-left:0;padding-right:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{left:auto;right:0}.navbar-expand-xl .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{flex-basis:auto;display:flex!important}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{flex-flow:row;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-left:0;padding-right:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{left:auto;right:0}.navbar-expand .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{flex-basis:auto;display:flex!important}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:#000000e6}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:#000000e6}.navbar-light .navbar-nav .nav-link{color:#00000080}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:#000000b3}.navbar-light .navbar-nav .nav-link.disabled{color:#0000004d}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:#000000e6}.navbar-light .navbar-toggler{color:#00000080;border-color:#0000001a}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,")}.navbar-light .navbar-text{color:#00000080}.navbar-light .navbar-text a{color:#000000e6}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:#000000e6}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:#ffffff80}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:#ffffffbf}.navbar-dark .navbar-nav .nav-link.disabled{color:#ffffff40}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:#ffffff80;border-color:#ffffff1a}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,")}.navbar-dark .navbar-text{color:#ffffff80}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.bd-navbar{min-height:4rem;background-color:#fff;box-shadow:0 .5rem 1rem #0000000d,inset 0 -1px #0000001a}@media (max-width:991.98px){.bd-navbar{padding-left:.5rem;padding-right:.5rem}.bd-navbar .navbar-nav-scroll{max-width:100%;height:2.5rem;margin-top:.25rem;font-size:.875rem;overflow:hidden}.bd-navbar .navbar-nav-scroll .navbar-nav{white-space:nowrap;-webkit-overflow-scrolling:touch;padding-bottom:2rem;overflow-x:auto}}@media (min-width:768px){@supports (position: sticky){.bd-navbar{z-index:1071;position:sticky;top:0}}}.bd-navbar .navbar-nav .nav-link{color:#09c;padding-left:.5rem;padding-right:.5rem}.bd-navbar .navbar-nav .nav-link.active,.bd-navbar .navbar-nav .nav-link:hover{color:#069;background-color:#0000}.bd-navbar .navbar-nav .nav-link.active{font-weight:500}.bd-navbar .navbar-nav-svg{width:1rem;height:1rem;vertical-align:text-top;display:inline-block}.bd-navbar .dropdown-menu{font-size:.875rem}.bd-navbar .dropdown-item.active{color:#212529;background-color:#0000;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23292b2c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-position:.4rem .6rem;background-repeat:no-repeat;background-size:.75rem .75rem;font-weight:500}@media screen and (prefers-color-scheme:dark){.bd-navbar{color:#fff;background-color:#0f0f0f;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}}.bg-primary{background:#09c}.bg-success{background:#96be5d}.bg-warning{background:#fab63f}.bg-info{background:#18b9d4}.bg-danger{background:#ef5a5a}.text-primary{color:#09c}.text-purple{color:#7431ff}.text-muted{color:#8c8c8c!important}.rounded{border-radius:6px!important}.card{border-color:#e8e8e8;border-radius:6px}.card-img-top{border-top-left-radius:6px;border-top-right-radius:6px}.card-footer{background:0 0;border-top:1px solid #0000000f;padding:1.1rem 1.25rem}.bg-dark .card-footer{border-top:1px solid #ffffff0f}.alert-secondary{color:#242424;background-color:#f4f5f7;border-color:#e8e8e8}.alert-warning{color:#fab63f;background-color:#fef8ec;border-color:#fab63f}.alert-success{color:#7dad14;background-color:#f3f8ed;border-color:#7dad14}.alert-danger{color:#ef5a5a;background-color:#fdeced;border-color:#ef5a5a}.alert-primary{color:#09c;background-color:#eaf4ff;border-color:#09c}.alert-solid-secondary{color:#242424;background-color:#e8e8e8;border-color:#e8e8e8}.alert-solid-warning{color:#fff;background-color:#fab63f;border-color:#fab63f}.alert-solid-success{color:#fff;background-color:#7dad14;border-color:#7dad14}.alert-solid-danger{color:#fff;background-color:#ef5a5a;border-color:#ef5a5a}.alert-solid-primary{color:#fff;background-color:#09c;border-color:#09c}.list-group-item{color:#8c8c8c;border-color:#e8e8e8;padding:1.3rem 1.25rem}.badge{position:relative;bottom:1px}.custom-modal .modal-body{padding:2.5rem}.custom-modal .modal-content{border:none}.custom-modal .modal-header{padding:1rem}.custom-modal .modal-header .close{padding:.5rem 1rem}.modal-body{padding:1.8rem}.modal-header,.modal-footer{padding:1rem 1.8rem}@media screen and (prefers-color-scheme:dark){.modal-header{border-bottom-color:#414141}.modal-footer{border-top-color:#414141}}.modal-image{border-top-left-radius:.25rem;border-top-right-radius:.25rem;position:relative}.modal-image .close{width:50px;height:50px;opacity:1;text-shadow:none;background:#fff;border-radius:50%;line-height:50px;position:absolute;top:1.875rem;right:1.875rem}.modal-image .close:hover{color:#fff;opacity:1;background:#09c}@media (min-width:576px){.modal-dialog{max-width:600px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}.ls-2{letter-spacing:1rem}.ls-3{letter-spacing:2rem}.lh-35{line-height:35px}.lh-45{line-height:45px}.h60{height:60%}.h70{height:70%}.curve-bottom-1,.curve-bottom-right{clip-path:polygon(0 0,100% 0,100% 85%,70% 100%,0 85%)}.curve-top-bottom{clip-path:polygon(100% 6%,100% 100%,68% 94%,0% 100%,0 10%,28% 0)}.curve-bottom-center{clip-path:polygon(0 0,100% 0,100% 70%,50% 100%,0 70%)}.font-lora{font-family:Lora,serif}.font-weight-300{font-weight:300}.font-weight-400{font-weight:400}.font-weight-600{font-weight:600}.font-weight-700{font-weight:700}.font-weight-800{font-weight:800}.font-size-12{font-size:12px}.font-size-14{font-size:14px}.font-size-16{font-size:16px}.font-size-20{font-size:20px!important}.font-size-60{font-size:60px}.font-size-72{font-size:72px}.i-size-60{font-size:60px}.section-gray,.bg-gray{background-color:#e8e8e8}@media screen and (prefers-color-scheme:dark){.section-gray,.bg-gray{background-color:#2f2f2f}.text-dark{color:#e8e8e8!important}}.bg-white{background:#fff}.bg-dark{background:#242424!important}.bg-dark hr{border-top:1px solid #ffffff80}@media screen and (prefers-color-scheme:dark){hr{border-top-color:#414141}}.bg-green-light{background:#d7f5e3}.bg-dark-alt{background:#303030}.bg-extra{background:#e5e8ec}.component-section{padding:4rem 0;position:relative;overflow:hidden}.show-markup-section{position:relative}.demo .btn{margin:0 .4rem 1rem}.title-separator{margin-bottom:4rem;position:relative}.title-separator:after{content:"";width:60px;height:2px;background:#fff;position:absolute;bottom:-2rem;left:0}.gradient-primary{background-image:linear-gradient(90deg,#09c 0%,#7431ff 100%)}.cta-img{background-position:50%;background-repeat:no-repeat;background-size:cover;position:relative;overflow:hidden}.border-light{border-color:#ffffff20!important}.custom-dropdown{border:none;box-shadow:0 1px 10px #97a4af26}.custom-dropdown .dropdown-item{font-size:12px}.custom-dropdown-sm{min-width:6rem}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.opacity-100{opacity:1}.avatar-sm{width:35px;height:35px}.avatar,.avatar-md{width:70px;height:70px}.avatar-lg{width:140px;height:140px}.icon-sm{font-size:28px}.icon-md{font-size:42px}.icon-lg{font-size:56px}.ft-tag{color:#fff;background:#09c;border-radius:30px;padding:3px 12px;font-size:11px;font-weight:700}.ft-inside-tl{position:absolute;top:1rem;left:1rem}.ft-inside-tr{position:absolute;top:1rem;right:1rem}.ft-inside-bl{position:absolute;bottom:1rem;left:1rem}.ft-inside-br{position:absolute;bottom:1rem;right:1rem}.ft-overflow-bl{border:2px solid #fff;position:absolute;bottom:-.8rem;left:1rem}.ft-overflow-br{border:2px solid #fff;position:absolute;bottom:-.8rem;right:1rem}.ft-overflow-bc{border:2px solid #fff;position:absolute;bottom:-.8rem;left:50%;transform:translate(-50%)}.ft-overflow-tl{border:2px solid #fff;position:absolute;top:2rem;left:-2rem}.ft-overflow-tr{border:2px solid #fff;position:absolute;top:2rem;right:-2rem}.ft-overflow-tc{border:2px solid #fff;position:absolute;top:-1rem;left:50%;transform:translate(-50%)}@media (max-width:991px){.component-section{padding:3rem 0}}@media (max-width:767px){.i-size-60{font-size:3rem}.lh-35,.lh-45{line-height:normal}.ls-2{letter-spacing:.5rem}.font-size-60{font-size:28px}.font-size-72{font-size:32px}.icon-md{font-size:2rem}.icon-lg{font-size:2.5rem}.border-sm-right-0{border-right:none!important}.curve-top-bottom,.curve-bottom-1,.curve-bottom-right{clip-path:polygon(0 0,100% 0,100% 100%,0 100%)}.btn-sm-block{width:100%;padding:.75rem 2rem;display:block}}@media (min-width:991px){.neg-mt-100{margin-top:-100px}.neg-mt-300{margin-top:-300px}.clab-shape{padding-bottom:13.5rem;overflow:hidden}.clab-shape:after{content:"ă";color:#1420f11a;font-size:1200px;font-weight:800;position:absolute;top:-35%;left:50%;transform:translate(-50%)}.clab-shape .container{z-index:1;position:relative}}.markup-example{position:relative}.markup-example .btn{z-index:2;padding:.385rem 1rem;line-height:normal;position:absolute;top:.5rem;right:.5rem}.markup-example pre[class*=language-]{background:#e8e8e8;border-radius:6px;padding:3rem 1rem 1rem}.component-section>button,.show-markup-section>button{z-index:1000;opacity:0;transition:opacity .2s linear;position:absolute;top:50%;right:.75rem;transform:translateY(-50%)}.component-section:hover>button,.show-markup-section:hover>button{opacity:1}.clip-txt{text-align:center;color:#0000;background-position:50%;background-size:cover;background-clip:text;-webkit-background-clip:text;font-size:15rem;font-weight:700;line-height:normal}@media (max-width:565px){.clip-txt{font-size:6rem}}@media (min-width:769px){.clip-txt{font-size:25rem}}.landing-slider .owl-carousel .owl-item img{width:100%}@media screen and (max-width:991px){.wow{visibility:visible!important;animation-name:none!important}}.buy-link{color:#fff;z-index:1200;text-transform:uppercase;text-align:center;background:#82b440;border-radius:0 5px 5px 0;padding:.6rem;font-size:12px;font-weight:700;transition:all .3s;position:fixed;top:30%;left:-5px}.buy-link:hover{color:#fff;text-decoration:none;left:0}html body{background-color:#fff}@media screen and (prefers-color-scheme:dark){html body{color:#fff;background-color:#000}}body.modal-open{overflow:hidden}.report-view-box{height:80vh;white-space:pre-wrap;cursor:default;overflow:hidden}.report-view-box>div{height:100%;max-width:1035px;margin:auto;overflow:auto}.report-view-box .split-view-container{display:flex;overflow:hidden}.report-view-box .split-view-container .solidity-coverage-container{width:100%;min-width:0;flex-direction:column;flex-grow:0;display:flex}.report-view-box .split-view-container .solidity-coverage-container .solidity-coverage{height:100%;overflow:auto}.report-view-box .split-view-container .solidity-coverage-container .message-box{height:25%}@media screen and (prefers-color-scheme:dark){.report-view-box .split-view-container .solidity-coverage-container .message-box table.table-light{color:#fff;background-color:#000}}.report-view-box .split-view-container .bytecode-coverage{max-width:25%;overflow:auto}.report-view-box .split-view-container .contract-explorer{width:25%;background-color:#fcfcfc;padding:8px 0;font-size:.9rem;overflow:auto}.report-view-box .split-view-container .contract-explorer>ul>li{cursor:pointer;padding:4px 8px;transition:background .3s}.report-view-box .split-view-container .contract-explorer>ul>li:hover{background:#ddd}.report-view-box .split-view-container .contract-explorer>ul>li.active{background:#8ed3f1}.report-view-box .split-view-container .contract-explorer>ul>li:first-child{font-size:1rem}.report-view-box .split-view-container .contract-explorer>ul>li:not(:first-child){border-left:1px solid #ccc;margin-left:.75rem}@media screen and (prefers-color-scheme:dark){.report-view-box .split-view-container .contract-explorer{color:#fff;background-color:#000}.report-view-box .split-view-container .contract-explorer>ul>li.active{background:#09c}}.report-view-box .split-view-container tr{border-bottom:2px solid #0000}.report-view-box .split-view-container tr:hover{cursor:pointer}.report-view-box .split-view-container tr.covered:hover{border-bottom:2px solid #91daa6}.report-view-box .split-view-container tr.weak-covered:hover{border-bottom:2px solid #d2da91}.report-view-box .split-view-container tr.not-covered:hover{border-bottom:2px solid #da919a}.report-view-box .split-view-container tr.active{filter:brightness(85%)}.report-view-box .split-view-container tr.covered.active{border-bottom:2px solid #91daa6}.report-view-box .split-view-container tr.weak-covered.active{border-bottom:2px solid #d2da91}.report-view-box .split-view-container tr.not-covered.active{border-bottom:2px solid #da919a}.report-view-box .split-view-container .has-highlight tr.text-muted.not-covered,.report-view-box .split-view-container .has-highlight tr.text-muted.covered,.report-view-box .split-view-container .has-highlight tr.text-muted.weak-covered,.report-view-box .split-view-container .has-highlight tr.text-muted tr,.report-view-box .split-view-container .has-highlight tr.text-muted td{background-color:inherit!important}.report-view-box .split-view-container .has-highlight tr.message-muted{display:none}.benefits{padding-bottom:48px}.has-highlighted>table tr:not(.highlighted) *{color:#ccc!important;background-color:inherit!important}pre[class*=language-]{background-color:inherit;padding:0}.coverage{height:100%;font-size:14px;overflow:auto}.coverage:not(.solidity-coverage){font-size:13px}.coverage tr td,.coverage tr th{white-space:nowrap;border:0;padding:0 0 0 1em;border-radius:0!important}.coverage tr td pre,.coverage tr th pre{background:inherit;margin:0;padding:0}.coverage tr th{border-bottom:1px solid #dfdfdf;font-size:16px}.coverage tr td.index,.coverage tr th.index{text-align:right;width:3em;border-right:1px solid #ccc;padding-right:1ch}.coverage tr td.index{background-color:#fafbfc}.coverage tr td.opcode{font-weight:600}.coverage tr td.hit-count{text-align:center}.coverage tr.covered,.coverage tr.covered td{background-color:#e6ffed}.coverage tr.covered td.index{background-color:#dbffe3}.coverage tr.not-covered,.coverage tr.not-covered td{background-color:#ffe6e8}.coverage tr.not-covered td.index{background-color:#ffdbdf}.coverage tr.weak-covered,.coverage tr.weak-covered td{background-color:#fcffe6}.coverage tr.weak-covered td.index{background-color:#fbffdb}@media screen and (prefers-color-scheme:dark){.coverage{color:#ccc}.coverage th{color:#fff}.coverage tr.not-covered td.index,.coverage tr.covered td.index{color:#ccc}.coverage tr th.index{border-color:#414141}.coverage tr td.index{background-color:#000;border-color:#414141}.coverage tr td.opcode{color:#ccc}.coverage tr.covered,.coverage tr.covered td{background-color:#295234}.coverage tr.covered td.index{background-color:#214129}.coverage tr.not-covered,.coverage tr.not-covered td{background-color:#692217}.coverage tr.not-covered td.index{background-color:#541b12}.coverage tr.weak-covered,.coverage tr.weak-covered td{background-color:#68360b}.coverage tr.weak-covered td.index{background-color:#512a09}}.coverage table{width:100%}.mouse-pointer{cursor:pointer}.wizard-grid div{padding:10px}.wizard-grid .btn-outline,.wizard-box .btn-outline{margin-left:0}a.wizard-link:visited{color:purple}.code{background-color:#fafbfc;padding:10px}@media screen and (prefers-color-scheme:dark){.code{color:#fff;background-color:#2f2f2f}}.code-block-selectors{color:#000;width:fit-content;background-color:#e5e5e5;border-radius:4px;margin-bottom:8px;padding:2px 12px;position:absolute;top:0;left:0}@media screen and (prefers-color-scheme:dark){.code-block-selectors{color:#fff;background-color:#616161}}.nav-item{cursor:pointer}.ns-form{grid-column-gap:1rem;grid-template-columns:75% 25%;display:grid}.btn-disabled{background:#fff;border:2px solid #e8e8e8;margin-left:2em;color:gray!important}#firefly-reports,#firefly-report{margin-bottom:100px}#firefly-reports thead tr th,#firefly-report thead tr th{text-align:center;padding:.5rem .75rem}#firefly-reports tbody .report-row-header td,#firefly-report tbody .report-row-header td{text-align:center}#firefly-reports tbody .report-row-header td .report-id,#firefly-report tbody .report-row-header td .report-id{color:#09c;text-decoration:underline}#firefly-reports tbody .report-row-header td .report-id:hover,#firefly-report tbody .report-row-header td .report-id:hover{color:#007aa3}#firefly-reports .center-image,#firefly-report .center-image{padding-bottom:0;padding-left:21px;padding-right:21px}.report-buttons>ul{align-items:center;margin:0;display:flex}.report-buttons>ul>li p{margin:0}.report-buttons>ul>li:not(:last-child){margin-right:1.5rem}.report-buttons>ul .dropdown{display:inline-block}.report-buttons>ul .dropdown.show{outline:2px solid #09c}.report-buttons>ul .dropdown img{height:2rem}.report-buttons>ul .dropdown img:hover{outline:1px solid #09c}.report-buttons>ul .dropdown-toggle:after{content:none}@media screen and (prefers-color-scheme:dark){.report-buttons>ul{color:#fff}.report-buttons>ul .dropdown-menu,.report-buttons>ul .dropdown-item{color:#fff;background-color:#000}.report-buttons>ul .dropdown-item:hover{color:#c2c2c2}}@media (prefers-color-scheme:dark){.dropdown-menu,.dropdown-item{color:#fff;background-color:#1b1b1b}.dropdown-item:hover{color:#fff;background-color:#2f2f2f}}.report-coverage-row td{position:relative}.report-coverage-row .report-container .fullscreen-btn{cursor:pointer;color:#09c;font-size:2rem;position:absolute;top:.5rem;right:2rem}.report-coverage-row .report-container.fullscreen{width:100%;height:100%;z-index:10;background-color:#000000e6;padding:2rem;transition:all .15s linear;position:fixed;top:0;left:0}.report-coverage-row .report-container.fullscreen .report-wrapper{height:100%;background-color:#fff;border-radius:.3rem;padding:2rem;animation-name:zoom;animation-duration:.6s;position:relative;overflow:auto}.report-coverage-row .report-container.fullscreen .report-wrapper .fullscreen-btn{position:fixed;top:2rem;right:2.8rem}.report-coverage-row .report-container.fullscreen .report-wrapper .report-view-box{height:calc(100vh - 256px)}@media screen and (prefers-color-scheme:dark){.report-coverage-row .report-container.fullscreen .report-wrapper{background-color:#000}.report-coverage-row .report-container.fullscreen .report-wrapper th{color:#fff}}.report-coverage-row .report-container.fullscreen .coverage,.report-coverage-row .report-container.fullscreen .split-view-container{max-width:initial}.introjs-hint.introjs-fixedhint{z-index:11}i.fa{margin:0 1ch}.expandable-title{padding:.3rem 0;transition:all .3s}.expandable-title:hover{cursor:pointer;color:#09c}.expandable-title:not(.contract-title){font-weight:400}.contract-title .contract-coverage{float:right}.contract-hint-trigger{text-align:center;display:block}.contract-hint-trigger:hover{cursor:pointer;color:#fc0}.contract-hint-trigger .contract-hint-trigger-hidden{display:none}.source-name{border-bottom:1px solid #ccc;font-size:12px}@media screen and (prefers-color-scheme:dark){.source-name{color:#fff;border-color:#414141}}.indent-2{padding-left:2ch}.btn-download-report{background-image:url(Firefly-Download-Icon.8094a4f0.png)}.btn-download-report:hover{background-image:url(Firefly-Download-Icon-Inverted.32636383.png)}.btn-copy-report-id{cursor:pointer;background-size:cover;display:inline-block;font-size:1rem!important}@media (min-width:1025px){#firefly-header:not(.sticky-nav)>.container>.row>.col-12{min-height:150px}.vlmenu>li:not(:last-child){margin-right:20px}.vlmenu>li>a{padding-bottom:0}.vlmenu li:hover{border-bottom:2px solid #fc0}.vlmenu li.active{border-bottom:2px solid #fc0}.vlmenu li>ul{z-index:1}#dashboard-submenu{position:relative}#dashboard-submenu>ul{z-index:0;box-shadow:none;width:260px;justify-content:space-between;display:flex;position:absolute;top:50px;right:0}#dashboard-submenu>ul>li{display:inline-block}#dashboard-submenu>ul>li>a{padding:0;display:inline-block}#dashboard-submenu>ul>li>a:hover{color:#000;background:0 0}}@media screen and (min-width:1025px) and (prefers-color-scheme:dark){#dashboard-submenu>ul>li>a:hover{color:#fff}}.breadcrumb{background-color:inherit}.breadcrumb-item+.breadcrumb-item:before{content:">"!important}div.table-responsive{padding:0 8px}#youtube-video{height:303.75px;width:540px;max-width:100%;background-color:#d7d7d7;justify-content:center;align-items:center;display:flex}video{width:100%!important;height:auto!important}.gif:hover{opacity:.7}.custom-control-input:checked~.custom-control-label:before{background-color:#09c}.divider-bar-closed{color:#fff;background:#09c}.divider-bar-closed:hover{background:#008ab8}.divider-bar-opened{background:#fc0}.divider-bar-opened:hover{background:#e6b800}.divider-bar{cursor:pointer;flex-shrink:0;justify-content:center;align-items:center;transition:background .2s ease-in-out;display:flex}.divider-bar span{letter-spacing:1px}@media screen and (prefers-color-scheme:dark){.divider-bar{color:#fff;background:#343434}.divider-bar:hover{background-color:#393939}}.divider-bar-vertical{width:1.3rem;flex-direction:column}.divider-bar-vertical span{writing-mode:vertical-lr;text-orientation:sideways}.divider-bar-vertical i{margin:1ch 0}.divider-bar-horizontal{height:1.3rem;flex-direction:row}#contact-links li:hover{cursor:pointer;border:none!important}#contact-links img{height:1.5rem}#firefly-profile .btn{margin:4px auto;padding:4px 1rem}.icon{color:#09c;font-size:2rem;transition:color .2s}.icon:hover{color:#069}.icon.active{color:#fc0}.icon.active:hover{color:#ccb400}@media screen and (prefers-color-scheme:dark){.introjs-tooltip{background-color:#000}.introjs-helperLayer{background-color:#414141e6}}.modal{width:100%;height:100%;background-color:#000000e6;display:none;position:fixed;top:0;left:0;overflow:auto}#email-modal{z-index:2000}.modal-content{width:80%;max-width:1024px;margin:auto;display:block}@media screen and (prefers-color-scheme:dark){.modal-content{color:#fff;background-color:#141414}}video.modal-content{margin-top:100px}#modal-caption{width:80%;max-width:700px;text-align:center;color:#ccc;margin:auto;padding:10px 0;display:block}.modal-content,#modal-caption{animation-name:zoom;animation-duration:.6s}@keyframes zoom{0%{transform:scale(0)}to{transform:scale(1)}}.close{color:#09c;z-index:99;font-size:50px;font-weight:700;transition:all .3s;position:absolute;top:15px;right:35px}.close:hover,.close:focus{color:#fc0;cursor:pointer;text-decoration:none}@media only screen and (max-width:1024px){.modal-content{width:100%}}#firefly-feedback{z-index:999;position:fixed;bottom:30px;right:30px}#firefly-feedback>picture>img{width:100px}#firefly-feedback img{cursor:pointer;opacity:.7;transition:opacity .3s}#firefly-feedback img:hover{opacity:1}#firefly-feedback .feedback-form{background:#fff;border-radius:4px;flex-direction:column;justify-content:space-evenly;padding:24px;display:flex;box-shadow:1px 2px 10px #0003}#firefly-feedback .feedback-form .fa-times{cursor:pointer;opacity:.5;transition:opacity .3s;position:absolute;top:25px;right:25px}#firefly-feedback .feedback-form .fa-times:hover{opacity:1}#firefly-feedback .feedback-form .feedback-rating{justify-content:space-evenly;display:flex}#firefly-feedback .feedback-form .feedback-rating>picture>img{height:120px;margin:4px 18px}#firefly-feedback .feedback-form .feedback-message{float:left;width:100%;height:150px;margin-top:10px;margin-bottom:10px;overflow:scroll}@media only screen and (max-width:767px){#firefly-feedback .feedback-form{position:fixed;bottom:8px;left:8px;right:8px}#firefly-feedback .feedback-form .feedback-rating>picture>img{height:100px}}@media screen and (prefers-color-scheme:dark){#firefly-feedback .feedback-form{color:#fff;background-color:#000}}#contact-links img{margin-right:1rem}#bytecodes,#solidity-files,#contract-links{margin-bottom:24px}.drop-area{text-align:center;height:64px;cursor:pointer;background-color:#f7f8fa;border-style:dashed;border-color:#616161;margin-top:0;margin-bottom:0}.drop-area:hover{background-color:#edf1f4}.drop-area p{margin:0;position:relative;top:50%;transform:translateY(-50%)}.drop-area.uploader{margin-bottom:0}@media screen and (prefers-color-scheme:dark){.drop-area{color:#242424;border-color:#777}}.ratings,.ratings p{display:inline-block}.ratings #positive{text-align:left}.ratings #indifferent{text-align:center}.ratings #negative{text-align:right}.feedback-table{height:70%}.color-erc20-green{color:#007f3a!important}.background-color-erc20-green{background-color:#007f3a!important}#erc20-dashboard .bytecode-row-header h6 a,#erc20-bytecode .bytecode-row-header h6 a,#erc20-dev-dashboard .bytecode-row-header h6 a{color:#09c;text-decoration:underline}#erc20-dashboard .bytecode-row-header h6 a:hover,#erc20-bytecode .bytecode-row-header h6 a:hover,#erc20-dev-dashboard .bytecode-row-header h6 a:hover{color:#007aa3}#erc20-dashboard .markdown-preview,#erc20-bytecode .markdown-preview,#erc20-dev-dashboard .markdown-preview{border:1px solid #e8e8e8;border-radius:4px;margin-bottom:32px;padding:8px}#erc20-dashboard .markdown-preview pre[class*=language-],#erc20-bytecode .markdown-preview pre[class*=language-],#erc20-dev-dashboard .markdown-preview pre[class*=language-]{word-break:normal;white-space:pre-wrap;background-color:#f7f8fa;padding:16px;font-size:.85rem;overflow:auto}@media screen and (prefers-color-scheme:dark){#erc20-dashboard .markdown-preview,#erc20-bytecode .markdown-preview,#erc20-dev-dashboard .markdown-preview{color:#e8e8e8;border:1px solid #414141}#erc20-dashboard .markdown-preview pre[class*=language-],#erc20-bytecode .markdown-preview pre[class*=language-],#erc20-dev-dashboard .markdown-preview pre[class*=language-]{background-color:#1d1f21}#erc20-dashboard,#erc20-bytecode,#erc20-dev-dashboard,#erc20-dashboard .table,#erc20-bytecode .table,#erc20-dev-dashboard .table{color:#fff}}.logo-link{color:#242424}@media screen and (prefers-color-scheme:dark){.logo-link{color:#fff}}pre[class*=language-],pre{word-break:normal;white-space:pre-wrap;background-color:#f7f8fa;padding:16px;font-family:Inconsolata,Monaco,Consolas,Courier New,Courier,monospace;font-size:.85rem;overflow:auto}code[class*=language-]{font-family:Inconsolata,Monaco,Consolas,Courier New,Courier,monospace}pre[class*=language-]{border-radius:.3em;margin:.5em 0;padding:1em;overflow:auto}@media screen and (prefers-color-scheme:dark){pre[class*=language-],pre{color:#c5c8c6;background-color:#1d1f21}}.h1 a,.h2 a,.h3 a,.h4 a,.h5 a,.h6 a,h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:#09c}.h1 a:hover,.h2 a:hover,.h3 a:hover,.h4 a:hover,.h5 a:hover,.h6 a:hover,h1 a:hover,h2 a:hover,h3 a:hover,h4 a:hover,h5 a:hover,h6 a:hover{color:#069}.rv-btn{color:#242424;background-color:#fff;border-color:#242424}.rv-btn:hover{background-color:#f2f2f2;border-color:#171717}@media screen and (prefers-color-scheme:dark){.rv-btn{color:#fff;background-color:#242424;border-color:#fff}.rv-btn:hover{color:#fff;background-color:#212121;border-color:#f2f2f2}}.rv-btn-yellow{color:#242424;background-color:#fc0;border-color:#fc0}.rv-btn-yellow:hover{background-color:#e6b800;border-color:#e6b800}@media screen and (prefers-color-scheme:dark){.rv-btn-yellow{background-color:#ccb400;border-color:#ccb400}.rv-btn-yellow:hover{background-color:#b39e00;border-color:#b39e00}}.rv-btn-blue{background-color:#09c;border-color:#09c;color:#fff!important}.rv-btn-blue:hover{background-color:#0086b3;border-color:#0086b3;color:#fff!important}@media screen and (prefers-color-scheme:dark){.rv-btn-blue{background-color:#069;border-color:#069}.rv-btn-blue:hover{background-color:#005580;border-color:#005580}}.rv-btn-red{background-color:#f04124;border-color:#f04124;color:#fff!important}.rv-btn-red:hover{background-color:#ea2f10;border-color:#ea2f10;color:#fff!important}@media screen and (prefers-color-scheme:dark){.rv-btn-red{background-color:#cf2a0e;border-color:#cf2a0e}.rv-btn-red:hover{background-color:#b7250c;border-color:#b7250c}}.rv-btn-green{background-color:#007f3a;border-color:#007f3a;color:#fff!important}.rv-btn-green:hover{background-color:#00662e;border-color:#00662e;color:#fff!important}@media screen and (prefers-color-scheme:dark){.rv-btn-green{background-color:#007f3a;border-color:#007f3a}.rv-btn-green:hover{background-color:#00662e;border-color:#00662e}}.card{position:relative;overflow:hidden;box-shadow:0 8px 16px #0000001a}.card:hover{transition:all .3s;box-shadow:0 8px 16px #0003}@media screen and (prefers-color-scheme:dark){.card{color:#fff;background-color:#141414;border-color:#414141}}blockquote{font-size:inherit;color:#5c5c5c;background-color:#f0f0f0;border-left:4px solid #d6d6d6;margin:16px 0;padding:0 15px}@media screen and (prefers-color-scheme:dark){blockquote{font-size:inherit;color:#fdfdfd;background-color:#323232;border-left:4px solid #474747;margin:16px 0;padding:0 15px}}.page-toc{background-color:#fff;border-left:1px solid #0000001a;border-right:none;overflow:auto}@media (max-width:767.98px){.page-toc{z-index:2000;height:100%;background-color:#fff;border:none;display:none;position:fixed;top:0;overflow:auto}}@media screen and (prefers-color-scheme:dark){.page-toc{background:#000;border-left-color:#414141}}.page-toc .bd-toc-link-wrapper .bd-toc-link{white-space:nowrap;padding:.25rem 0;display:inline}.page-toc .bd-toc-link-wrapper.highlighted .bd-toc-link{color:#09c;font-weight:800}.page-toc-toggle-btn{width:48px;height:48px;z-index:3000;border-radius:100%;padding:0;font-size:150%;display:none;position:fixed;bottom:12px;right:12px}@media (max-width:767.98px){.page-toc-toggle-btn{justify-content:center;align-items:center;display:flex}} \ No newline at end of file diff --git a/assets/css/owl.video.play.e7a23fb2.png b/assets/css/owl.video.play.e7a23fb2.png new file mode 100644 index 0000000000000000000000000000000000000000..aa387f962d13c7486d96919f339c9295b3c5c676 GIT binary patch literal 2794 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 literal 0 HcmV?d00001 diff --git a/assets/css/select-arrow.b8e89c0c.svg b/assets/css/select-arrow.b8e89c0c.svg new file mode 100644 index 0000000000..4c24a2a342 --- /dev/null +++ b/assets/css/select-arrow.b8e89c0c.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public_content/assets/img/404.png b/assets/img/404.png similarity index 100% rename from web/public_content/assets/img/404.png rename to assets/img/404.png diff --git a/web/public_content/assets/img/500.png b/assets/img/500.png similarity index 100% rename from web/public_content/assets/img/500.png rename to assets/img/500.png diff --git a/web/public_content/assets/img/hero/kerc20-hero-image.png b/assets/img/hero/kerc20-hero-image.png similarity index 100% rename from web/public_content/assets/img/hero/kerc20-hero-image.png rename to assets/img/hero/kerc20-hero-image.png diff --git a/web/public_content/assets/img/hero/test-coverage-hero-image.png b/assets/img/hero/test-coverage-hero-image.png similarity index 100% rename from web/public_content/assets/img/hero/test-coverage-hero-image.png rename to assets/img/hero/test-coverage-hero-image.png diff --git a/web/public_content/assets/img/hero/test-runner-hero-image.png b/assets/img/hero/test-runner-hero-image.png similarity index 100% rename from web/public_content/assets/img/hero/test-runner-hero-image.png rename to assets/img/hero/test-runner-hero-image.png diff --git a/web/public_content/assets/img/rv-logo-dark.png b/assets/img/rv-logo-dark.png similarity index 100% rename from web/public_content/assets/img/rv-logo-dark.png rename to assets/img/rv-logo-dark.png diff --git a/web/public_content/assets/img/rv-logo.png b/assets/img/rv-logo.png similarity index 100% rename from web/public_content/assets/img/rv-logo.png rename to assets/img/rv-logo.png diff --git a/assets/js/index.js b/assets/js/index.js new file mode 100644 index 0000000000..670ddccf7b --- /dev/null +++ b/assets/js/index.js @@ -0,0 +1,212 @@ +var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{};var t={},n={},i=e.parcelRequire2b1d;null==i&&((i=function(e){if(e in t)return t[e].exports;if(e in n){var i=n[e];delete n[e];var o={id:e,exports:{}};return t[e]=o,i.call(o.exports,o,o.exports),o.exports}var s=new Error("Cannot find module '"+e+"'");throw s.code="MODULE_NOT_FOUND",s}).register=function(e,t){n[e]=t},e.parcelRequire2b1d=i),i.register("lJ4Q2",(function(e,t){ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +!function(t,n){"use strict";"object"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)}("undefined"!=typeof window?window:e.exports,(function(e,t){"use strict";var n=[],i=Object.getPrototypeOf,o=n.slice,s=n.flat?function(e){return n.flat.call(e)}:function(e){return n.concat.apply([],e)},r=n.push,a=n.indexOf,l={},c=l.toString,u=l.hasOwnProperty,d=u.toString,h=d.call(Object),f={},p=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},m=function(e){return null!=e&&e===e.window},g=e.document,v={type:!0,src:!0,nonce:!0,noModule:!0};function y(e,t,n){var i,o,s=(n=n||g).createElement("script");if(s.text=e,t)for(i in v)(o=t[i]||t.getAttribute&&t.getAttribute(i))&&s.setAttribute(i,o);n.head.appendChild(s).parentNode.removeChild(s)}function b(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var _="3.6.0",w=function(e,t){return new w.fn.init(e,t)};function x(e){var t=!!e&&"length"in e&&e.length,n=b(e);return!p(e)&&!m(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}w.fn=w.prototype={jquery:_,constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(w.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(w.grep(this,(function(e,t){return t%2})))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n+~]|[\\x20\\t\\r\\n\\f])[\\x20\\t\\r\\n\\f]*"),U=new RegExp(H+"|>"),V=new RegExp(R),Q=new RegExp("^"+j+"$"),G={ID:new RegExp("^#("+j+")"),CLASS:new RegExp("^\\.("+j+")"),TAG:new RegExp("^("+j+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+R),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\([\\x20\\t\\r\\n\\f]*(even|odd|(([+-]|)(\\d*)n|)[\\x20\\t\\r\\n\\f]*(?:([+-]|)[\\x20\\t\\r\\n\\f]*(\\d+)|))[\\x20\\t\\r\\n\\f]*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^[\\x20\\t\\r\\n\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\([\\x20\\t\\r\\n\\f]*((?:-\\d)?\\d*)[\\x20\\t\\r\\n\\f]*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,X=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},ie=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,oe=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},se=function(){h()},re=_e((function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{L.apply(O=$.call(w.childNodes),w.childNodes),O[w.childNodes.length].nodeType}catch(e){L={apply:O.length?function(e,t){N.apply(e,$.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}function ae(e,t,i,o){var s,a,c,u,d,p,v,y=t&&t.ownerDocument,w=t?t.nodeType:9;if(i=i||[],"string"!=typeof e||!e||1!==w&&9!==w&&11!==w)return i;if(!o&&(h(t),t=t||f,m)){if(11!==w&&(d=J.exec(e)))if(s=d[1]){if(9===w){if(!(c=t.getElementById(s)))return i;if(c.id===s)return i.push(c),i}else if(y&&(c=y.getElementById(s))&&b(t,c)&&c.id===s)return i.push(c),i}else{if(d[2])return L.apply(i,t.getElementsByTagName(e)),i;if((s=d[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(i,t.getElementsByClassName(s)),i}if(n.qsa&&!k[e+" "]&&(!g||!g.test(e))&&(1!==w||"object"!==t.nodeName.toLowerCase())){if(v=e,y=t,1===w&&(U.test(e)||q.test(e))){for((y=ee.test(e)&&ve(t.parentNode)||t)===t&&n.scope||((u=t.getAttribute("id"))?u=u.replace(ie,oe):t.setAttribute("id",u=_)),a=(p=r(e)).length;a--;)p[a]=(u?"#"+u:":scope")+" "+be(p[a]);v=p.join(",")}try{return L.apply(i,y.querySelectorAll(v)),i}catch(t){k(e,!0)}finally{u===_&&t.removeAttribute("id")}}}return l(e.replace(B,"$1"),t,i,o)}function le(){var e=[];return function t(n,o){return e.push(n+" ")>i.cacheLength&&delete t[e.shift()],t[n+" "]=o}}function ce(e){return e[_]=!0,e}function ue(e){var t=f.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function de(e,t){for(var n=e.split("|"),o=n.length;o--;)i.attrHandle[n[o]]=t}function he(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function me(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&re(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function ge(e){return ce((function(t){return t=+t,ce((function(n,i){for(var o,s=e([],n.length,t),r=s.length;r--;)n[o=s[r]]&&(n[o]=!(i[o]=n[o]))}))}))}function ve(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=ae.support={},s=ae.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},h=ae.setDocument=function(e){var t,o,r=e?e.ownerDocument||e:w;return r!=f&&9===r.nodeType&&r.documentElement?(p=(f=r).documentElement,m=!s(f),w!=f&&(o=f.defaultView)&&o.top!==o&&(o.addEventListener?o.addEventListener("unload",se,!1):o.attachEvent&&o.attachEvent("onunload",se)),n.scope=ue((function(e){return p.appendChild(e).appendChild(f.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length})),n.attributes=ue((function(e){return e.className="i",!e.getAttribute("className")})),n.getElementsByTagName=ue((function(e){return e.appendChild(f.createComment("")),!e.getElementsByTagName("*").length})),n.getElementsByClassName=Z.test(f.getElementsByClassName),n.getById=ue((function(e){return p.appendChild(e).id=_,!f.getElementsByName||!f.getElementsByName(_).length})),n.getById?(i.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},i.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n=t.getElementById(e);return n?[n]:[]}}):(i.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},i.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n,i,o,s=t.getElementById(e);if(s){if((n=s.getAttributeNode("id"))&&n.value===e)return[s];for(o=t.getElementsByName(e),i=0;s=o[i++];)if((n=s.getAttributeNode("id"))&&n.value===e)return[s]}return[]}}),i.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],o=0,s=t.getElementsByTagName(e);if("*"===e){for(;n=s[o++];)1===n.nodeType&&i.push(n);return i}return s},i.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&m)return t.getElementsByClassName(e)},v=[],g=[],(n.qsa=Z.test(f.querySelectorAll))&&(ue((function(e){var t;p.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\[[\\x20\\t\\r\\n\\f]*(?:value|"+P+")"),e.querySelectorAll("[id~="+_+"-]").length||g.push("~="),(t=f.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||g.push("\\[[\\x20\\t\\r\\n\\f]*name[\\x20\\t\\r\\n\\f]*=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+_+"+*").length||g.push(".#.+[+~]"),e.querySelectorAll("\\\f"),g.push("[\\r\\n\\f]")})),ue((function(e){e.innerHTML="";var t=f.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name[\\x20\\t\\r\\n\\f]*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),p.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")}))),(n.matchesSelector=Z.test(y=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&ue((function(e){n.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),v.push("!=",R)})),g=g.length&&new RegExp(g.join("|")),v=v.length&&new RegExp(v.join("|")),t=Z.test(p.compareDocumentPosition),b=t||Z.test(p.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},I=t?function(e,t){if(e===t)return d=!0,0;var i=!e.compareDocumentPosition-!t.compareDocumentPosition;return i||(1&(i=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===i?e==f||e.ownerDocument==w&&b(w,e)?-1:t==f||t.ownerDocument==w&&b(w,t)?1:u?z(u,e)-z(u,t):0:4&i?-1:1)}:function(e,t){if(e===t)return d=!0,0;var n,i=0,o=e.parentNode,s=t.parentNode,r=[e],a=[t];if(!o||!s)return e==f?-1:t==f?1:o?-1:s?1:u?z(u,e)-z(u,t):0;if(o===s)return he(e,t);for(n=e;n=n.parentNode;)r.unshift(n);for(n=t;n=n.parentNode;)a.unshift(n);for(;r[i]===a[i];)i++;return i?he(r[i],a[i]):r[i]==w?-1:a[i]==w?1:0},f):f},ae.matches=function(e,t){return ae(e,null,null,t)},ae.matchesSelector=function(e,t){if(h(e),n.matchesSelector&&m&&!k[t+" "]&&(!v||!v.test(t))&&(!g||!g.test(t)))try{var i=y.call(e,t);if(i||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){k(t,!0)}return ae(t,f,null,[e]).length>0},ae.contains=function(e,t){return(e.ownerDocument||e)!=f&&h(e),b(e,t)},ae.attr=function(e,t){(e.ownerDocument||e)!=f&&h(e);var o=i.attrHandle[t.toLowerCase()],s=o&&A.call(i.attrHandle,t.toLowerCase())?o(e,t,!m):void 0;return void 0!==s?s:n.attributes||!m?e.getAttribute(t):(s=e.getAttributeNode(t))&&s.specified?s.value:null},ae.escape=function(e){return(e+"").replace(ie,oe)},ae.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ae.uniqueSort=function(e){var t,i=[],o=0,s=0;if(d=!n.detectDuplicates,u=!n.sortStable&&e.slice(0),e.sort(I),d){for(;t=e[s++];)t===e[s]&&(o=i.push(s));for(;o--;)e.splice(i[o],1)}return u=null,e},o=ae.getText=function(e){var t,n="",i=0,s=e.nodeType;if(s){if(1===s||9===s||11===s){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===s||4===s)return e.nodeValue}else for(;t=e[i++];)n+=o(t);return n},i=ae.selectors={cacheLength:50,createPseudo:ce,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ae.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ae.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&V.test(n)&&(t=r(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=new RegExp("(^|[\\x20\\t\\r\\n\\f])"+e+"("+H+"|$)"),C(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})))},ATTR:function(e,t,n){return function(i){var o=ae.attr(i,e);return null==o?"!="===t:!t||(o+="","="===t?o===n:"!="===t?o!==n:"^="===t?n&&0===o.indexOf(n):"*="===t?n&&o.indexOf(n)>-1:"$="===t?n&&o.slice(-n.length)===n:"~="===t?(" "+o.replace(F," ")+" ").indexOf(n)>-1:"|="===t&&(o===n||o.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,i,o){var s="nth"!==e.slice(0,3),r="last"!==e.slice(-4),a="of-type"===t;return 1===i&&0===o?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,h,f,p,m=s!==r?"nextSibling":"previousSibling",g=t.parentNode,v=a&&t.nodeName.toLowerCase(),y=!l&&!a,b=!1;if(g){if(s){for(;m;){for(h=t;h=h[m];)if(a?h.nodeName.toLowerCase()===v:1===h.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[r?g.firstChild:g.lastChild],r&&y){for(b=(f=(c=(u=(d=(h=g)[_]||(h[_]={}))[h.uniqueID]||(d[h.uniqueID]={}))[e]||[])[0]===x&&c[1])&&c[2],h=f&&g.childNodes[f];h=++f&&h&&h[m]||(b=f=0)||p.pop();)if(1===h.nodeType&&++b&&h===t){u[e]=[x,f,b];break}}else if(y&&(b=f=(c=(u=(d=(h=t)[_]||(h[_]={}))[h.uniqueID]||(d[h.uniqueID]={}))[e]||[])[0]===x&&c[1]),!1===b)for(;(h=++f&&h&&h[m]||(b=f=0)||p.pop())&&((a?h.nodeName.toLowerCase()!==v:1!==h.nodeType)||!++b||(y&&((u=(d=h[_]||(h[_]={}))[h.uniqueID]||(d[h.uniqueID]={}))[e]=[x,b]),h!==t)););return(b-=o)===i||b%i==0&&b/i>=0}}},PSEUDO:function(e,t){var n,o=i.pseudos[e]||i.setFilters[e.toLowerCase()]||ae.error("unsupported pseudo: "+e);return o[_]?o(t):o.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ce((function(e,n){for(var i,s=o(e,t),r=s.length;r--;)e[i=z(e,s[r])]=!(n[i]=s[r])})):function(e){return o(e,0,n)}):o}},pseudos:{not:ce((function(e){var t=[],n=[],i=a(e.replace(B,"$1"));return i[_]?ce((function(e,t,n,o){for(var s,r=i(e,null,o,[]),a=e.length;a--;)(s=r[a])&&(e[a]=!(t[a]=s))})):function(e,o,s){return t[0]=e,i(t,null,s,n),t[0]=null,!n.pop()}})),has:ce((function(e){return function(t){return ae(e,t).length>0}})),contains:ce((function(e){return e=e.replace(te,ne),function(t){return(t.textContent||o(t)).indexOf(e)>-1}})),lang:ce((function(e){return Q.test(e||"")||ae.error("unsupported lang: "+e),e=e.replace(te,ne).toLowerCase(),function(t){var n;do{if(n=m?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===p},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:me(!1),disabled:me(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return K.test(e.nodeName)},input:function(e){return X.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ge((function(){return[0]})),last:ge((function(e,t){return[t-1]})),eq:ge((function(e,t,n){return[n<0?n+t:n]})),even:ge((function(e,t){for(var n=0;nt?t:n;--i>=0;)e.push(i);return e})),gt:ge((function(e,t,n){for(var i=n<0?n+t:n;++i1?function(t,n,i){for(var o=e.length;o--;)if(!e[o](t,n,i))return!1;return!0}:e[0]}function xe(e,t,n,i,o){for(var s,r=[],a=0,l=e.length,c=null!=t;a-1&&(s[c]=!(r[c]=d))}}else v=xe(v===r?v.splice(p,v.length):v),o?o(null,r,v,l):L.apply(r,v)}))}function Ce(e){for(var t,n,o,s=e.length,r=i.relative[e[0].type],a=r||i.relative[" "],l=r?1:0,u=_e((function(e){return e===t}),a,!0),d=_e((function(e){return z(t,e)>-1}),a,!0),h=[function(e,n,i){var o=!r&&(i||n!==c)||((t=n).nodeType?u(e,n,i):d(e,n,i));return t=null,o}];l1&&we(h),l>1&&be(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(B,"$1"),n,l0,o=e.length>0,s=function(s,r,a,l,u){var d,p,g,v=0,y="0",b=s&&[],_=[],w=c,E=s||o&&i.find.TAG("*",u),C=x+=null==w?1:Math.random()||.1,S=E.length;for(u&&(c=r==f||r||u);y!==S&&null!=(d=E[y]);y++){if(o&&d){for(p=0,r||d.ownerDocument==f||(h(d),a=!m);g=e[p++];)if(g(d,r||f,a)){l.push(d);break}u&&(x=C)}n&&((d=!g&&d)&&v--,s&&b.push(d))}if(v+=y,n&&y!==v){for(p=0;g=t[p++];)g(b,_,r,a);if(s){if(v>0)for(;y--;)b[y]||_[y]||(_[y]=D.call(l));_=xe(_)}L.apply(l,_),u&&!s&&_.length>0&&v+t.length>1&&ae.uniqueSort(l)}return u&&(x=C,c=w),b};return n?ce(s):s}(s,o)),a.selector=e}return a},l=ae.select=function(e,t,n,o){var s,l,c,u,d,h="function"==typeof e&&e,f=!o&&r(e=h.selector||e);if(n=n||[],1===f.length){if((l=f[0]=f[0].slice(0)).length>2&&"ID"===(c=l[0]).type&&9===t.nodeType&&m&&i.relative[l[1].type]){if(!(t=(i.find.ID(c.matches[0].replace(te,ne),t)||[])[0]))return n;h&&(t=t.parentNode),e=e.slice(l.shift().value.length)}for(s=G.needsContext.test(e)?0:l.length;s--&&(c=l[s],!i.relative[u=c.type]);)if((d=i.find[u])&&(o=d(c.matches[0].replace(te,ne),ee.test(l[0].type)&&ve(t.parentNode)||t))){if(l.splice(s,1),!(e=o.length&&be(l)))return L.apply(n,o),n;break}}return(h||a(e,f))(o,t,!m,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},n.sortStable=_.split("").sort(I).join("")===_,n.detectDuplicates=!!d,h(),n.sortDetached=ue((function(e){return 1&e.compareDocumentPosition(f.createElement("fieldset"))})),ue((function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")}))||de("type|href|height|width",(function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),n.attributes&&ue((function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||de("value",(function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue})),ue((function(e){return null==e.getAttribute("disabled")}))||de(P,(function(e,t,n){var i;if(!n)return!0===e[t]?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null})),ae}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var C=function(e,t,n){for(var i=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&w(e).is(n))break;i.push(e)}return i},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},T=w.expr.match.needsContext;function k(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var I=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function A(e,t,n){return p(t)?w.grep(e,(function(e,i){return!!t.call(e,i,e)!==n})):t.nodeType?w.grep(e,(function(e){return e===t!==n})):"string"!=typeof t?w.grep(e,(function(e){return a.call(t,e)>-1!==n})):w.filter(t,e,n)}w.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?w.find.matchesSelector(i,e)?[i]:[]:w.find.matches(e,w.grep(t,(function(e){return 1===e.nodeType})))},w.fn.extend({find:function(e){var t,n,i=this.length,o=this;if("string"!=typeof e)return this.pushStack(w(e).filter((function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(A(this,e||[],!1))},not:function(e){return this.pushStack(A(this,e||[],!0))},is:function(e){return!!A(this,"string"==typeof e&&T.test(e)?w(e):e||[],!1).length}});var O,D=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||O,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:D.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:g,!0)),I.test(i[1])&&w.isPlainObject(t))for(i in t)p(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=g.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):p(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,O=w(g);var N=/^(?:parents|prev(?:Until|All))/,L={children:!0,contents:!0,next:!0,prev:!0};function $(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter((function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){s.push(n);break}return this.pushStack(s.length>1?w.uniqueSort(s):s)},index:function(e){return e?"string"==typeof e?a.call(w(e),this[0]):a.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return C(e,"parentNode")},parentsUntil:function(e,t,n){return C(e,"parentNode",n)},next:function(e){return $(e,"nextSibling")},prev:function(e){return $(e,"previousSibling")},nextAll:function(e){return C(e,"nextSibling")},prevAll:function(e){return C(e,"previousSibling")},nextUntil:function(e,t,n){return C(e,"nextSibling",n)},prevUntil:function(e,t,n){return C(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return null!=e.contentDocument&&i(e.contentDocument)?e.contentDocument:(k(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},(function(e,t){w.fn[e]=function(n,i){var o=w.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"==typeof i&&(o=w.filter(i,o)),this.length>1&&(L[e]||w.uniqueSort(o),N.test(e)&&o.reverse()),this.pushStack(o)}}));var z=/[^\x20\t\r\n\f]+/g;function P(e){return e}function H(e){throw e}function j(e,t,n,i){var o;try{e&&p(o=e.promise)?o.call(e).done(t).fail(n):e&&p(o=e.then)?o.call(e,t,n):t.apply(void 0,[e].slice(i))}catch(e){n.apply(void 0,[e])}}w.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return w.each(e.match(z)||[],(function(e,n){t[n]=!0})),t}(e):w.extend({},e);var t,n,i,o,s=[],r=[],a=-1,l=function(){for(o=o||e.once,i=t=!0;r.length;a=-1)for(n=r.shift();++a-1;)s.splice(n,1),n<=a&&a--})),this},has:function(e){return e?w.inArray(e,s)>-1:s.length>0},empty:function(){return s&&(s=[]),this},disable:function(){return o=r=[],s=n="",this},disabled:function(){return!s},lock:function(){return o=r=[],n||t||(s=n=""),this},locked:function(){return!!o},fireWith:function(e,n){return o||(n=[e,(n=n||[]).slice?n.slice():n],r.push(n),t||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!i}};return c},w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],i="pending",o={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},catch:function(e){return o.then(null,e)},pipe:function(){var e=arguments;return w.Deferred((function(t){w.each(n,(function(n,i){var o=p(e[i[4]])&&e[i[4]];s[i[1]]((function(){var e=o&&o.apply(this,arguments);e&&p(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[i[0]+"With"](this,o?[e]:arguments)}))})),e=null})).promise()},then:function(t,i,o){var s=0;function r(t,n,i,o){return function(){var a=this,l=arguments,c=function(){var e,c;if(!(t=s&&(i!==H&&(a=void 0,l=[e]),n.rejectWith(a,l))}};t?u():(w.Deferred.getStackHook&&(u.stackTrace=w.Deferred.getStackHook()),e.setTimeout(u))}}return w.Deferred((function(e){n[0][3].add(r(0,e,p(o)?o:P,e.notifyWith)),n[1][3].add(r(0,e,p(t)?t:P)),n[2][3].add(r(0,e,p(i)?i:H))})).promise()},promise:function(e){return null!=e?w.extend(e,o):o}},s={};return w.each(n,(function(e,t){var r=t[2],a=t[5];o[t[1]]=r.add,a&&r.add((function(){i=a}),n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),r.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=r.fireWith})),o.promise(s),t&&t.call(s,s),s},when:function(e){var t=arguments.length,n=t,i=Array(n),s=o.call(arguments),r=w.Deferred(),a=function(e){return function(n){i[e]=this,s[e]=arguments.length>1?o.call(arguments):n,--t||r.resolveWith(i,s)}};if(t<=1&&(j(e,r.done(a(n)).resolve,r.reject,!t),"pending"===r.state()||p(s[n]&&s[n].then)))return r.then();for(;n--;)j(s[n],a(n),r.reject);return r.promise()}});var M=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&M.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout((function(){throw t}))};var R=w.Deferred();function F(){g.removeEventListener("DOMContentLoaded",F),e.removeEventListener("load",F),w.ready()}w.fn.ready=function(e){return R.then(e).catch((function(e){w.readyException(e)})),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||R.resolveWith(g,[w]))}}),w.ready.then=R.then,"complete"===g.readyState||"loading"!==g.readyState&&!g.documentElement.doScroll?e.setTimeout(w.ready):(g.addEventListener("DOMContentLoaded",F),e.addEventListener("load",F));var B=function(e,t,n,i,o,s,r){var a=0,l=e.length,c=null==n;if("object"===b(n))for(a in o=!0,n)B(e,t,a,n[a],!0,s,r);else if(void 0!==i&&(o=!0,p(i)||(r=!0),c&&(r?(t.call(e,i),t=null):(c=t,t=function(e,t,n){return c.call(w(e),n)})),t))for(;a1,null,!0)},removeData:function(e){return this.each((function(){X.remove(this,e)}))}}),w.extend({queue:function(e,t,n){var i;if(e)return t=(t||"fx")+"queue",i=Y.get(e,t),n&&(!i||Array.isArray(n)?i=Y.access(e,t,w.makeArray(n)):i.push(n)),i||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),i=n.length,o=n.shift(),s=w._queueHooks(e,t);"inprogress"===o&&(o=n.shift(),i--),o&&("fx"===t&&n.unshift("inprogress"),delete s.stop,o.call(e,(function(){w.dequeue(e,t)}),s)),!i&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:w.Callbacks("once memory").add((function(){Y.remove(e,[t+"queue",n])}))})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]*)/i,me=/^$|^module$|\/(?:java|ecma)script/i;de=g.createDocumentFragment().appendChild(g.createElement("div")),(he=g.createElement("input")).setAttribute("type","radio"),he.setAttribute("checked","checked"),he.setAttribute("name","t"),de.appendChild(he),f.checkClone=de.cloneNode(!0).cloneNode(!0).lastChild.checked,de.innerHTML="",f.noCloneChecked=!!de.cloneNode(!0).lastChild.defaultValue,de.innerHTML="",f.option=!!de.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&k(e,t)?w.merge([e],n):n}function ye(e,t){for(var n=0,i=e.length;n",""]);var be=/<|&#?\w+;/;function _e(e,t,n,i,o){for(var s,r,a,l,c,u,d=t.createDocumentFragment(),h=[],f=0,p=e.length;f-1)o&&o.push(s);else if(c=oe(s),r=ve(d.appendChild(s),"script"),c&&ye(r),n)for(u=0;s=r[u++];)me.test(s.type||"")&&n.push(s);return d}var we=/^([^.]*)(?:\.(.+)|)/;function xe(){return!0}function Ee(){return!1}function Ce(e,t){return e===function(){try{return g.activeElement}catch(e){}}()==("focus"===t)}function Se(e,t,n,i,o,s){var r,a;if("object"==typeof t){for(a in"string"!=typeof n&&(i=i||n,n=void 0),t)Se(e,a,n,i,t[a],s);return e}if(null==i&&null==o?(o=n,i=n=void 0):null==o&&("string"==typeof n?(o=i,i=void 0):(o=i,i=n,n=void 0)),!1===o)o=Ee;else if(!o)return e;return 1===s&&(r=o,o=function(e){return w().off(e),r.apply(this,arguments)},o.guid=r.guid||(r.guid=w.guid++)),e.each((function(){w.event.add(this,t,o,i,n)}))}function Te(e,t,n){n?(Y.set(e,t,!1),w.event.add(e,t,{namespace:!1,handler:function(e){var i,s,r=Y.get(this,t);if(1&e.isTrigger&&this[t]){if(r.length)(w.event.special[t]||{}).delegateType&&e.stopPropagation();else if(r=o.call(arguments),Y.set(this,t,r),i=n(this,t),this[t](),r!==(s=Y.get(this,t))||i?Y.set(this,t,!1):s={},r!==s)return e.stopImmediatePropagation(),e.preventDefault(),s&&s.value}else r.length&&(Y.set(this,t,{value:w.event.trigger(w.extend(r[0],w.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,t)&&w.event.add(e,t,xe)}w.event={global:{},add:function(e,t,n,i,o){var s,r,a,l,c,u,d,h,f,p,m,g=Y.get(e);if(Q(e))for(n.handler&&(n=(s=n).handler,o=s.selector),o&&w.find.matchesSelector(ie,o),n.guid||(n.guid=w.guid++),(l=g.events)||(l=g.events=Object.create(null)),(r=g.handle)||(r=g.handle=function(t){return void 0!==w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),c=(t=(t||"").match(z)||[""]).length;c--;)f=m=(a=we.exec(t[c])||[])[1],p=(a[2]||"").split(".").sort(),f&&(d=w.event.special[f]||{},f=(o?d.delegateType:d.bindType)||f,d=w.event.special[f]||{},u=w.extend({type:f,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&w.expr.match.needsContext.test(o),namespace:p.join(".")},s),(h=l[f])||((h=l[f]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(e,i,p,r)||e.addEventListener&&e.addEventListener(f,r)),d.add&&(d.add.call(e,u),u.handler.guid||(u.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,u):h.push(u),w.event.global[f]=!0)},remove:function(e,t,n,i,o){var s,r,a,l,c,u,d,h,f,p,m,g=Y.hasData(e)&&Y.get(e);if(g&&(l=g.events)){for(c=(t=(t||"").match(z)||[""]).length;c--;)if(f=m=(a=we.exec(t[c])||[])[1],p=(a[2]||"").split(".").sort(),f){for(d=w.event.special[f]||{},h=l[f=(i?d.delegateType:d.bindType)||f]||[],a=a[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),r=s=h.length;s--;)u=h[s],!o&&m!==u.origType||n&&n.guid!==u.guid||a&&!a.test(u.namespace)||i&&i!==u.selector&&("**"!==i||!u.selector)||(h.splice(s,1),u.selector&&h.delegateCount--,d.remove&&d.remove.call(e,u));r&&!h.length&&(d.teardown&&!1!==d.teardown.call(e,p,g.handle)||w.removeEvent(e,f,g.handle),delete l[f])}else for(f in l)w.event.remove(e,f+t[c],n,i,!0);w.isEmptyObject(l)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,i,o,s,r,a=new Array(arguments.length),l=w.event.fix(e),c=(Y.get(this,"events")||Object.create(null))[l.type]||[],u=w.event.special[l.type]||{};for(a[0]=l,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||!0!==c.disabled)){for(s=[],r={},n=0;n-1:w.find(o,this,null,[c]).length),r[o]&&s.push(i);s.length&&a.push({elem:c,handlers:s})}return c=this,l\s*$/g;function Oe(e,t){return k(e,"table")&&k(11!==t.nodeType?t:t.firstChild,"tr")&&w(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Ne(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,i,o,s,r,a;if(1===t.nodeType){if(Y.hasData(e)&&(a=Y.get(e).events))for(o in Y.remove(t,"handle events"),a)for(n=0,i=a[o].length;n1&&"string"==typeof g&&!f.checkClone&&Ie.test(g))return e.each((function(o){var s=e.eq(o);v&&(t[0]=g.call(this,o,s.html())),ze(s,t,n,i)}));if(h&&(r=(o=_e(t,e[0].ownerDocument,!1,e,i)).firstChild,1===o.childNodes.length&&(o=r),r||i)){for(l=(a=w.map(ve(o,"script"),De)).length;d0&&ye(r,!l&&ve(e,"script")),a},cleanData:function(e){for(var t,n,i,o=w.event.special,s=0;void 0!==(n=e[s]);s++)if(Q(n)){if(t=n[Y.expando]){if(t.events)for(i in t.events)o[i]?w.event.remove(n,i):w.removeEvent(n,i,t.handle);n[Y.expando]=void 0}n[X.expando]&&(n[X.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Pe(this,e,!0)},remove:function(e){return Pe(this,e)},text:function(e){return B(this,(function(e){return void 0===e?w.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return ze(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Oe(this,e).appendChild(e)}))},prepend:function(){return ze(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Oe(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return ze(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return ze(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return w.clone(this,e,t)}))},html:function(e){return B(this,(function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(pe.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(l+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-s-l-a-.5))||0),l}function Je(e,t,n){var i=je(e),o=(!f.boxSizingReliable()||n)&&"border-box"===w.css(e,"boxSizing",!1,i),s=o,r=Fe(e,t,i),a="offset"+t[0].toUpperCase()+t.slice(1);if(He.test(r)){if(!n)return r;r="auto"}return(!f.boxSizingReliable()&&o||!f.reliableTrDimensions()&&k(e,"tr")||"auto"===r||!parseFloat(r)&&"inline"===w.css(e,"display",!1,i))&&e.getClientRects().length&&(o="border-box"===w.css(e,"boxSizing",!1,i),(s=a in e)&&(r=e[a])),(r=parseFloat(r)||0)+Ze(e,t,n||(o?"border":"content"),s,i,r)+"px"}function et(e,t,n,i,o){return new et.prototype.init(e,t,n,i,o)}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,s,r,a=V(t),l=Ge.test(t),c=e.style;if(l||(t=Ve(a)),r=w.cssHooks[t]||w.cssHooks[a],void 0===n)return r&&"get"in r&&void 0!==(o=r.get(e,!1,i))?o:c[t];"string"===(s=typeof n)&&(o=te.exec(n))&&o[1]&&(n=ae(e,t,o),s="number"),null!=n&&n==n&&("number"!==s||l||(n+=o&&o[3]||(w.cssNumber[a]?"":"px")),f.clearCloneStyle||""!==n||0!==t.indexOf("background")||(c[t]="inherit"),r&&"set"in r&&void 0===(n=r.set(e,n,i))||(l?c.setProperty(t,n):c[t]=n))}},css:function(e,t,n,i){var o,s,r,a=V(t);return Ge.test(t)||(t=Ve(a)),(r=w.cssHooks[t]||w.cssHooks[a])&&"get"in r&&(o=r.get(e,!0,n)),void 0===o&&(o=Fe(e,t,i)),"normal"===o&&t in Xe&&(o=Xe[t]),""===n||n?(s=parseFloat(o),!0===n||isFinite(s)?s||0:o):o}}),w.each(["height","width"],(function(e,t){w.cssHooks[t]={get:function(e,n,i){if(n)return!Qe.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,t,i):Me(e,Ye,(function(){return Je(e,t,i)}))},set:function(e,n,i){var o,s=je(e),r=!f.scrollboxSize()&&"absolute"===s.position,a=(r||i)&&"border-box"===w.css(e,"boxSizing",!1,s),l=i?Ze(e,t,i,a,s):0;return a&&r&&(l-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(s[t])-Ze(e,t,"border",!1,s)-.5)),l&&(o=te.exec(n))&&"px"!==(o[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(0,n,l)}}})),w.cssHooks.marginLeft=Be(f.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+"px"})),w.each({margin:"",padding:"",border:"Width"},(function(e,t){w.cssHooks[e+t]={expand:function(n){for(var i=0,o={},s="string"==typeof n?n.split(" "):[n];i<4;i++)o[e+ne[i]+t]=s[i]||s[i-2]||s[0];return o}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)})),w.fn.extend({css:function(e,t){return B(this,(function(e,t,n){var i,o,s={},r=0;if(Array.isArray(t)){for(i=je(e),o=t.length;r1)}}),w.Tween=et,et.prototype={constructor:et,init:function(e,t,n,i,o,s){this.elem=e,this.prop=n,this.easing=o||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=i,this.unit=s||(w.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}},et.prototype.init.prototype=et.prototype,et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||!w.cssHooks[e.prop]&&null==e.elem.style[Ve(e.prop)]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},et.propHooks.scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=et.prototype.init,w.fx.step={};var tt,nt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function st(){nt&&(!1===g.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(st):e.setTimeout(st,w.fx.interval),w.fx.tick())}function rt(){return e.setTimeout((function(){tt=void 0})),tt=Date.now()}function at(e,t){var n,i=0,o={height:e};for(t=t?1:0;i<4;i+=2-t)o["margin"+(n=ne[i])]=o["padding"+n]=e;return t&&(o.opacity=o.width=e),o}function lt(e,t,n){for(var i,o=(ct.tweeners[t]||[]).concat(ct.tweeners["*"]),s=0,r=o.length;s1)},removeAttr:function(e){return this.each((function(){w.removeAttr(this,e)}))}}),w.extend({attr:function(e,t,n){var i,o,s=e.nodeType;if(3!==s&&8!==s&&2!==s)return void 0===e.getAttribute?w.prop(e,t,n):(1===s&&w.isXMLDoc(e)||(o=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?ut:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):o&&"set"in o&&void 0!==(i=o.set(e,n,t))?i:(e.setAttribute(t,n+""),n):o&&"get"in o&&null!==(i=o.get(e,t))?i:null==(i=w.find.attr(e,t))?void 0:i)},attrHooks:{type:{set:function(e,t){if(!f.radioValue&&"radio"===t&&k(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,i=0,o=t&&t.match(z);if(o&&1===e.nodeType)for(;n=o[i++];)e.removeAttribute(n)}}),ut={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=dt[t]||w.find.attr;dt[t]=function(e,t,i){var o,s,r=t.toLowerCase();return i||(s=dt[r],dt[r]=o,o=null!=n(e,t,i)?r:null,dt[r]=s),o}}));var ht=/^(?:input|select|textarea|button)$/i,ft=/^(?:a|area)$/i;function pt(e){return(e.match(z)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function gt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(z)||[]}w.fn.extend({prop:function(e,t){return B(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[w.propFix[e]||e]}))}}),w.extend({prop:function(e,t,n){var i,o,s=e.nodeType;if(3!==s&&8!==s&&2!==s)return 1===s&&w.isXMLDoc(e)||(t=w.propFix[t]||t,o=w.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(i=o.set(e,n,t))?i:e[t]=n:o&&"get"in o&&null!==(i=o.get(e,t))?i:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||ft.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),f.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){w.propFix[this.toLowerCase()]=this})),w.fn.extend({addClass:function(e){var t,n,i,o,s,r,a,l=0;if(p(e))return this.each((function(t){w(this).addClass(e.call(this,t,mt(this)))}));if((t=gt(e)).length)for(;n=this[l++];)if(o=mt(n),i=1===n.nodeType&&" "+pt(o)+" "){for(r=0;s=t[r++];)i.indexOf(" "+s+" ")<0&&(i+=s+" ");o!==(a=pt(i))&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,i,o,s,r,a,l=0;if(p(e))return this.each((function(t){w(this).removeClass(e.call(this,t,mt(this)))}));if(!arguments.length)return this.attr("class","");if((t=gt(e)).length)for(;n=this[l++];)if(o=mt(n),i=1===n.nodeType&&" "+pt(o)+" "){for(r=0;s=t[r++];)for(;i.indexOf(" "+s+" ")>-1;)i=i.replace(" "+s+" "," ");o!==(a=pt(i))&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e,i="string"===n||Array.isArray(e);return"boolean"==typeof t&&i?t?this.addClass(e):this.removeClass(e):p(e)?this.each((function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)})):this.each((function(){var t,o,s,r;if(i)for(o=0,s=w(this),r=gt(e);t=r[o++];)s.hasClass(t)?s.removeClass(t):s.addClass(t);else void 0!==e&&"boolean"!==n||((t=mt(this))&&Y.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":Y.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,i=0;for(t=" "+e+" ";n=this[i++];)if(1===n.nodeType&&(" "+pt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var vt=/\r/g;w.fn.extend({val:function(e){var t,n,i,o=this[0];return arguments.length?(i=p(e),this.each((function(n){var o;1===this.nodeType&&(null==(o=i?e.call(this,n,w(this).val()):e)?o="":"number"==typeof o?o+="":Array.isArray(o)&&(o=w.map(o,(function(e){return null==e?"":e+""}))),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))}))):o?(t=w.valHooks[o.type]||w.valHooks[o.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:"string"==typeof(n=o.value)?n.replace(vt,""):null==n?"":n:void 0}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:pt(w.text(e))}},select:{get:function(e){var t,n,i,o=e.options,s=e.selectedIndex,r="select-one"===e.type,a=r?null:[],l=r?s+1:o.length;for(i=s<0?l:r?s:0;i-1)&&(n=!0);return n||(e.selectedIndex=-1),s}}}}),w.each(["radio","checkbox"],(function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},f.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})})),f.focusin="onfocusin"in e;var yt=/^(?:focusinfocus|focusoutblur)$/,bt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var s,r,a,l,c,d,h,f,v=[i||g],y=u.call(t,"type")?t.type:t,b=u.call(t,"namespace")?t.namespace.split("."):[];if(r=f=a=i=i||g,3!==i.nodeType&&8!==i.nodeType&&!yt.test(y+w.event.triggered)&&(y.indexOf(".")>-1&&(b=y.split("."),y=b.shift(),b.sort()),c=y.indexOf(":")<0&&"on"+y,(t=t[w.expando]?t:new w.Event(y,"object"==typeof t&&t)).isTrigger=o?2:3,t.namespace=b.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),h=w.event.special[y]||{},o||!h.trigger||!1!==h.trigger.apply(i,n))){if(!o&&!h.noBubble&&!m(i)){for(l=h.delegateType||y,yt.test(l+y)||(r=r.parentNode);r;r=r.parentNode)v.push(r),a=r;a===(i.ownerDocument||g)&&v.push(a.defaultView||a.parentWindow||e)}for(s=0;(r=v[s++])&&!t.isPropagationStopped();)f=r,t.type=s>1?l:h.bindType||y,(d=(Y.get(r,"events")||Object.create(null))[t.type]&&Y.get(r,"handle"))&&d.apply(r,n),(d=c&&r[c])&&d.apply&&Q(r)&&(t.result=d.apply(r,n),!1===t.result&&t.preventDefault());return t.type=y,o||t.isDefaultPrevented()||h._default&&!1!==h._default.apply(v.pop(),n)||!Q(i)||c&&p(i[y])&&!m(i)&&((a=i[c])&&(i[c]=null),w.event.triggered=y,t.isPropagationStopped()&&f.addEventListener(y,bt),i[y](),t.isPropagationStopped()&&f.removeEventListener(y,bt),w.event.triggered=void 0,a&&(i[c]=a)),t.result}},simulate:function(e,t,n){var i=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(i,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each((function(){w.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),f.focusin||w.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var i=this.ownerDocument||this.document||this,o=Y.access(i,t);o||i.addEventListener(e,n,!0),Y.access(i,t,(o||0)+1)},teardown:function(){var i=this.ownerDocument||this.document||this,o=Y.access(i,t)-1;o?Y.access(i,t,o):(i.removeEventListener(e,n,!0),Y.remove(i,t))}}}));var _t=e.location,wt={guid:Date.now()},xt=/\?/;w.parseXML=function(t){var n,i;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){}return i=n&&n.getElementsByTagName("parsererror")[0],n&&!i||w.error("Invalid XML: "+(i?w.map(i.childNodes,(function(e){return e.textContent})).join("\n"):t)),n};var Et=/\[\]$/,Ct=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,Tt=/^(?:input|select|textarea|keygen)/i;function kt(e,t,n,i){var o;if(Array.isArray(t))w.each(t,(function(t,o){n||Et.test(e)?i(e,o):kt(e+"["+("object"==typeof o&&null!=o?t:"")+"]",o,n,i)}));else if(n||"object"!==b(t))i(e,t);else for(o in t)kt(e+"["+o+"]",t[o],n,i)}w.param=function(e,t){var n,i=[],o=function(e,t){var n=p(t)?t():t;i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,(function(){o(this.name,this.value)}));else for(n in e)kt(n,e[n],t,o);return i.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&Tt.test(this.nodeName)&&!St.test(e)&&(this.checked||!fe.test(e))})).map((function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,(function(e){return{name:t.name,value:e.replace(Ct,"\r\n")}})):{name:t.name,value:n.replace(Ct,"\r\n")}})).get()}});var It=/%20/g,At=/#.*$/,Ot=/([?&])_=[^&]*/,Dt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Nt=/^(?:GET|HEAD)$/,Lt=/^\/\//,$t={},zt={},Pt="*/".concat("*"),Ht=g.createElement("a");function jt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var i,o=0,s=t.toLowerCase().match(z)||[];if(p(n))for(;i=s[o++];)"+"===i[0]?(i=i.slice(1)||"*",(e[i]=e[i]||[]).unshift(n)):(e[i]=e[i]||[]).push(n)}}function Mt(e,t,n,i){var o={},s=e===zt;function r(a){var l;return o[a]=!0,w.each(e[a]||[],(function(e,a){var c=a(t,n,i);return"string"!=typeof c||s||o[c]?s?!(l=c):void 0:(t.dataTypes.unshift(c),r(c),!1)})),l}return r(t.dataTypes[0])||!o["*"]&&r("*")}function Rt(e,t){var n,i,o=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((o[n]?e:i||(i={}))[n]=t[n]);return i&&w.extend(!0,e,i),e}Ht.href=_t.href,w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:_t.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(_t.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Pt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Rt(Rt(e,w.ajaxSettings),t):Rt(w.ajaxSettings,e)},ajaxPrefilter:jt($t),ajaxTransport:jt(zt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,s,r,a,l,c,u,d,h,f=w.ajaxSetup({},n),p=f.context||f,m=f.context&&(p.nodeType||p.jquery)?w(p):w.event,v=w.Deferred(),y=w.Callbacks("once memory"),b=f.statusCode||{},_={},x={},E="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(c){if(!r)for(r={};t=Dt.exec(s);)r[t[1].toLowerCase()+" "]=(r[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=r[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return c?s:null},setRequestHeader:function(e,t){return null==c&&(e=x[e.toLowerCase()]=x[e.toLowerCase()]||e,_[e]=t),this},overrideMimeType:function(e){return null==c&&(f.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)C.always(e[C.status]);else for(t in e)b[t]=[b[t],e[t]];return this},abort:function(e){var t=e||E;return i&&i.abort(t),S(0,t),this}};if(v.promise(C),f.url=((t||f.url||_t.href)+"").replace(Lt,_t.protocol+"//"),f.type=n.method||n.type||f.method||f.type,f.dataTypes=(f.dataType||"*").toLowerCase().match(z)||[""],null==f.crossDomain){l=g.createElement("a");try{l.href=f.url,l.href=l.href,f.crossDomain=Ht.protocol+"//"+Ht.host!=l.protocol+"//"+l.host}catch(e){f.crossDomain=!0}}if(f.data&&f.processData&&"string"!=typeof f.data&&(f.data=w.param(f.data,f.traditional)),Mt($t,f,n,C),c)return C;for(d in(u=w.event&&f.global)&&0==w.active++&&w.event.trigger("ajaxStart"),f.type=f.type.toUpperCase(),f.hasContent=!Nt.test(f.type),o=f.url.replace(At,""),f.hasContent?f.data&&f.processData&&0===(f.contentType||"").indexOf("application/x-www-form-urlencoded")&&(f.data=f.data.replace(It,"+")):(h=f.url.slice(o.length),f.data&&(f.processData||"string"==typeof f.data)&&(o+=(xt.test(o)?"&":"?")+f.data,delete f.data),!1===f.cache&&(o=o.replace(Ot,"$1"),h=(xt.test(o)?"&":"?")+"_="+wt.guid+++h),f.url=o+h),f.ifModified&&(w.lastModified[o]&&C.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&C.setRequestHeader("If-None-Match",w.etag[o])),(f.data&&f.hasContent&&!1!==f.contentType||n.contentType)&&C.setRequestHeader("Content-Type",f.contentType),C.setRequestHeader("Accept",f.dataTypes[0]&&f.accepts[f.dataTypes[0]]?f.accepts[f.dataTypes[0]]+("*"!==f.dataTypes[0]?", "+Pt+"; q=0.01":""):f.accepts["*"]),f.headers)C.setRequestHeader(d,f.headers[d]);if(f.beforeSend&&(!1===f.beforeSend.call(p,C,f)||c))return C.abort();if(E="abort",y.add(f.complete),C.done(f.success),C.fail(f.error),i=Mt(zt,f,n,C)){if(C.readyState=1,u&&m.trigger("ajaxSend",[C,f]),c)return C;f.async&&f.timeout>0&&(a=e.setTimeout((function(){C.abort("timeout")}),f.timeout));try{c=!1,i.send(_,S)}catch(e){if(c)throw e;S(-1,e)}}else S(-1,"No Transport");function S(t,n,r,l){var d,h,g,_,x,E=n;c||(c=!0,a&&e.clearTimeout(a),i=void 0,s=l||"",C.readyState=t>0?4:0,d=t>=200&&t<300||304===t,r&&(_=function(e,t,n){for(var i,o,s,r,a=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===i&&(i=e.mimeType||t.getResponseHeader("Content-Type"));if(i)for(o in a)if(a[o]&&a[o].test(i)){l.unshift(o);break}if(l[0]in n)s=l[0];else{for(o in n){if(!l[0]||e.converters[o+" "+l[0]]){s=o;break}r||(r=o)}s=s||r}if(s)return s!==l[0]&&l.unshift(s),n[s]}(f,C,r)),!d&&w.inArray("script",f.dataTypes)>-1&&w.inArray("json",f.dataTypes)<0&&(f.converters["text script"]=function(){}),_=function(e,t,n,i){var o,s,r,a,l,c={},u=e.dataTypes.slice();if(u[1])for(r in e.converters)c[r.toLowerCase()]=e.converters[r];for(s=u.shift();s;)if(e.responseFields[s]&&(n[e.responseFields[s]]=t),!l&&i&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=s,s=u.shift())if("*"===s)s=l;else if("*"!==l&&l!==s){if(!(r=c[l+" "+s]||c["* "+s]))for(o in c)if((a=o.split(" "))[1]===s&&(r=c[l+" "+a[0]]||c["* "+a[0]])){!0===r?r=c[o]:!0!==c[o]&&(s=a[0],u.unshift(a[1]));break}if(!0!==r)if(r&&e.throws)t=r(t);else try{t=r(t)}catch(e){return{state:"parsererror",error:r?e:"No conversion from "+l+" to "+s}}}return{state:"success",data:t}}(f,_,C,d),d?(f.ifModified&&((x=C.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=x),(x=C.getResponseHeader("etag"))&&(w.etag[o]=x)),204===t||"HEAD"===f.type?E="nocontent":304===t?E="notmodified":(E=_.state,h=_.data,d=!(g=_.error))):(g=E,!t&&E||(E="error",t<0&&(t=0))),C.status=t,C.statusText=(n||E)+"",d?v.resolveWith(p,[h,E,C]):v.rejectWith(p,[C,E,g]),C.statusCode(b),b=void 0,u&&m.trigger(d?"ajaxSuccess":"ajaxError",[C,f,d?h:g]),y.fireWith(p,[C,E]),u&&(m.trigger("ajaxComplete",[C,f]),--w.active||w.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],(function(e,t){w[t]=function(e,n,i,o){return p(n)&&(o=o||i,i=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:o,data:n,success:i},w.isPlainObject(e)&&e))}})),w.ajaxPrefilter((function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")})),w._evalUrl=function(e,t,n){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){w.globalEval(e,t,n)}})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(p(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return p(e)?this.each((function(t){w(this).wrapInner(e.call(this,t))})):this.each((function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=p(e);return this.each((function(n){w(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(e){return this.parent(e).not("body").each((function(){w(this).replaceWith(this.childNodes)})),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Ft={0:200,1223:204},Bt=w.ajaxSettings.xhr();f.cors=!!Bt&&"withCredentials"in Bt,f.ajax=Bt=!!Bt,w.ajaxTransport((function(t){var n,i;if(f.cors||Bt&&!t.crossDomain)return{send:function(o,s){var r,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(r in t.xhrFields)a[r]=t.xhrFields[r];for(r in t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest"),o)a.setRequestHeader(r,o[r]);n=function(e){return function(){n&&(n=i=a.onload=a.onerror=a.onabort=a.ontimeout=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?s(0,"error"):s(a.status,a.statusText):s(Ft[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),i=a.onerror=a.ontimeout=n("error"),void 0!==a.onabort?a.onabort=i:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout((function(){n&&i()}))},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}})),w.ajaxPrefilter((function(e){e.crossDomain&&(e.contents.script=!1)})),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),w.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(i,o){t=w(" + + + + + + + diff --git a/include/kframework/asm.md b/include/kframework/asm.md deleted file mode 100644 index 3a1a372f06..0000000000 --- a/include/kframework/asm.md +++ /dev/null @@ -1,202 +0,0 @@ -Ethereum Assembler -================== - -This file contains an assembler from EVM opcodes to byte strings. - -Note that due to the design of EVM, which depends on the binary representation of a smart contract, it is **not** the case that disassembling and then reassembling the same contract will yield the same sequence of bytes. -As a simple counterexample, consider the contract `0x60`. -Disassembling and then reassembling this contract will yield `0x6000`. - -As such, assembly is not considered part of the semantics of EVM, but is provided merely as a sample implementation to ease readability and make it easier to write inputs to the KEVM semantics. - -```k -module EVM-ASSEMBLY - imports EVM - - syntax OpCode ::= PUSH(Int, Int) [klabel(PUSHAsm)] - // -------------------------------------------------- -``` - -### Program Structure - -Cons-lists of opcodes form programs (using cons operator `_;_`). -Operator `#revOps` can be used to reverse a program. - -```k - syntax OpCodes ::= ".OpCodes" | OpCode ";" OpCodes - // -------------------------------------------------- - - syntax OpCodes ::= #revOps ( OpCodes ) [function] - | #revOpsAux ( OpCodes , OpCodes ) [function] - // -------------------------------------------------------------- - rule #revOps(OPS) => #revOpsAux(OPS, .OpCodes) - - rule #revOpsAux( .OpCodes , OPS' ) => OPS' - rule #revOpsAux( OP ; OPS , OPS' ) => #revOpsAux( OPS , OP ; OPS' ) -``` - -```k - syntax Bytes ::= #asmOpCodes ( OpCodes ) [function] - // --------------------------------------------------- -``` - -```k - syntax Bytes ::= #asmOpCodes ( OpCodes, StringBuffer ) [function, klabel(#asmOpCodesAux)] - // ----------------------------------------------------------------------------------------- - rule #asmOpCodes( OPS ) => #asmOpCodes(OPS, .StringBuffer) - - rule #asmOpCodes( PUSH(N, W) ; OCS, SB ) => #asmOpCodes(OCS, (SB +String chrChar(#asmOpCode(PUSH(N)))) +String Bytes2String(Int2Bytes(N, W, BE))) - rule #asmOpCodes( OP ; OCS, SB ) => #asmOpCodes(OCS, SB +String chrChar(#asmOpCode(OP))) [owise] - rule #asmOpCodes( .OpCodes, SB ) => String2Bytes(StringBuffer2String(SB)) -``` - -```k - syntax Int ::= #asmOpCode ( OpCode ) [function] - // ----------------------------------------------- - rule #asmOpCode( STOP ) => 0 - rule #asmOpCode( ADD ) => 1 - rule #asmOpCode( MUL ) => 2 - rule #asmOpCode( SUB ) => 3 - rule #asmOpCode( DIV ) => 4 - rule #asmOpCode( SDIV ) => 5 - rule #asmOpCode( MOD ) => 6 - rule #asmOpCode( SMOD ) => 7 - rule #asmOpCode( ADDMOD ) => 8 - rule #asmOpCode( MULMOD ) => 9 - rule #asmOpCode( EXP ) => 10 - rule #asmOpCode( SIGNEXTEND ) => 11 - rule #asmOpCode( LT ) => 16 - rule #asmOpCode( GT ) => 17 - rule #asmOpCode( SLT ) => 18 - rule #asmOpCode( SGT ) => 19 - rule #asmOpCode( EQ ) => 20 - rule #asmOpCode( ISZERO ) => 21 - rule #asmOpCode( AND ) => 22 - rule #asmOpCode( EVMOR ) => 23 - rule #asmOpCode( XOR ) => 24 - rule #asmOpCode( NOT ) => 25 - rule #asmOpCode( BYTE ) => 26 - rule #asmOpCode( SHL ) => 27 - rule #asmOpCode( SHR ) => 28 - rule #asmOpCode( SAR ) => 29 - rule #asmOpCode( SHA3 ) => 32 - rule #asmOpCode( ADDRESS ) => 48 - rule #asmOpCode( BALANCE ) => 49 - rule #asmOpCode( ORIGIN ) => 50 - rule #asmOpCode( CALLER ) => 51 - rule #asmOpCode( CALLVALUE ) => 52 - rule #asmOpCode( CALLDATALOAD ) => 53 - rule #asmOpCode( CALLDATASIZE ) => 54 - rule #asmOpCode( CALLDATACOPY ) => 55 - rule #asmOpCode( CODESIZE ) => 56 - rule #asmOpCode( CODECOPY ) => 57 - rule #asmOpCode( GASPRICE ) => 58 - rule #asmOpCode( EXTCODESIZE ) => 59 - rule #asmOpCode( EXTCODECOPY ) => 60 - rule #asmOpCode( RETURNDATASIZE ) => 61 - rule #asmOpCode( RETURNDATACOPY ) => 62 - rule #asmOpCode( EXTCODEHASH ) => 63 - rule #asmOpCode( BLOCKHASH ) => 64 - rule #asmOpCode( COINBASE ) => 65 - rule #asmOpCode( TIMESTAMP ) => 66 - rule #asmOpCode( NUMBER ) => 67 - rule #asmOpCode( DIFFICULTY ) => 68 - rule #asmOpCode( PREVRANDAO ) => 68 - rule #asmOpCode( GASLIMIT ) => 69 - rule #asmOpCode( CHAINID ) => 70 - rule #asmOpCode( SELFBALANCE ) => 71 - rule #asmOpCode( POP ) => 80 - rule #asmOpCode( MLOAD ) => 81 - rule #asmOpCode( MSTORE ) => 82 - rule #asmOpCode( MSTORE8 ) => 83 - rule #asmOpCode( SLOAD ) => 84 - rule #asmOpCode( SSTORE ) => 85 - rule #asmOpCode( JUMP ) => 86 - rule #asmOpCode( JUMPI ) => 87 - rule #asmOpCode( PC ) => 88 - rule #asmOpCode( MSIZE ) => 89 - rule #asmOpCode( GAS ) => 90 - rule #asmOpCode( JUMPDEST ) => 91 - rule #asmOpCode( PUSH(1) ) => 96 - rule #asmOpCode( PUSH(2) ) => 97 - rule #asmOpCode( PUSH(3) ) => 98 - rule #asmOpCode( PUSH(4) ) => 99 - rule #asmOpCode( PUSH(5) ) => 100 - rule #asmOpCode( PUSH(6) ) => 101 - rule #asmOpCode( PUSH(7) ) => 102 - rule #asmOpCode( PUSH(8) ) => 103 - rule #asmOpCode( PUSH(9) ) => 104 - rule #asmOpCode( PUSH(10) ) => 105 - rule #asmOpCode( PUSH(11) ) => 106 - rule #asmOpCode( PUSH(12) ) => 107 - rule #asmOpCode( PUSH(13) ) => 108 - rule #asmOpCode( PUSH(14) ) => 109 - rule #asmOpCode( PUSH(15) ) => 110 - rule #asmOpCode( PUSH(16) ) => 111 - rule #asmOpCode( PUSH(17) ) => 112 - rule #asmOpCode( PUSH(18) ) => 113 - rule #asmOpCode( PUSH(19) ) => 114 - rule #asmOpCode( PUSH(20) ) => 115 - rule #asmOpCode( PUSH(21) ) => 116 - rule #asmOpCode( PUSH(22) ) => 117 - rule #asmOpCode( PUSH(23) ) => 118 - rule #asmOpCode( PUSH(24) ) => 119 - rule #asmOpCode( PUSH(25) ) => 120 - rule #asmOpCode( PUSH(26) ) => 121 - rule #asmOpCode( PUSH(27) ) => 122 - rule #asmOpCode( PUSH(28) ) => 123 - rule #asmOpCode( PUSH(29) ) => 124 - rule #asmOpCode( PUSH(30) ) => 125 - rule #asmOpCode( PUSH(31) ) => 126 - rule #asmOpCode( PUSH(32) ) => 127 - rule #asmOpCode( DUP(1) ) => 128 - rule #asmOpCode( DUP(2) ) => 129 - rule #asmOpCode( DUP(3) ) => 130 - rule #asmOpCode( DUP(4) ) => 131 - rule #asmOpCode( DUP(5) ) => 132 - rule #asmOpCode( DUP(6) ) => 133 - rule #asmOpCode( DUP(7) ) => 134 - rule #asmOpCode( DUP(8) ) => 135 - rule #asmOpCode( DUP(9) ) => 136 - rule #asmOpCode( DUP(10) ) => 137 - rule #asmOpCode( DUP(11) ) => 138 - rule #asmOpCode( DUP(12) ) => 139 - rule #asmOpCode( DUP(13) ) => 140 - rule #asmOpCode( DUP(14) ) => 141 - rule #asmOpCode( DUP(15) ) => 142 - rule #asmOpCode( DUP(16) ) => 143 - rule #asmOpCode( SWAP(1) ) => 144 - rule #asmOpCode( SWAP(2) ) => 145 - rule #asmOpCode( SWAP(3) ) => 146 - rule #asmOpCode( SWAP(4) ) => 147 - rule #asmOpCode( SWAP(5) ) => 148 - rule #asmOpCode( SWAP(6) ) => 149 - rule #asmOpCode( SWAP(7) ) => 150 - rule #asmOpCode( SWAP(8) ) => 151 - rule #asmOpCode( SWAP(9) ) => 152 - rule #asmOpCode( SWAP(10) ) => 153 - rule #asmOpCode( SWAP(11) ) => 154 - rule #asmOpCode( SWAP(12) ) => 155 - rule #asmOpCode( SWAP(13) ) => 156 - rule #asmOpCode( SWAP(14) ) => 157 - rule #asmOpCode( SWAP(15) ) => 158 - rule #asmOpCode( SWAP(16) ) => 159 - rule #asmOpCode( LOG(0) ) => 160 - rule #asmOpCode( LOG(1) ) => 161 - rule #asmOpCode( LOG(2) ) => 162 - rule #asmOpCode( LOG(3) ) => 163 - rule #asmOpCode( LOG(4) ) => 164 - rule #asmOpCode( CREATE ) => 240 - rule #asmOpCode( CALL ) => 241 - rule #asmOpCode( CALLCODE ) => 242 - rule #asmOpCode( RETURN ) => 243 - rule #asmOpCode( DELEGATECALL ) => 244 - rule #asmOpCode( CREATE2 ) => 245 - rule #asmOpCode( STATICCALL ) => 250 - rule #asmOpCode( REVERT ) => 253 - rule #asmOpCode( INVALID ) => 254 - rule #asmOpCode( SELFDESTRUCT ) => 255 - rule #asmOpCode( UNDEFINED(W) ) => W - -endmodule -``` diff --git a/include/kframework/asm/index.html b/include/kframework/asm/index.html new file mode 100644 index 0000000000..abbca6abcb --- /dev/null +++ b/include/kframework/asm/index.html @@ -0,0 +1,376 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + +

+ + +
+
+
+ + +
+ +
+

Ethereum Assembler

+

This file contains an assembler from EVM opcodes to byte strings.

+

Note that due to the design of EVM, which depends on the binary representation of a smart contract, it is not the case that disassembling and then reassembling the same contract will yield the same sequence of bytes. +As a simple counterexample, consider the contract 0x60. +Disassembling and then reassembling this contract will yield 0x6000.

+

As such, assembly is not considered part of the semantics of EVM, but is provided merely as a sample implementation to ease readability and make it easier to write inputs to the KEVM semantics.

+
module EVM-ASSEMBLY
+    imports EVM
+
+    syntax OpCode ::= PUSH(Int, Int) [klabel(PUSHAsm)]
+ // --------------------------------------------------
+
+

Program Structure

+

Cons-lists of opcodes form programs (using cons operator _;_). +Operator #revOps can be used to reverse a program.

+
    syntax OpCodes ::= ".OpCodes" | OpCode ";" OpCodes
+ // --------------------------------------------------
+
+    syntax OpCodes ::= #revOps    ( OpCodes )           [function]
+                     | #revOpsAux ( OpCodes , OpCodes ) [function]
+ // --------------------------------------------------------------
+    rule #revOps(OPS) => #revOpsAux(OPS, .OpCodes)
+
+    rule #revOpsAux( .OpCodes , OPS' ) => OPS'
+    rule #revOpsAux( OP ; OPS , OPS' ) => #revOpsAux( OPS , OP ; OPS' )
+
+
    syntax Bytes ::= #asmOpCodes ( OpCodes ) [function]
+ // ---------------------------------------------------
+
+
    syntax Bytes ::= #asmOpCodes ( OpCodes, StringBuffer ) [function, klabel(#asmOpCodesAux)]
+ // -----------------------------------------------------------------------------------------
+    rule #asmOpCodes( OPS ) => #asmOpCodes(OPS, .StringBuffer)
+
+    rule #asmOpCodes( PUSH(N, W) ; OCS, SB ) => #asmOpCodes(OCS, (SB +String chrChar(#asmOpCode(PUSH(N)))) +String Bytes2String(Int2Bytes(N, W, BE)))
+    rule #asmOpCodes( OP ; OCS, SB ) => #asmOpCodes(OCS, SB +String chrChar(#asmOpCode(OP))) [owise]
+    rule #asmOpCodes( .OpCodes, SB ) => String2Bytes(StringBuffer2String(SB))
+
+
    syntax Int ::= #asmOpCode ( OpCode ) [function]
+ // -----------------------------------------------
+    rule #asmOpCode( STOP           ) =>   0
+    rule #asmOpCode( ADD            ) =>   1
+    rule #asmOpCode( MUL            ) =>   2
+    rule #asmOpCode( SUB            ) =>   3
+    rule #asmOpCode( DIV            ) =>   4
+    rule #asmOpCode( SDIV           ) =>   5
+    rule #asmOpCode( MOD            ) =>   6
+    rule #asmOpCode( SMOD           ) =>   7
+    rule #asmOpCode( ADDMOD         ) =>   8
+    rule #asmOpCode( MULMOD         ) =>   9
+    rule #asmOpCode( EXP            ) =>  10
+    rule #asmOpCode( SIGNEXTEND     ) =>  11
+    rule #asmOpCode( LT             ) =>  16
+    rule #asmOpCode( GT             ) =>  17
+    rule #asmOpCode( SLT            ) =>  18
+    rule #asmOpCode( SGT            ) =>  19
+    rule #asmOpCode( EQ             ) =>  20
+    rule #asmOpCode( ISZERO         ) =>  21
+    rule #asmOpCode( AND            ) =>  22
+    rule #asmOpCode( EVMOR          ) =>  23
+    rule #asmOpCode( XOR            ) =>  24
+    rule #asmOpCode( NOT            ) =>  25
+    rule #asmOpCode( BYTE           ) =>  26
+    rule #asmOpCode( SHL            ) =>  27
+    rule #asmOpCode( SHR            ) =>  28
+    rule #asmOpCode( SAR            ) =>  29
+    rule #asmOpCode( SHA3           ) =>  32
+    rule #asmOpCode( ADDRESS        ) =>  48
+    rule #asmOpCode( BALANCE        ) =>  49
+    rule #asmOpCode( ORIGIN         ) =>  50
+    rule #asmOpCode( CALLER         ) =>  51
+    rule #asmOpCode( CALLVALUE      ) =>  52
+    rule #asmOpCode( CALLDATALOAD   ) =>  53
+    rule #asmOpCode( CALLDATASIZE   ) =>  54
+    rule #asmOpCode( CALLDATACOPY   ) =>  55
+    rule #asmOpCode( CODESIZE       ) =>  56
+    rule #asmOpCode( CODECOPY       ) =>  57
+    rule #asmOpCode( GASPRICE       ) =>  58
+    rule #asmOpCode( EXTCODESIZE    ) =>  59
+    rule #asmOpCode( EXTCODECOPY    ) =>  60
+    rule #asmOpCode( RETURNDATASIZE ) =>  61
+    rule #asmOpCode( RETURNDATACOPY ) =>  62
+    rule #asmOpCode( EXTCODEHASH    ) =>  63
+    rule #asmOpCode( BLOCKHASH      ) =>  64
+    rule #asmOpCode( COINBASE       ) =>  65
+    rule #asmOpCode( TIMESTAMP      ) =>  66
+    rule #asmOpCode( NUMBER         ) =>  67
+    rule #asmOpCode( DIFFICULTY     ) =>  68
+    rule #asmOpCode( PREVRANDAO     ) =>  68
+    rule #asmOpCode( GASLIMIT       ) =>  69
+    rule #asmOpCode( CHAINID        ) =>  70
+    rule #asmOpCode( SELFBALANCE    ) =>  71
+    rule #asmOpCode( POP            ) =>  80
+    rule #asmOpCode( MLOAD          ) =>  81
+    rule #asmOpCode( MSTORE         ) =>  82
+    rule #asmOpCode( MSTORE8        ) =>  83
+    rule #asmOpCode( SLOAD          ) =>  84
+    rule #asmOpCode( SSTORE         ) =>  85
+    rule #asmOpCode( JUMP           ) =>  86
+    rule #asmOpCode( JUMPI          ) =>  87
+    rule #asmOpCode( PC             ) =>  88
+    rule #asmOpCode( MSIZE          ) =>  89
+    rule #asmOpCode( GAS            ) =>  90
+    rule #asmOpCode( JUMPDEST       ) =>  91
+    rule #asmOpCode( PUSH(1)        ) =>  96
+    rule #asmOpCode( PUSH(2)        ) =>  97
+    rule #asmOpCode( PUSH(3)        ) =>  98
+    rule #asmOpCode( PUSH(4)        ) =>  99
+    rule #asmOpCode( PUSH(5)        ) => 100
+    rule #asmOpCode( PUSH(6)        ) => 101
+    rule #asmOpCode( PUSH(7)        ) => 102
+    rule #asmOpCode( PUSH(8)        ) => 103
+    rule #asmOpCode( PUSH(9)        ) => 104
+    rule #asmOpCode( PUSH(10)       ) => 105
+    rule #asmOpCode( PUSH(11)       ) => 106
+    rule #asmOpCode( PUSH(12)       ) => 107
+    rule #asmOpCode( PUSH(13)       ) => 108
+    rule #asmOpCode( PUSH(14)       ) => 109
+    rule #asmOpCode( PUSH(15)       ) => 110
+    rule #asmOpCode( PUSH(16)       ) => 111
+    rule #asmOpCode( PUSH(17)       ) => 112
+    rule #asmOpCode( PUSH(18)       ) => 113
+    rule #asmOpCode( PUSH(19)       ) => 114
+    rule #asmOpCode( PUSH(20)       ) => 115
+    rule #asmOpCode( PUSH(21)       ) => 116
+    rule #asmOpCode( PUSH(22)       ) => 117
+    rule #asmOpCode( PUSH(23)       ) => 118
+    rule #asmOpCode( PUSH(24)       ) => 119
+    rule #asmOpCode( PUSH(25)       ) => 120
+    rule #asmOpCode( PUSH(26)       ) => 121
+    rule #asmOpCode( PUSH(27)       ) => 122
+    rule #asmOpCode( PUSH(28)       ) => 123
+    rule #asmOpCode( PUSH(29)       ) => 124
+    rule #asmOpCode( PUSH(30)       ) => 125
+    rule #asmOpCode( PUSH(31)       ) => 126
+    rule #asmOpCode( PUSH(32)       ) => 127
+    rule #asmOpCode( DUP(1)         ) => 128
+    rule #asmOpCode( DUP(2)         ) => 129
+    rule #asmOpCode( DUP(3)         ) => 130
+    rule #asmOpCode( DUP(4)         ) => 131
+    rule #asmOpCode( DUP(5)         ) => 132
+    rule #asmOpCode( DUP(6)         ) => 133
+    rule #asmOpCode( DUP(7)         ) => 134
+    rule #asmOpCode( DUP(8)         ) => 135
+    rule #asmOpCode( DUP(9)         ) => 136
+    rule #asmOpCode( DUP(10)        ) => 137
+    rule #asmOpCode( DUP(11)        ) => 138
+    rule #asmOpCode( DUP(12)        ) => 139
+    rule #asmOpCode( DUP(13)        ) => 140
+    rule #asmOpCode( DUP(14)        ) => 141
+    rule #asmOpCode( DUP(15)        ) => 142
+    rule #asmOpCode( DUP(16)        ) => 143
+    rule #asmOpCode( SWAP(1)        ) => 144
+    rule #asmOpCode( SWAP(2)        ) => 145
+    rule #asmOpCode( SWAP(3)        ) => 146
+    rule #asmOpCode( SWAP(4)        ) => 147
+    rule #asmOpCode( SWAP(5)        ) => 148
+    rule #asmOpCode( SWAP(6)        ) => 149
+    rule #asmOpCode( SWAP(7)        ) => 150
+    rule #asmOpCode( SWAP(8)        ) => 151
+    rule #asmOpCode( SWAP(9)        ) => 152
+    rule #asmOpCode( SWAP(10)       ) => 153
+    rule #asmOpCode( SWAP(11)       ) => 154
+    rule #asmOpCode( SWAP(12)       ) => 155
+    rule #asmOpCode( SWAP(13)       ) => 156
+    rule #asmOpCode( SWAP(14)       ) => 157
+    rule #asmOpCode( SWAP(15)       ) => 158
+    rule #asmOpCode( SWAP(16)       ) => 159
+    rule #asmOpCode( LOG(0)         ) => 160
+    rule #asmOpCode( LOG(1)         ) => 161
+    rule #asmOpCode( LOG(2)         ) => 162
+    rule #asmOpCode( LOG(3)         ) => 163
+    rule #asmOpCode( LOG(4)         ) => 164
+    rule #asmOpCode( CREATE         ) => 240
+    rule #asmOpCode( CALL           ) => 241
+    rule #asmOpCode( CALLCODE       ) => 242
+    rule #asmOpCode( RETURN         ) => 243
+    rule #asmOpCode( DELEGATECALL   ) => 244
+    rule #asmOpCode( CREATE2        ) => 245
+    rule #asmOpCode( STATICCALL     ) => 250
+    rule #asmOpCode( REVERT         ) => 253
+    rule #asmOpCode( INVALID        ) => 254
+    rule #asmOpCode( SELFDESTRUCT   ) => 255
+    rule #asmOpCode( UNDEFINED(W)   ) =>   W
+
+endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/buf.md b/include/kframework/buf.md deleted file mode 100644 index 513ec692cb..0000000000 --- a/include/kframework/buf.md +++ /dev/null @@ -1,54 +0,0 @@ -Byte-Buffer Abstraction -======================= - -```k -requires "evm.md" - -module BUF-SYNTAX - imports EVM -``` - -Both `#bufStrict(SIZE, DATA)` and `#buf(SIZE, DATA)` represents a symbolic byte array of length `SIZE` bytes, left-padded with zeroes. -Version `#bufStrict` is partial and only defined when `DATA` is in the range given by `SIZE`. -It rewrites to `#buf` when data is in range, and is expected to immediately evaluate into `#buf` in all contexts. -Version `#buf` is total and artificially defined `modulo 2 ^Int (SIZE *Int 8)`. -This division is required to facilitate symbolic reasoning in Haskell backend, because Haskell has limitations -when dealing with partial functions. - -**Usage:** All symbolic byte arrays must be originally created as `#bufStrict`. -This ensures `#buf` is never present in out of range mode. -For this, definition rule RHS should always use `#bufStrict` when array is first created, but may use `#buf` when array -is just carried on from LHS without changes. Definition rule LHS should only use `#buf`. -Claims should always use `#bufStrict` in LHS and `#buf` in RHS. - -```k - syntax Bytes ::= #bufStrict ( Int , Int ) [function] - syntax Bytes ::= #buf ( Int , Int ) [function, total, smtlib(buf)] - - syntax Int ::= #ceil32 ( Int ) [macro] - // -------------------------------------- - rule #ceil32(N) => (N up/Int 32) *Int 32 - -endmodule - -module BUF - imports BUF-SYNTAX - - syntax Int ::= #powByteLen ( Int ) [function, no-evaluators] - // ------------------------------------------------------------ - // rule #powByteLen(SIZE) => 2 ^Int (SIZE *Int 8) - rule 2 ^Int (SIZE *Int 8) => #powByteLen(SIZE) [symbolic(SIZE), simplification] - - rule 0 true requires 0 <=Int SIZE [simplification] - rule SIZE true requires 0 <=Int SIZE [simplification] - - rule #bufStrict(SIZE, DATA) => #buf(SIZE, DATA) - requires #range(0 <= DATA < (2 ^Int (SIZE *Int 8))) - - rule #buf(SIZE, DATA) => #padToWidth(SIZE, #asByteStack(DATA %Int (2 ^Int (SIZE *Int 8)))) - requires 0 .Bytes [owise, concrete] // SIZE <= 0 - -endmodule -``` diff --git a/include/kframework/buf/index.html b/include/kframework/buf/index.html new file mode 100644 index 0000000000..737d3cf901 --- /dev/null +++ b/include/kframework/buf/index.html @@ -0,0 +1,237 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Byte-Buffer Abstraction

+
requires "evm.md"
+
+module BUF-SYNTAX
+    imports EVM
+
+

Both #bufStrict(SIZE, DATA) and #buf(SIZE, DATA) represents a symbolic byte array of length SIZE bytes, left-padded with zeroes. +Version #bufStrict is partial and only defined when DATA is in the range given by SIZE. +It rewrites to #buf when data is in range, and is expected to immediately evaluate into #buf in all contexts. +Version #buf is total and artificially defined modulo 2 ^Int (SIZE *Int 8). +This division is required to facilitate symbolic reasoning in Haskell backend, because Haskell has limitations +when dealing with partial functions.

+

Usage: All symbolic byte arrays must be originally created as #bufStrict. +This ensures #buf is never present in out of range mode. +For this, definition rule RHS should always use #bufStrict when array is first created, but may use #buf when array +is just carried on from LHS without changes. Definition rule LHS should only use #buf. +Claims should always use #bufStrict in LHS and #buf in RHS.

+
    syntax Bytes ::= #bufStrict ( Int , Int ) [function]
+    syntax Bytes ::= #buf ( Int , Int ) [function, total, smtlib(buf)]
+
+    syntax Int ::= #ceil32 ( Int ) [macro]
+ // --------------------------------------
+    rule #ceil32(N) => (N up/Int 32) *Int 32
+
+endmodule
+
+module BUF
+    imports BUF-SYNTAX
+
+    syntax Int ::= #powByteLen ( Int ) [function, no-evaluators]
+ // ------------------------------------------------------------
+ // rule #powByteLen(SIZE) => 2 ^Int (SIZE *Int 8)
+    rule 2 ^Int (SIZE *Int 8) => #powByteLen(SIZE) [symbolic(SIZE), simplification]
+
+    rule 0    <Int #powByteLen(SIZE) => true requires 0 <=Int SIZE [simplification]
+    rule SIZE <Int #powByteLen(SIZE) => true requires 0 <=Int SIZE [simplification]
+
+    rule #bufStrict(SIZE, DATA) => #buf(SIZE, DATA)
+      requires #range(0 <= DATA < (2 ^Int (SIZE *Int 8)))
+
+    rule #buf(SIZE, DATA) => #padToWidth(SIZE, #asByteStack(DATA %Int (2 ^Int (SIZE *Int 8))))
+      requires 0 <Int SIZE
+      [concrete]
+    rule #buf(_SIZE, _) => .Bytes [owise, concrete] // SIZE <= 0
+
+endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/data.md b/include/kframework/data.md deleted file mode 100644 index 53dc429191..0000000000 --- a/include/kframework/data.md +++ /dev/null @@ -1,23 +0,0 @@ -EVM Words -========= - -```k -requires "evm-types.md" -requires "json-rpc.md" -requires "serialization.md" -``` - -```k -module EVM-DATA - imports EVM-TYPES - imports SERIALIZATION - imports STRING-BUFFER - imports MAP-SYMBOLIC - imports SET-SYMBOLIC - imports COLLECTIONS - imports JSON-EXT -``` - -```k -endmodule -``` diff --git a/include/kframework/data/index.html b/include/kframework/data/index.html new file mode 100644 index 0000000000..df8cb43544 --- /dev/null +++ b/include/kframework/data/index.html @@ -0,0 +1,206 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

EVM Words

+
requires "evm-types.md"
+requires "json-rpc.md"
+requires "serialization.md"
+
+
module EVM-DATA
+    imports EVM-TYPES
+    imports SERIALIZATION
+    imports STRING-BUFFER
+    imports MAP-SYMBOLIC
+    imports SET-SYMBOLIC
+    imports COLLECTIONS
+    imports JSON-EXT
+
+
endmodule
+
+
+
+ + +
+ + + +
+
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/driver.md b/include/kframework/driver.md deleted file mode 100644 index 8f0e92d0d8..0000000000 --- a/include/kframework/driver.md +++ /dev/null @@ -1,575 +0,0 @@ -Ethereum Simulations -==================== - -Ethereum is using the EVM to drive updates over the world state. -Actual execution of the EVM is defined in [the EVM file](../evm). - -```k -requires "evm.md" -requires "optimizations.md" -requires "asm.md" -requires "state-utils.md" - -module ETHEREUM-SIMULATION - imports EVM - imports EVM-OPTIMIZATIONS - imports EVM-ASSEMBLY - imports STATE-UTILS -``` - -An Ethereum simulation is a list of Ethereum commands. -Some Ethereum commands take an Ethereum specification (eg. for an account or transaction). - -```k - syntax EthereumSimulation ::= ".EthereumSimulation" - | EthereumCommand EthereumSimulation - // ---------------------------------------------------------------- - rule .EthereumSimulation => . ... - rule ETC .EthereumSimulation => ETC ... - rule ETC ETS:EthereumSimulation => ETC ~> ETS ... requires ETS =/=K .EthereumSimulation - - rule #halt ~> ETC ETS:EthereumSimulation => #halt ~> ETC ~> ETS ... - - syntax EthereumSimulation ::= JSON - // ---------------------------------- - rule JSONINPUT:JSON => run JSONINPUT success .EthereumSimulation -``` - -For verification purposes, it's much easier to specify a program in terms of its op-codes and not the hex-encoding that the tests use. -To do so, we'll extend sort `JSON` with some EVM specific syntax, and provide a "pretti-fication" to the nicer input form. - -```k - syntax JSON ::= Bytes | OpCodes | Map | SubstateLogEntry | Account | TxType - // --------------------------------------------------------------------------- -``` - -### Driving Execution - -- `start` places `#next` on the `` cell so that execution of the loaded state begin. -- `flush` places `#finalize` on the `` cell. - -```k - syntax EthereumCommand ::= "start" - // ---------------------------------- - rule NORMAL start => #execute ... - rule VMTESTS start => #execute ... - - syntax EthereumCommand ::= "flush" - // ---------------------------------- - rule EXECMODE EVMC_SUCCESS #halt ~> flush => #finalizeTx(EXECMODE ==K VMTESTS) ... - rule EXECMODE _:ExceptionalStatusCode #halt ~> flush => #finalizeTx(EXECMODE ==K VMTESTS) ~> #halt ... -``` - -- `startTx` computes the sender of the transaction, and places loadTx on the `k` cell. -- `loadTx(_)` loads the next transaction to be executed into the current state. -- `finishTx` is a place-holder for performing necessary cleanup after a transaction. - -**TODO**: `loadTx(_) => loadTx_` - -```k - syntax EthereumCommand ::= "startTx" - // ------------------------------------ - rule startTx => #finalizeBlock ... - .List - - rule startTx => loadTx( #sender( #getTxData(TXID), TW, TR, TS ) ) ... - ListItem(TXID:Int) ... - - TXID - TW - TR - TS - ... - - - syntax EthereumCommand ::= loadTx ( Account ) - // --------------------------------------------- - rule loadTx(ACCTFROM) - => #accessAccounts ACCTFROM #newAddr(ACCTFROM, NONCE) #precompiledAccounts(SCHED) - ~> #loadAccessList(TA) - ~> #create ACCTFROM #newAddr(ACCTFROM, NONCE) VALUE CODE - ~> #finishTx ~> #finalizeTx(false) ~> startTx - ... - - SCHED - _ => #effectiveGasPrice(TXID) - _ => GLIMIT -Int G0(SCHED, CODE, true) - _ => ACCTFROM - _ => -1 - ListItem(TXID:Int) ... - MINER - - TXID - GLIMIT - .Account - VALUE - CODE - TA - ... - - - ACCTFROM - BAL => BAL -Int (GLIMIT *Int #effectiveGasPrice(TXID)) - NONCE - ... - - _ => .Set - _ => SetItem(MINER) - - rule loadTx(ACCTFROM) - => #accessAccounts ACCTFROM ACCTTO #precompiledAccounts(SCHED) - ~> #loadAccessList(TA) - ~> #call ACCTFROM ACCTTO ACCTTO VALUE VALUE DATA false - ~> #finishTx ~> #finalizeTx(false) ~> startTx - ... - - SCHED - _ => #effectiveGasPrice(TXID) - _ => GLIMIT -Int G0(SCHED, DATA, false) - _ => ACCTFROM - _ => -1 - ListItem(TXID:Int) ... - MINER - - TXID - GLIMIT - ACCTTO - VALUE - DATA - TA - ... - - - ACCTFROM - BAL => BAL -Int (GLIMIT *Int #effectiveGasPrice(TXID)) - NONCE => NONCE +Int 1 - ... - - _ => .Set - _ => SetItem(MINER) - requires ACCTTO =/=K .Account - - syntax EthereumCommand ::= "#finishTx" - // -------------------------------------- - rule _:ExceptionalStatusCode #halt ~> #finishTx => #popCallStack ~> #popWorldState ... - rule EVMC_REVERT #halt ~> #finishTx => #popCallStack ~> #popWorldState ~> #refund GAVAIL ... GAVAIL - - rule EVMC_SUCCESS - #halt ~> #finishTx => #mkCodeDeposit ACCT ... - ACCT - ListItem(TXID:Int) ... - - TXID - .Account - ... - - - rule EVMC_SUCCESS - #halt ~> #finishTx => #popCallStack ~> #dropWorldState ~> #refund GAVAIL ... - GAVAIL - ListItem(TXID:Int) ... - - TXID - TT - ... - - requires TT =/=K .Account - - syntax EthereumCommand ::= #loadAccessList ( JSON ) - | #loadAccessListAux ( Account , List ) - // ---------------------------------------------------------------- - rule #loadAccessList ([ .JSONs ]) => . ... - SCHED - requires Ghasaccesslist << SCHED >> - - rule #loadAccessList ([ _ ]) => . ... - SCHED - requires notBool Ghasaccesslist << SCHED >> - - rule #loadAccessList ([[ACCT, [STRG:JSONs]], REST]) - => #loadAccessListAux (#asAccount(#parseByteStackRaw(ACCT)), #parseAccessListStorageKeys([STRG])) - ~> #loadAccessList ([REST]) - ... - - SCHED - requires Ghasaccesslist << SCHED >> - - rule #loadAccessListAux (ACCT, (ListItem(STRGK) STRGKS)) - => #accessStorage ACCT STRGK:Int - ~> #loadAccessListAux (ACCT, STRGKS) - ... - - SCHED - GLIMIT => GLIMIT -Int Gaccessliststoragekey < SCHED > - - rule #loadAccessListAux (ACCT, .List) => #accessAccounts ACCT ... - SCHED - GLIMIT => GLIMIT -Int Gaccesslistaddress < SCHED > -``` - -- `exception` only clears from the `` cell if there is an exception preceding it. -- `failure_` holds the name of a test that failed if a test does fail. -- `success` sets the `` to `0` and the `` to `SUCCESS`. - -```k - syntax Mode ::= "SUCCESS" - // ------------------------- - - syntax EthereumCommand ::= "exception" | "status" StatusCode - // ------------------------------------------------------------ - rule _:ExceptionalStatusCode - #halt ~> exception => . ... - - rule status SC => . ... SC - - syntax EthereumCommand ::= "failure" String | "success" - // ------------------------------------------------------- - rule success => . ... - _ => 0 - _ => SUCCESS - - rule failure _ => . ... - rule #halt ~> failure _ => . ... -``` - -### Running Tests - -- `run` runs a given set of Ethereum tests (from the test-set). - -Note that `TEST` is sorted here so that key `"network"` comes before key `"pre"`. - -```k - syntax EthereumCommand ::= "run" JSON - // ------------------------------------- - rule run { .JSONs } => . ... - rule run { TESTID : { TEST:JSONs } , TESTS } - => run ( TESTID : { qsortJSONs(TEST) } ) - ~> #if #hasPost?( { TEST } ) #then .K #else exception #fi - ~> clear - ~> run { TESTS } - ... - - - syntax Bool ::= "#hasPost?" "(" JSON ")" [function] - // --------------------------------------------------- - rule #hasPost? ({ .JSONs }) => false - rule #hasPost? ({ (KEY:String) : _ , REST }) => (KEY in #postKeys) orBool #hasPost? ({ REST }) -``` - -- `#loadKeys` are all the JSON nodes which should be considered as loads before execution. - -```k - syntax Set ::= "#loadKeys" [function] - // ------------------------------------- - rule #loadKeys => ( SetItem("env") SetItem("pre") SetItem("rlp") SetItem("network") SetItem("genesisRLP") ) - - rule run TESTID : { KEY : (VAL:JSON) , REST } => load KEY : VAL ~> run TESTID : { REST } ... - requires KEY in #loadKeys - - rule run _TESTID : { "blocks" : [ { KEY : VAL , REST1 => REST1 }, .JSONs ] , ( REST2 => KEY : VAL , REST2 ) } ... - rule run TESTID : { "blocks" : [ { .JSONs }, .JSONs ] , REST } => run TESTID : { REST } ... -``` - -- `#execKeys` are all the JSON nodes which should be considered for execution (between loading and checking). - -```k - syntax Set ::= "#execKeys" [function] - // ------------------------------------- - rule #execKeys => ( SetItem("exec") SetItem("lastblockhash") ) - - rule run TESTID : { KEY : (VAL:JSON) , NEXT , REST } => run TESTID : { NEXT , KEY : VAL , REST } ... - requires KEY in #execKeys - - rule run _TESTID : { "exec" : (EXEC:JSON) } => loadCallState EXEC ~> start ~> flush ... - rule run _TESTID : { "lastblockhash" : (_:String) } => #startBlock ~> startTx ... - - rule load "exec" : J => loadCallState J ... - - rule loadCallState { "caller" : (ACCTFROM:Int), REST => REST } ... _ => ACCTFROM - rule loadCallState { "origin" : (ORIG:Int), REST => REST } ... _ => ORIG - rule loadCallState { "address" : (ACCTTO:Int), REST => REST } ... _ => ACCTTO - - rule loadCallState { "code" : (CODE:OpCodes), REST } => #loadProgram #asmOpCodes(CODE) ~> loadCallState { REST } ... - - rule loadCallState { KEY : ((VAL:String) => #parseWord(VAL)), _ } ... - requires KEY in (SetItem("gas") SetItem("gasPrice") SetItem("value")) - - rule loadCallState { KEY : ((VAL:String) => #parseHexWord(VAL)), _ } ... - requires KEY in (SetItem("address") SetItem("caller") SetItem("origin")) - - rule loadCallState { "code" : ((CODE:String) => #parseByteStack(CODE)), _ } ... -``` - -- `#postKeys` are a subset of `#checkKeys` which correspond to post-state account checks. -- `#checkKeys` are all the JSON nodes which should be considered as checks after execution. - -```k - syntax Set ::= "#postKeys" [function] | "#allPostKeys" [function] | "#checkKeys" [function] - // ------------------------------------------------------------------------------------------- - rule #postKeys => ( SetItem("post") SetItem("postState") SetItem("postStateHash") ) - rule #allPostKeys => ( #postKeys SetItem("expect") SetItem("export") SetItem("expet") ) - rule #checkKeys => ( #allPostKeys SetItem("logs") SetItem("out") SetItem("gas") - SetItem("blockHeader") SetItem("transactions") SetItem("uncleHeaders") SetItem("genesisBlockHeader") - ) - - rule run TESTID : { KEY : (VAL:JSON) , REST } => run TESTID : { REST } ~> check TESTID : { "post" : VAL } ... requires KEY in #allPostKeys - rule run TESTID : { KEY : (VAL:JSON) , REST } => run TESTID : { REST } ~> check TESTID : { KEY : VAL } ... requires KEY in #checkKeys andBool notBool KEY in #allPostKeys -``` - -- `#discardKeys` are all the JSON nodes in the tests which should just be ignored. - -```k - syntax Set ::= "#discardKeys" [function] - // ---------------------------------------- - rule #discardKeys => ( SetItem("//") SetItem("_info") SetItem("callcreates") SetItem("sealEngine") SetItem("transactionSequence") SetItem("chainname") ) - - rule run TESTID : { KEY : _ , REST } => run TESTID : { REST } ... requires KEY in #discardKeys -``` - -- `driver.md` specific handling of state-utils commands - -```k - rule load "account" : { ACCTID : ACCT } => loadAccount ACCTID ACCT ... - - rule loadAccount _ { "balance" : ((VAL:String) => #parseWord(VAL)), _ } ... - rule loadAccount _ { "nonce" : ((VAL:String) => #parseWord(VAL)), _ } ... - rule loadAccount _ { "code" : ((CODE:String) => #parseByteStack(CODE)), _ } ... - rule loadAccount _ { "storage" : ({ STORAGE:JSONs } => #parseMap({ STORAGE })), _ } ... - - rule loadTransaction _ { "type" : (TT:String => #asWord(#parseByteStackRaw(TT))), _ } ... - rule loadTransaction _ { "chainID" : (TC:String => #asWord(#parseByteStackRaw(TC))), _ } ... - rule loadTransaction _ { "gasLimit" : (TG:String => #asWord(#parseByteStackRaw(TG))), _ } ... - rule loadTransaction _ { "gasPrice" : (TP:String => #asWord(#parseByteStackRaw(TP))), _ } ... - rule loadTransaction _ { "nonce" : (TN:String => #asWord(#parseByteStackRaw(TN))), _ } ... - rule loadTransaction _ { "v" : (TW:String => #asWord(#parseByteStackRaw(TW))), _ } ... - rule loadTransaction _ { "value" : (TV:String => #asWord(#parseByteStackRaw(TV))), _ } ... - rule loadTransaction _ { "to" : (TT:String => #asAccount(#parseByteStackRaw(TT))), _ } ... - rule loadTransaction _ { "data" : (TI:String => #parseByteStackRaw(TI)), _ } ... - rule loadTransaction _ { "r" : (TR:String => #padToWidth(32, #parseByteStackRaw(TR))), _ } ... - rule loadTransaction _ { "s" : (TS:String => #padToWidth(32, #parseByteStackRaw(TS))), _ } ... - rule loadTransaction _ { "maxPriorityFeePerGas" : (V:String => #asWord(#parseByteStackRaw(V))), _ } ... - rule loadTransaction _ { "maxFeePerGas" : (V:String => #asWord(#parseByteStackRaw(V))), _ } ... -``` - -### Checking State - -- `check_` checks if an account/transaction appears in the world-state as stated. - -```k - syntax EthereumCommand ::= "check" JSON - // --------------------------------------- - rule #halt ~> check J:JSON => check J ~> #halt ... - - rule check DATA : { .JSONs } => . ... requires DATA =/=String "transactions" - rule check DATA : [ .JSONs ] => . ... requires DATA =/=String "ommerHeaders" - - rule check DATA : { (KEY:String) : VALUE , REST } => check DATA : { KEY : VALUE } ~> check DATA : { REST } ... - requires REST =/=K .JSONs andBool notBool DATA in (SetItem("callcreates") SetItem("transactions")) - - rule check DATA : [ { TEST } , REST ] => check DATA : { TEST } ~> check DATA : [ REST ] ... - requires DATA =/=String "transactions" - - rule check (KEY:String) : { JS:JSONs => qsortJSONs(JS) } ... - requires KEY in (SetItem("callcreates")) andBool notBool sortedJSONs(JS) - - rule check TESTID : { "post" : (POST:String) } => check "blockHeader" : { "stateRoot" : #parseWord(POST) } ~> failure TESTID ... - rule check TESTID : { "post" : { POST } } => check "account" : { POST } ~> failure TESTID ... - - rule check "account" : { ACCTID:Int : { KEY : VALUE , REST } } => check "account" : { ACCTID : { KEY : VALUE } } ~> check "account" : { ACCTID : { REST } } ... - requires REST =/=K .JSONs - - rule check "account" : { ((ACCTID:String) => #parseAddr(ACCTID)) : _ACCT } ... - rule check "account" : { (_ACCT:Int) : { "balance" : ((VAL:String) => #parseWord(VAL)) } } ... - rule check "account" : { (_ACCT:Int) : { "nonce" : ((VAL:String) => #parseWord(VAL)) } } ... - rule check "account" : { (_ACCT:Int) : { "code" : ((CODE:String) => #parseByteStack(CODE)) } } ... - rule check "account" : { (_ACCT:Int) : { "storage" : ({ STORAGE:JSONs } => #parseMap({ STORAGE })) } } ... - - rule EXECMODE - check "account" : { ACCT : { "balance" : (BAL:Int) } } => . ... - - ACCT - BAL - ... - - requires EXECMODE =/=K VMTESTS - - rule VMTESTS - check "account" : { _ACCT : { "balance" : (_:Int) } } => . ... - - rule check "account" : { ACCT : { "nonce" : (NONCE:Int) } } => . ... - - ACCT - NONCE - ... - - - rule check "account" : { ACCT : { "storage" : (STORAGE:Map) } } => . ... - - ACCT - ACCTSTORAGE - ... - - requires #removeZeros(ACCTSTORAGE) ==K STORAGE - - rule check "account" : { ACCT : { "code" : (CODE:Bytes) } } => . ... - - ACCT - CODE - ... - -``` - -- `#removeZeros` removes any entries in a map with zero values. - -```k - syntax Map ::= #removeZeros ( Map ) [function] - | #removeZeros ( List , Map ) [function, klabel(#removeZerosAux)] - // ------------------------------------------------------------------------------ - rule #removeZeros( M ) => #removeZeros(Set2List(keys(M)), M) - rule #removeZeros( .List, .Map ) => .Map - rule #removeZeros( ListItem(KEY) L, KEY |-> 0 REST ) => #removeZeros(L, REST) - rule #removeZeros( ListItem(KEY) L, KEY |-> VALUE REST ) => KEY |-> VALUE #removeZeros(L, REST) requires VALUE =/=K 0 -``` - -Here we check the other post-conditions associated with an EVM test. - -```k - rule check TESTID : { "out" : OUT } => check "out" : OUT ~> failure TESTID ... - // --------------------------------------------------------------------------------------- - rule check "out" : ((OUT:String) => #parseByteStack(OUT)) ... - rule check "out" : OUT => . ... OUT - - rule check TESTID : { "logs" : LOGS } => check "logs" : LOGS ~> failure TESTID ... - // ------------------------------------------------------------------------------------------- - rule check "logs" : HASH:String => . ... SL requires #parseHexBytes(Keccak256(#rlpEncodeLogs(SL))) ==K #parseByteStack(HASH) - - rule check TESTID : { "gas" : GLEFT } => check "gas" : GLEFT ~> failure TESTID ... - // ------------------------------------------------------------------------------------------- - rule check "gas" : ((GLEFT:String) => #parseWord(GLEFT)) ... - rule check "gas" : GLEFT => . ... GLEFT - - rule check TESTID : { "blockHeader" : BLOCKHEADER } => check "blockHeader" : BLOCKHEADER ~> failure TESTID - // ---------------------------------------------------------------------------------------------------------- - rule check "blockHeader" : { KEY : VALUE , REST } => check "blockHeader" : { KEY : VALUE } ~> check "blockHeader" : { REST } ... - requires REST =/=K .JSONs - - rule check "blockHeader" : { _KEY : (VALUE:String => #parseByteStack(VALUE)) } ... - - rule check "blockHeader" : { KEY : (VALUE:Bytes => #asWord(VALUE)) } ... - requires KEY in ( SetItem("coinbase") SetItem("difficulty") SetItem("gasLimit") SetItem("gasUsed") - SetItem("mixHash") SetItem("nonce") SetItem("number") SetItem("parentHash") - SetItem("receiptTrie") SetItem("stateRoot") SetItem("timestamp") - SetItem("transactionsTrie") SetItem("uncleHash") SetItem("baseFeePerGas") - ) - - rule check "blockHeader" : { "bloom" : VALUE } => . ... VALUE - rule check "blockHeader" : { "coinbase" : VALUE } => . ... VALUE - rule check "blockHeader" : { "difficulty" : VALUE } => . ... VALUE - rule check "blockHeader" : { "extraData" : VALUE } => . ... VALUE - rule check "blockHeader" : { "gasLimit" : VALUE } => . ... VALUE - rule check "blockHeader" : { "gasUsed" : VALUE } => . ... VALUE - rule check "blockHeader" : { "mixHash" : VALUE } => . ... VALUE - rule check "blockHeader" : { "nonce" : VALUE } => . ... VALUE - rule check "blockHeader" : { "number" : VALUE } => . ... VALUE - rule check "blockHeader" : { "parentHash" : VALUE } => . ... VALUE - rule check "blockHeader" : { "receiptTrie" : VALUE } => . ... VALUE - rule check "blockHeader" : { "stateRoot" : VALUE } => . ... VALUE - rule check "blockHeader" : { "timestamp" : VALUE } => . ... VALUE - rule check "blockHeader" : { "transactionsTrie" : VALUE } => . ... VALUE - rule check "blockHeader" : { "uncleHash" : VALUE } => . ... VALUE - rule check "blockHeader" : { "baseFeePerGas" : VALUE } => . ... VALUE - - rule check "blockHeader" : { "hash": HASH:Bytes } => . ... - HP - HO - HC - HR - HT - HE - HB - HD - HI - HL - HG - HS - HX - HM - HN - HF - requires #blockHeaderHash(HP, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN) ==Int #asWord(HASH) - orBool #blockHeaderHash(HP, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN, HF) ==Int #asWord(HASH) - - rule check TESTID : { "genesisBlockHeader" : BLOCKHEADER } => check "genesisBlockHeader" : BLOCKHEADER ~> failure TESTID - // ------------------------------------------------------------------------------------------------------------------------ - rule check "genesisBlockHeader" : { KEY : VALUE , REST } => check "genesisBlockHeader" : { KEY : VALUE } ~> check "genesisBlockHeader" : { REST } ... - requires REST =/=K .JSONs - - rule check "genesisBlockHeader" : { KEY : _ } => .K ... requires KEY =/=String "hash" - - rule check "genesisBlockHeader" : { "hash": (HASH:String => #asWord(#parseByteStack(HASH))) } ... - rule check "genesisBlockHeader" : { "hash": HASH } => . ... - ... ListItem(HASH) ListItem(_) - - rule check TESTID : { "transactions" : TRANSACTIONS } => check "transactions" : TRANSACTIONS ~> failure TESTID ... - // --------------------------------------------------------------------------------------------------------------------------- - rule check "transactions" : [ .JSONs ] => . ... .List - rule check "transactions" : { .JSONs } => . ... ListItem(_) => .List ... - - rule check "transactions" : [ TRANSACTION , REST ] => check "transactions" : TRANSACTION ~> check "transactions" : [ REST ] ... - rule check "transactions" : { KEY : VALUE , REST } => check "transactions" : (KEY : VALUE) ~> check "transactions" : { REST } ... - - rule check "transactions" : ("sender" : (VALUE:Bytes => #asAccount(VALUE))) ... - rule check "transactions" : (_KEY : (VALUE:String => #parseByteStack(VALUE))) ... - rule check "transactions" : ("to" : (VALUE:Bytes => #asAccount(VALUE))) ... - rule check "transactions" : ( KEY : (VALUE:Bytes => #padToWidth(32, VALUE))) ... requires KEY in (SetItem("r") SetItem("s")) andBool lengthBytes(VALUE) check "transactions" : ( KEY : (VALUE:Bytes => #asWord(VALUE))) ... requires KEY in (SetItem("gasLimit") SetItem("gasPrice") SetItem("nonce") SetItem("v") SetItem("value") SetItem("chainId") SetItem("type") SetItem("maxFeePerGas") SetItem("maxPriorityFeePerGas")) - rule check "transactions" : ("type" : (VALUE:Int => #asmTxPrefix(VALUE))) ... - - rule check "transactions" : "accessList" : [ ACCESSLIST , REST ] => check "transactions" : "accessList" : ACCESSLIST ~> check "transactions" : "accessList" : [ REST ] ... - rule check "transactions" : "accessList" : { "address" : V1 , "storageKeys": V2 , .JSONs } => check "transactions" : "accessList" : "address" : #parseHexWord(V1) : "storageKeys" : V2 ... - rule check "transactions" : "accessList" : "address" : ADDR : "storageKeys" : [ KEY , REST ] => check "transactions" : "accessList" : "address" : ADDR : "storageKeys" : #parseHexWord(KEY) ~> check "transactions" : "accessList" : "address" : ADDR : "storageKeys" : [ REST ] ... - - rule check "transactions" : "accessList" : "address" : _ : "storageKeys" : [ .JSONs ] => . ... - rule check "transactions" : "accessList" : [ .JSONs ] => . ... - - rule check "transactions" : "accessList" : "address" : ADDR : "storageKeys" : KEY => . ... ListItem(TXID) ... TXID TA ... requires isInAccessList(ADDR, KEY, TA) - rule check "transactions" : ("data" : VALUE) => . ... ListItem(TXID) ... TXID VALUE ... - rule check "transactions" : ("gasLimit" : VALUE) => . ... ListItem(TXID) ... TXID VALUE ... - rule check "transactions" : ("gasPrice" : VALUE) => . ... ListItem(TXID) ... TXID VALUE ... - rule check "transactions" : ("nonce" : VALUE) => . ... ListItem(TXID) ... TXID VALUE ... - rule check "transactions" : ("r" : VALUE) => . ... ListItem(TXID) ... TXID VALUE ... - rule check "transactions" : ("s" : VALUE) => . ... ListItem(TXID) ... TXID VALUE ... - rule check "transactions" : ("to" : VALUE) => . ... ListItem(TXID) ... TXID VALUE ... - rule check "transactions" : ("v" : VALUE) => . ... ListItem(TXID) ... TXID VALUE ... - rule check "transactions" : ("value" : VALUE) => . ... ListItem(TXID) ... TXID VALUE ... - rule check "transactions" : ("chainId" : VALUE) => . ... ListItem(TXID) ... TXID VALUE ... - rule check "transactions" : ("type" : VALUE) => . ... ListItem(TXID) ... TXID VALUE ... - rule check "transactions" : ("maxFeePerGas" : VALUE) => . ... ListItem(TXID) ... TXID VALUE ... - rule check "transactions" : ("maxPriorityFeePerGas" : VALUE) => . ... ListItem(TXID) ... TXID VALUE ... - rule check "transactions" : ("sender" : VALUE) => . ... ListItem(TXID) ... TXID TW TR TS ... requires #sender( #getTxData(TXID), TW, TR, TS ) ==K VALUE - - syntax Bool ::= isInAccessListStorage ( Int , JSON ) [function] - | isInAccessList ( Account , Int , JSON ) [function] - // ------------------------------------------------------------------ - rule isInAccessList(_ , _ , [.JSONs ]) => false - rule isInAccessList(ADDR, KEY, [[ACCT, [STRG:JSONs]], REST]) => #if ADDR ==K #asAccount(#parseByteStackRaw(ACCT)) - #then isInAccessListStorage (KEY, [STRG]) orBool isInAccessList(ADDR, KEY, [REST]) - #else isInAccessList(ADDR, KEY, [REST]) #fi - - rule isInAccessListStorage(_ , [.JSONs ]) => false - rule isInAccessListStorage(KEY, [SKEY, REST]) => #if KEY ==Int #asWord(#parseByteStackRaw(SKEY)) - #then true - #else isInAccessListStorage(KEY, [REST]) #fi -``` - -TODO: case with nonzero ommers. - -```k - rule check TESTID : { "uncleHeaders" : OMMERS } => check "ommerHeaders" : OMMERS ~> failure TESTID ... - // --------------------------------------------------------------------------------------------------------------- - rule check "ommerHeaders" : [ .JSONs ] => . ... [ .JSONs ] -``` - -```k -endmodule -``` diff --git a/include/kframework/driver/index.html b/include/kframework/driver/index.html new file mode 100644 index 0000000000..f0dab1c51a --- /dev/null +++ b/include/kframework/driver/index.html @@ -0,0 +1,731 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Ethereum Simulations

+

Ethereum is using the EVM to drive updates over the world state. +Actual execution of the EVM is defined in the EVM file.

+
requires "evm.md"
+requires "optimizations.md"
+requires "asm.md"
+requires "state-utils.md"
+
+module ETHEREUM-SIMULATION
+    imports EVM
+    imports EVM-OPTIMIZATIONS
+    imports EVM-ASSEMBLY
+    imports STATE-UTILS
+
+

An Ethereum simulation is a list of Ethereum commands. +Some Ethereum commands take an Ethereum specification (eg. for an account or transaction).

+
    syntax EthereumSimulation ::= ".EthereumSimulation"
+                                | EthereumCommand EthereumSimulation
+ // ----------------------------------------------------------------
+    rule <k> .EthereumSimulation                        => .          ... </k>
+    rule <k> ETC                 .EthereumSimulation    => ETC        ... </k>
+    rule <k> ETC                 ETS:EthereumSimulation => ETC ~> ETS ... </k> requires ETS =/=K .EthereumSimulation
+
+    rule <k> #halt ~> ETC ETS:EthereumSimulation => #halt ~> ETC ~> ETS ... </k>
+
+    syntax EthereumSimulation ::= JSON
+ // ----------------------------------
+    rule <k> JSONINPUT:JSON => run JSONINPUT success .EthereumSimulation </k>
+
+

For verification purposes, it's much easier to specify a program in terms of its op-codes and not the hex-encoding that the tests use. +To do so, we'll extend sort JSON with some EVM specific syntax, and provide a "pretti-fication" to the nicer input form.

+
    syntax JSON ::= Bytes | OpCodes | Map | SubstateLogEntry | Account | TxType
+ // ---------------------------------------------------------------------------
+
+

Driving Execution

+
    +
  • start places #next on the <k> cell so that execution of the loaded state begin.
  • +
  • flush places #finalize on the <k> cell.
  • +
+
    syntax EthereumCommand ::= "start"
+ // ----------------------------------
+    rule <mode> NORMAL  </mode> <k> start => #execute ... </k>
+    rule <mode> VMTESTS </mode> <k> start => #execute ... </k>
+
+    syntax EthereumCommand ::= "flush"
+ // ----------------------------------
+    rule <mode> EXECMODE </mode> <statusCode> EVMC_SUCCESS            </statusCode> <k> #halt ~> flush => #finalizeTx(EXECMODE ==K VMTESTS)          ... </k>
+    rule <mode> EXECMODE </mode> <statusCode> _:ExceptionalStatusCode </statusCode> <k> #halt ~> flush => #finalizeTx(EXECMODE ==K VMTESTS) ~> #halt ... </k>
+
+
    +
  • startTx computes the sender of the transaction, and places loadTx on the k cell.
  • +
  • loadTx(_) loads the next transaction to be executed into the current state.
  • +
  • finishTx is a place-holder for performing necessary cleanup after a transaction.
  • +
+

TODO: loadTx(_) => loadTx_

+
    syntax EthereumCommand ::= "startTx"
+ // ------------------------------------
+    rule <k> startTx => #finalizeBlock ... </k>
+         <txPending> .List </txPending>
+
+    rule <k> startTx => loadTx( #sender( #getTxData(TXID), TW, TR, TS ) ) ... </k>
+         <txPending> ListItem(TXID:Int) ... </txPending>
+         <message>
+           <msgID>      TXID </msgID>
+           <sigV>       TW   </sigV>
+           <sigR>       TR   </sigR>
+           <sigS>       TS   </sigS>
+           ...
+         </message>
+
+    syntax EthereumCommand ::= loadTx ( Account )
+ // ---------------------------------------------
+    rule <k> loadTx(ACCTFROM)
+          => #accessAccounts ACCTFROM #newAddr(ACCTFROM, NONCE) #precompiledAccounts(SCHED)
+          ~> #loadAccessList(TA)
+          ~> #create ACCTFROM #newAddr(ACCTFROM, NONCE) VALUE CODE
+          ~> #finishTx ~> #finalizeTx(false) ~> startTx
+         ...
+         </k>
+         <schedule> SCHED </schedule>
+         <gasPrice> _ => #effectiveGasPrice(TXID) </gasPrice>
+         <callGas> _ => GLIMIT -Int G0(SCHED, CODE, true) </callGas>
+         <origin> _ => ACCTFROM </origin>
+         <callDepth> _ => -1 </callDepth>
+         <txPending> ListItem(TXID:Int) ... </txPending>
+         <coinbase> MINER </coinbase>
+         <message>
+           <msgID>      TXID     </msgID>
+           <txGasLimit> GLIMIT   </txGasLimit>
+           <to>         .Account </to>
+           <value>      VALUE    </value>
+           <data>       CODE     </data>
+           <txAccess>   TA       </txAccess>
+           ...
+         </message>
+         <account>
+           <acctID> ACCTFROM </acctID>
+           <balance> BAL => BAL -Int (GLIMIT *Int #effectiveGasPrice(TXID)) </balance>
+           <nonce> NONCE </nonce>
+           ...
+         </account>
+         <accessedAccounts> _ => .Set </accessedAccounts>
+         <touchedAccounts> _ => SetItem(MINER) </touchedAccounts>
+
+    rule <k> loadTx(ACCTFROM)
+          => #accessAccounts ACCTFROM ACCTTO #precompiledAccounts(SCHED)
+          ~> #loadAccessList(TA)
+          ~> #call ACCTFROM ACCTTO ACCTTO VALUE VALUE DATA false
+          ~> #finishTx ~> #finalizeTx(false) ~> startTx
+         ...
+         </k>
+         <schedule> SCHED </schedule>
+         <gasPrice> _ => #effectiveGasPrice(TXID) </gasPrice>
+         <callGas> _ => GLIMIT -Int G0(SCHED, DATA, false) </callGas>
+         <origin> _ => ACCTFROM </origin>
+         <callDepth> _ => -1 </callDepth>
+         <txPending> ListItem(TXID:Int) ... </txPending>
+         <coinbase> MINER </coinbase>
+         <message>
+           <msgID>      TXID   </msgID>
+           <txGasLimit> GLIMIT </txGasLimit>
+           <to>         ACCTTO </to>
+           <value>      VALUE  </value>
+           <data>       DATA   </data>
+           <txAccess>   TA     </txAccess>
+           ...
+         </message>
+         <account>
+           <acctID> ACCTFROM </acctID>
+           <balance> BAL => BAL -Int (GLIMIT *Int #effectiveGasPrice(TXID)) </balance>
+           <nonce> NONCE => NONCE +Int 1 </nonce>
+           ...
+         </account>
+         <accessedAccounts> _ => .Set </accessedAccounts>
+         <touchedAccounts> _ => SetItem(MINER) </touchedAccounts>
+      requires ACCTTO =/=K .Account
+
+    syntax EthereumCommand ::= "#finishTx"
+ // --------------------------------------
+    rule <statusCode> _:ExceptionalStatusCode </statusCode> <k> #halt ~> #finishTx => #popCallStack ~> #popWorldState                   ... </k>
+    rule <statusCode> EVMC_REVERT             </statusCode> <k> #halt ~> #finishTx => #popCallStack ~> #popWorldState ~> #refund GAVAIL ... </k> <gas> GAVAIL </gas>
+
+    rule <statusCode> EVMC_SUCCESS </statusCode>
+         <k> #halt ~> #finishTx => #mkCodeDeposit ACCT ... </k>
+         <id> ACCT </id>
+         <txPending> ListItem(TXID:Int) ... </txPending>
+         <message>
+           <msgID> TXID     </msgID>
+           <to>    .Account </to>
+           ...
+         </message>
+
+    rule <statusCode> EVMC_SUCCESS </statusCode>
+         <k> #halt ~> #finishTx => #popCallStack ~> #dropWorldState ~> #refund GAVAIL ... </k>
+         <gas> GAVAIL </gas>
+         <txPending> ListItem(TXID:Int) ... </txPending>
+         <message>
+           <msgID> TXID </msgID>
+           <to>    TT   </to>
+           ...
+         </message>
+      requires TT =/=K .Account
+
+    syntax EthereumCommand ::= #loadAccessList ( JSON )
+                             | #loadAccessListAux ( Account , List )
+ // ----------------------------------------------------------------
+    rule <k> #loadAccessList ([ .JSONs ]) => . ... </k>
+         <schedule> SCHED </schedule>
+      requires Ghasaccesslist << SCHED >>
+
+    rule <k> #loadAccessList ([ _ ]) => . ... </k>
+         <schedule> SCHED </schedule>
+      requires notBool Ghasaccesslist << SCHED >>
+
+    rule <k> #loadAccessList ([[ACCT, [STRG:JSONs]], REST])
+          => #loadAccessListAux (#asAccount(#parseByteStackRaw(ACCT)), #parseAccessListStorageKeys([STRG]))
+          ~> #loadAccessList ([REST])
+         ...
+         </k>
+         <schedule> SCHED </schedule>
+      requires Ghasaccesslist << SCHED >>
+
+    rule <k> #loadAccessListAux (ACCT, (ListItem(STRGK) STRGKS))
+          => #accessStorage ACCT STRGK:Int
+          ~> #loadAccessListAux (ACCT, STRGKS)
+         ...
+         </k>
+         <schedule> SCHED </schedule>
+         <callGas> GLIMIT => GLIMIT -Int Gaccessliststoragekey < SCHED > </callGas>
+
+    rule <k> #loadAccessListAux (ACCT, .List) => #accessAccounts ACCT ... </k>
+         <schedule> SCHED </schedule>
+         <callGas> GLIMIT => GLIMIT -Int Gaccesslistaddress < SCHED > </callGas>
+
+
    +
  • exception only clears from the <k> cell if there is an exception preceding it.
  • +
  • failure_ holds the name of a test that failed if a test does fail.
  • +
  • success sets the <exit-code> to 0 and the <mode> to SUCCESS.
  • +
+
    syntax Mode ::= "SUCCESS"
+ // -------------------------
+
+    syntax EthereumCommand ::= "exception" | "status" StatusCode
+ // ------------------------------------------------------------
+    rule <statusCode> _:ExceptionalStatusCode </statusCode>
+         <k> #halt ~> exception => . ... </k>
+
+    rule <k> status SC => . ... </k> <statusCode> SC </statusCode>
+
+    syntax EthereumCommand ::= "failure" String | "success"
+ // -------------------------------------------------------
+    rule <k> success => . ... </k>
+         <exit-code> _ => 0 </exit-code>
+         <mode> _ => SUCCESS </mode>
+
+    rule <k>          failure _ => . ... </k>
+    rule <k> #halt ~> failure _ => . ... </k>
+
+

Running Tests

+
    +
  • run runs a given set of Ethereum tests (from the test-set).
  • +
+

Note that TEST is sorted here so that key "network" comes before key "pre".

+
    syntax EthereumCommand ::= "run" JSON
+ // -------------------------------------
+    rule <k> run { .JSONs } => . ... </k>
+    rule <k> run { TESTID : { TEST:JSONs } , TESTS }
+          => run ( TESTID : { qsortJSONs(TEST) } )
+          ~> #if #hasPost?( { TEST } ) #then .K #else exception #fi
+          ~> clear
+          ~> run { TESTS }
+         ...
+         </k>
+
+    syntax Bool ::= "#hasPost?" "(" JSON ")" [function]
+ // ---------------------------------------------------
+    rule #hasPost? ({ .JSONs }) => false
+    rule #hasPost? ({ (KEY:String) : _ , REST }) => (KEY in #postKeys) orBool #hasPost? ({ REST })
+
+
    +
  • #loadKeys are all the JSON nodes which should be considered as loads before execution.
  • +
+
    syntax Set ::= "#loadKeys" [function]
+ // -------------------------------------
+    rule #loadKeys => ( SetItem("env") SetItem("pre") SetItem("rlp") SetItem("network") SetItem("genesisRLP") )
+
+    rule <k> run  TESTID : { KEY : (VAL:JSON) , REST } => load KEY : VAL ~> run TESTID : { REST } ... </k>
+      requires KEY in #loadKeys
+
+    rule <k> run _TESTID : { "blocks" : [ { KEY : VAL , REST1 => REST1 }, .JSONs ] , ( REST2 => KEY : VAL , REST2 ) } ... </k>
+    rule <k> run  TESTID : { "blocks" : [ { .JSONs }, .JSONs ] , REST } => run TESTID : { REST }                      ... </k>
+
+
    +
  • #execKeys are all the JSON nodes which should be considered for execution (between loading and checking).
  • +
+
    syntax Set ::= "#execKeys" [function]
+ // -------------------------------------
+    rule #execKeys => ( SetItem("exec") SetItem("lastblockhash") )
+
+    rule <k> run  TESTID : { KEY : (VAL:JSON) , NEXT , REST } => run TESTID : { NEXT , KEY : VAL , REST } ... </k>
+      requires KEY in #execKeys
+
+    rule <k> run _TESTID : { "exec" : (EXEC:JSON) } => loadCallState EXEC ~> start ~> flush ... </k>
+    rule <k> run _TESTID : { "lastblockhash" : (_:String) } => #startBlock ~> startTx    ... </k>
+
+    rule <k> load "exec" : J => loadCallState J ... </k>
+
+    rule <k> loadCallState { "caller" : (ACCTFROM:Int), REST => REST } ... </k> <caller> _ => ACCTFROM </caller>
+    rule <k> loadCallState { "origin" : (ORIG:Int), REST => REST }     ... </k> <origin> _ => ORIG     </origin>
+    rule <k> loadCallState { "address" : (ACCTTO:Int), REST => REST }  ... </k> <id>     _ => ACCTTO   </id>
+
+    rule <k> loadCallState { "code" : (CODE:OpCodes), REST } => #loadProgram #asmOpCodes(CODE) ~> loadCallState { REST } ... </k>
+
+    rule <k> loadCallState { KEY : ((VAL:String) => #parseWord(VAL)), _ } ... </k>
+      requires KEY in (SetItem("gas") SetItem("gasPrice") SetItem("value"))
+
+    rule <k> loadCallState { KEY : ((VAL:String) => #parseHexWord(VAL)), _ } ... </k>
+      requires KEY in (SetItem("address") SetItem("caller") SetItem("origin"))
+
+    rule <k> loadCallState { "code" : ((CODE:String) => #parseByteStack(CODE)), _ } ... </k>
+
+
    +
  • #postKeys are a subset of #checkKeys which correspond to post-state account checks.
  • +
  • #checkKeys are all the JSON nodes which should be considered as checks after execution.
  • +
+
    syntax Set ::= "#postKeys" [function] | "#allPostKeys" [function] | "#checkKeys" [function]
+ // -------------------------------------------------------------------------------------------
+    rule #postKeys    => ( SetItem("post") SetItem("postState") SetItem("postStateHash") )
+    rule #allPostKeys => ( #postKeys SetItem("expect") SetItem("export") SetItem("expet") )
+    rule #checkKeys   => ( #allPostKeys SetItem("logs") SetItem("out") SetItem("gas")
+                           SetItem("blockHeader") SetItem("transactions") SetItem("uncleHeaders") SetItem("genesisBlockHeader")
+                         )
+
+    rule <k> run TESTID : { KEY : (VAL:JSON) , REST } => run TESTID : { REST } ~> check TESTID : { "post" : VAL } ... </k> requires KEY in #allPostKeys
+    rule <k> run TESTID : { KEY : (VAL:JSON) , REST } => run TESTID : { REST } ~> check TESTID : { KEY    : VAL } ... </k> requires KEY in #checkKeys andBool notBool KEY in #allPostKeys
+
+
    +
  • #discardKeys are all the JSON nodes in the tests which should just be ignored.
  • +
+
    syntax Set ::= "#discardKeys" [function]
+ // ----------------------------------------
+    rule #discardKeys => ( SetItem("//") SetItem("_info") SetItem("callcreates") SetItem("sealEngine") SetItem("transactionSequence") SetItem("chainname") )
+
+    rule <k> run TESTID : { KEY : _ , REST } => run TESTID : { REST } ... </k> requires KEY in #discardKeys
+
+
    +
  • driver.md specific handling of state-utils commands
  • +
+
    rule <k> load "account" : { ACCTID : ACCT } => loadAccount ACCTID ACCT ... </k>
+
+    rule <k> loadAccount _ { "balance" : ((VAL:String)      => #parseWord(VAL)),        _ } ... </k>
+    rule <k> loadAccount _ { "nonce"   : ((VAL:String)      => #parseWord(VAL)),        _ } ... </k>
+    rule <k> loadAccount _ { "code"    : ((CODE:String)     => #parseByteStack(CODE)),  _ } ... </k>
+    rule <k> loadAccount _ { "storage" : ({ STORAGE:JSONs } => #parseMap({ STORAGE })), _ } ... </k>
+
+    rule <k> loadTransaction _ { "type"                 : (TT:String => #asWord(#parseByteStackRaw(TT))), _         } ... </k>
+    rule <k> loadTransaction _ { "chainID"              : (TC:String => #asWord(#parseByteStackRaw(TC))), _         } ... </k>
+    rule <k> loadTransaction _ { "gasLimit"             : (TG:String => #asWord(#parseByteStackRaw(TG))), _         } ... </k>
+    rule <k> loadTransaction _ { "gasPrice"             : (TP:String => #asWord(#parseByteStackRaw(TP))), _         } ... </k>
+    rule <k> loadTransaction _ { "nonce"                : (TN:String => #asWord(#parseByteStackRaw(TN))), _         } ... </k>
+    rule <k> loadTransaction _ { "v"                    : (TW:String => #asWord(#parseByteStackRaw(TW))), _         } ... </k>
+    rule <k> loadTransaction _ { "value"                : (TV:String => #asWord(#parseByteStackRaw(TV))), _         } ... </k>
+    rule <k> loadTransaction _ { "to"                   : (TT:String => #asAccount(#parseByteStackRaw(TT))), _      } ... </k>
+    rule <k> loadTransaction _ { "data"                 : (TI:String => #parseByteStackRaw(TI)), _                  } ... </k>
+    rule <k> loadTransaction _ { "r"                    : (TR:String => #padToWidth(32, #parseByteStackRaw(TR))), _ } ... </k>
+    rule <k> loadTransaction _ { "s"                    : (TS:String => #padToWidth(32, #parseByteStackRaw(TS))), _ } ... </k>
+    rule <k> loadTransaction _ { "maxPriorityFeePerGas" : (V:String  => #asWord(#parseByteStackRaw(V))), _          } ... </k>
+    rule <k> loadTransaction _ { "maxFeePerGas"         : (V:String  => #asWord(#parseByteStackRaw(V))), _          } ... </k>
+
+

Checking State

+
    +
  • check_ checks if an account/transaction appears in the world-state as stated.
  • +
+
    syntax EthereumCommand ::= "check" JSON
+ // ---------------------------------------
+    rule <k> #halt ~> check J:JSON => check J ~> #halt ... </k>
+
+    rule <k> check DATA : { .JSONs } => . ... </k> requires DATA =/=String "transactions"
+    rule <k> check DATA : [ .JSONs ] => . ... </k> requires DATA =/=String "ommerHeaders"
+
+    rule <k> check DATA : { (KEY:String) : VALUE , REST } => check DATA : { KEY : VALUE } ~> check DATA : { REST } ... </k>
+      requires REST =/=K .JSONs andBool notBool DATA in (SetItem("callcreates") SetItem("transactions"))
+
+    rule <k> check DATA : [ { TEST } , REST ] => check DATA : { TEST } ~> check DATA : [ REST ] ... </k>
+      requires DATA =/=String "transactions"
+
+    rule <k> check (KEY:String) : { JS:JSONs => qsortJSONs(JS) } ... </k>
+      requires KEY in (SetItem("callcreates")) andBool notBool sortedJSONs(JS)
+
+    rule <k> check TESTID : { "post" : (POST:String) } => check "blockHeader" : {  "stateRoot" : #parseWord(POST) } ~> failure TESTID ... </k>
+    rule <k> check TESTID : { "post" : { POST } } => check "account" : { POST } ~> failure TESTID ... </k>
+
+    rule <k> check "account" : { ACCTID:Int : { KEY : VALUE , REST } } => check "account" : { ACCTID : { KEY : VALUE } } ~> check "account" : { ACCTID : { REST } } ... </k>
+      requires REST =/=K .JSONs
+
+    rule <k> check "account" : { ((ACCTID:String) => #parseAddr(ACCTID)) : _ACCT }                             ... </k>
+    rule <k> check "account" : { (_ACCT:Int) : { "balance" : ((VAL:String)      => #parseWord(VAL)) } }        ... </k>
+    rule <k> check "account" : { (_ACCT:Int) : { "nonce"   : ((VAL:String)      => #parseWord(VAL)) } }        ... </k>
+    rule <k> check "account" : { (_ACCT:Int) : { "code"    : ((CODE:String)     => #parseByteStack(CODE)) } }  ... </k>
+    rule <k> check "account" : { (_ACCT:Int) : { "storage" : ({ STORAGE:JSONs } => #parseMap({ STORAGE })) } } ... </k>
+
+    rule <mode> EXECMODE </mode>
+         <k> check "account" : { ACCT : { "balance" : (BAL:Int) } } => . ... </k>
+         <account>
+           <acctID> ACCT </acctID>
+           <balance> BAL </balance>
+           ...
+         </account>
+      requires EXECMODE =/=K VMTESTS
+
+    rule <mode> VMTESTS </mode>
+         <k> check "account" : { _ACCT : { "balance" : (_:Int) } } => . ... </k>
+
+    rule <k> check "account" : {  ACCT : { "nonce" : (NONCE:Int) } } => . ... </k>
+         <account>
+           <acctID> ACCT </acctID>
+           <nonce> NONCE </nonce>
+           ...
+         </account>
+
+    rule <k> check "account" : { ACCT : { "storage" : (STORAGE:Map) } } => . ... </k>
+         <account>
+           <acctID> ACCT </acctID>
+           <storage> ACCTSTORAGE </storage>
+           ...
+         </account>
+      requires #removeZeros(ACCTSTORAGE) ==K STORAGE
+
+    rule <k> check "account" : { ACCT : { "code" : (CODE:Bytes) } } => . ... </k>
+         <account>
+           <acctID> ACCT </acctID>
+           <code> CODE </code>
+           ...
+         </account>
+
+
    +
  • #removeZeros removes any entries in a map with zero values.
  • +
+
    syntax Map ::= #removeZeros ( Map ) [function]
+                 | #removeZeros ( List , Map ) [function, klabel(#removeZerosAux)]
+ // ------------------------------------------------------------------------------
+    rule #removeZeros( M )                                   => #removeZeros(Set2List(keys(M)), M)
+    rule #removeZeros( .List, .Map )                         => .Map
+    rule #removeZeros( ListItem(KEY) L, KEY |-> 0 REST )     => #removeZeros(L, REST)
+    rule #removeZeros( ListItem(KEY) L, KEY |-> VALUE REST ) => KEY |-> VALUE #removeZeros(L, REST) requires VALUE =/=K 0
+
+

Here we check the other post-conditions associated with an EVM test.

+
    rule <k> check TESTID : { "out" : OUT } => check "out" : OUT ~> failure TESTID ... </k>
+ // ---------------------------------------------------------------------------------------
+    rule <k> check "out" : ((OUT:String) => #parseByteStack(OUT)) ... </k>
+    rule <k> check "out" : OUT => . ... </k> <output> OUT </output>
+
+    rule <k> check TESTID : { "logs" : LOGS } => check "logs" : LOGS ~> failure TESTID ... </k>
+ // -------------------------------------------------------------------------------------------
+    rule <k> check "logs" : HASH:String => . ... </k> <log> SL </log> requires #parseHexBytes(Keccak256(#rlpEncodeLogs(SL))) ==K #parseByteStack(HASH)
+
+    rule <k> check TESTID : { "gas" : GLEFT } => check "gas" : GLEFT ~> failure TESTID ... </k>
+ // -------------------------------------------------------------------------------------------
+    rule <k> check "gas" : ((GLEFT:String) => #parseWord(GLEFT)) ... </k>
+    rule <k> check "gas" : GLEFT => . ... </k> <gas> GLEFT </gas>
+
+    rule check TESTID : { "blockHeader" : BLOCKHEADER } => check "blockHeader" : BLOCKHEADER ~> failure TESTID
+ // ----------------------------------------------------------------------------------------------------------
+    rule <k> check "blockHeader" : { KEY : VALUE , REST } => check "blockHeader" : { KEY : VALUE } ~> check "blockHeader" : { REST } ... </k>
+      requires REST =/=K .JSONs
+
+    rule <k> check "blockHeader" : { _KEY : (VALUE:String => #parseByteStack(VALUE)) } ... </k>
+
+    rule <k> check "blockHeader" : {  KEY : (VALUE:Bytes => #asWord(VALUE)) } ... </k>
+      requires KEY in ( SetItem("coinbase") SetItem("difficulty") SetItem("gasLimit") SetItem("gasUsed")
+                        SetItem("mixHash") SetItem("nonce") SetItem("number") SetItem("parentHash")
+                        SetItem("receiptTrie") SetItem("stateRoot") SetItem("timestamp")
+                        SetItem("transactionsTrie") SetItem("uncleHash") SetItem("baseFeePerGas")
+                      )
+
+    rule <k> check "blockHeader" : { "bloom"            : VALUE } => . ... </k> <logsBloom>        VALUE </logsBloom>
+    rule <k> check "blockHeader" : { "coinbase"         : VALUE } => . ... </k> <coinbase>         VALUE </coinbase>
+    rule <k> check "blockHeader" : { "difficulty"       : VALUE } => . ... </k> <difficulty>       VALUE </difficulty>
+    rule <k> check "blockHeader" : { "extraData"        : VALUE } => . ... </k> <extraData>        VALUE </extraData>
+    rule <k> check "blockHeader" : { "gasLimit"         : VALUE } => . ... </k> <gasLimit>         VALUE </gasLimit>
+    rule <k> check "blockHeader" : { "gasUsed"          : VALUE } => . ... </k> <gasUsed>          VALUE </gasUsed>
+    rule <k> check "blockHeader" : { "mixHash"          : VALUE } => . ... </k> <mixHash>          VALUE </mixHash>
+    rule <k> check "blockHeader" : { "nonce"            : VALUE } => . ... </k> <blockNonce>       VALUE </blockNonce>
+    rule <k> check "blockHeader" : { "number"           : VALUE } => . ... </k> <number>           VALUE </number>
+    rule <k> check "blockHeader" : { "parentHash"       : VALUE } => . ... </k> <previousHash>     VALUE </previousHash>
+    rule <k> check "blockHeader" : { "receiptTrie"      : VALUE } => . ... </k> <receiptsRoot>     VALUE </receiptsRoot>
+    rule <k> check "blockHeader" : { "stateRoot"        : VALUE } => . ... </k> <stateRoot>        VALUE </stateRoot>
+    rule <k> check "blockHeader" : { "timestamp"        : VALUE } => . ... </k> <timestamp>        VALUE </timestamp>
+    rule <k> check "blockHeader" : { "transactionsTrie" : VALUE } => . ... </k> <transactionsRoot> VALUE </transactionsRoot>
+    rule <k> check "blockHeader" : { "uncleHash"        : VALUE } => . ... </k> <ommersHash>       VALUE </ommersHash>
+    rule <k> check "blockHeader" : { "baseFeePerGas"    : VALUE } => . ... </k> <baseFee>          VALUE </baseFee>
+
+    rule <k> check "blockHeader" : { "hash": HASH:Bytes } => . ...</k>
+         <previousHash>     HP </previousHash>
+         <ommersHash>       HO </ommersHash>
+         <coinbase>         HC </coinbase>
+         <stateRoot>        HR </stateRoot>
+         <transactionsRoot> HT </transactionsRoot>
+         <receiptsRoot>     HE </receiptsRoot>
+         <logsBloom>        HB </logsBloom>
+         <difficulty>       HD </difficulty>
+         <number>           HI </number>
+         <gasLimit>         HL </gasLimit>
+         <gasUsed>          HG </gasUsed>
+         <timestamp>        HS </timestamp>
+         <extraData>        HX </extraData>
+         <mixHash>          HM </mixHash>
+         <blockNonce>       HN </blockNonce>
+         <baseFee>          HF </baseFee>
+      requires #blockHeaderHash(HP, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN)     ==Int #asWord(HASH)
+        orBool #blockHeaderHash(HP, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN, HF) ==Int #asWord(HASH)
+
+    rule check TESTID : { "genesisBlockHeader" : BLOCKHEADER } => check "genesisBlockHeader" : BLOCKHEADER ~> failure TESTID
+ // ------------------------------------------------------------------------------------------------------------------------
+    rule <k> check "genesisBlockHeader" : { KEY : VALUE , REST } => check "genesisBlockHeader" : { KEY : VALUE } ~> check "genesisBlockHeader" : { REST } ... </k>
+      requires REST =/=K .JSONs
+
+    rule <k> check "genesisBlockHeader" : { KEY : _ } => .K ... </k> requires KEY =/=String "hash"
+
+    rule <k> check "genesisBlockHeader" : { "hash": (HASH:String => #asWord(#parseByteStack(HASH))) } ... </k>
+    rule <k> check "genesisBlockHeader" : { "hash": HASH } => . ... </k>
+         <blockhashes> ... ListItem(HASH) ListItem(_) </blockhashes>
+
+    rule <k> check TESTID : { "transactions" : TRANSACTIONS } => check "transactions" : TRANSACTIONS ~> failure TESTID ... </k>
+ // ---------------------------------------------------------------------------------------------------------------------------
+    rule <k> check "transactions" : [ .JSONs ] => . ... </k> <txOrder> .List                    </txOrder>
+    rule <k> check "transactions" : { .JSONs } => . ... </k> <txOrder> ListItem(_) => .List ... </txOrder>
+
+    rule <k> check "transactions" : [ TRANSACTION , REST ] => check "transactions" : TRANSACTION   ~> check "transactions" : [ REST ] ... </k>
+    rule <k> check "transactions" : { KEY : VALUE , REST } => check "transactions" : (KEY : VALUE) ~> check "transactions" : { REST } ... </k>
+
+    rule <k> check "transactions" : ("sender" : (VALUE:Bytes  => #asAccount(VALUE)))      ... </k>
+    rule <k> check "transactions" : (_KEY     : (VALUE:String => #parseByteStack(VALUE))) ... </k>
+    rule <k> check "transactions" : ("to"     : (VALUE:Bytes  => #asAccount(VALUE)))      ... </k>
+    rule <k> check "transactions" : ( KEY     : (VALUE:Bytes  => #padToWidth(32, VALUE))) ... </k> requires KEY in (SetItem("r") SetItem("s")) andBool lengthBytes(VALUE) <Int 32
+    rule <k> check "transactions" : ( KEY     : (VALUE:Bytes  => #asWord(VALUE)))         ... </k> requires KEY in (SetItem("gasLimit") SetItem("gasPrice") SetItem("nonce") SetItem("v") SetItem("value") SetItem("chainId") SetItem("type") SetItem("maxFeePerGas") SetItem("maxPriorityFeePerGas"))
+    rule <k> check "transactions" : ("type"   : (VALUE:Int    => #asmTxPrefix(VALUE)))    ... </k>
+
+    rule <k> check "transactions" : "accessList" : [ ACCESSLIST , REST ] => check "transactions" : "accessList" : ACCESSLIST  ~> check "transactions" : "accessList" : [ REST ] ... </k>
+    rule <k> check "transactions" : "accessList" : { "address" : V1 , "storageKeys": V2 , .JSONs } => check "transactions" : "accessList" : "address" : #parseHexWord(V1) : "storageKeys" : V2  ... </k>
+    rule <k> check "transactions" : "accessList" : "address" : ADDR : "storageKeys" : [ KEY , REST ] => check "transactions" : "accessList" : "address" : ADDR : "storageKeys" : #parseHexWord(KEY) ~> check "transactions" : "accessList" : "address" : ADDR : "storageKeys" : [ REST ] ... </k>
+
+    rule <k> check "transactions" : "accessList" : "address" : _    : "storageKeys" : [ .JSONs ] => . ... </k>
+    rule <k> check "transactions" : "accessList" : [ .JSONs ] => . ... </k>
+
+    rule <k> check "transactions" : "accessList" : "address" : ADDR : "storageKeys" : KEY        => . ... </k> <txOrder> ListItem(TXID) ... </txOrder> <message> <msgID> TXID </msgID> <txAccess> TA </txAccess> ... </message> requires isInAccessList(ADDR, KEY, TA)
+    rule <k> check "transactions" : ("data"                 : VALUE) => . ... </k> <txOrder> ListItem(TXID) ... </txOrder> <message> <msgID> TXID </msgID> <data>          VALUE </data>           ... </message>
+    rule <k> check "transactions" : ("gasLimit"             : VALUE) => . ... </k> <txOrder> ListItem(TXID) ... </txOrder> <message> <msgID> TXID </msgID> <txGasLimit>    VALUE </txGasLimit>     ... </message>
+    rule <k> check "transactions" : ("gasPrice"             : VALUE) => . ... </k> <txOrder> ListItem(TXID) ... </txOrder> <message> <msgID> TXID </msgID> <txGasPrice>    VALUE </txGasPrice>     ... </message>
+    rule <k> check "transactions" : ("nonce"                : VALUE) => . ... </k> <txOrder> ListItem(TXID) ... </txOrder> <message> <msgID> TXID </msgID> <txNonce>       VALUE </txNonce>        ... </message>
+    rule <k> check "transactions" : ("r"                    : VALUE) => . ... </k> <txOrder> ListItem(TXID) ... </txOrder> <message> <msgID> TXID </msgID> <sigR>          VALUE </sigR>           ... </message>
+    rule <k> check "transactions" : ("s"                    : VALUE) => . ... </k> <txOrder> ListItem(TXID) ... </txOrder> <message> <msgID> TXID </msgID> <sigS>          VALUE </sigS>           ... </message>
+    rule <k> check "transactions" : ("to"                   : VALUE) => . ... </k> <txOrder> ListItem(TXID) ... </txOrder> <message> <msgID> TXID </msgID> <to>            VALUE </to>             ... </message>
+    rule <k> check "transactions" : ("v"                    : VALUE) => . ... </k> <txOrder> ListItem(TXID) ... </txOrder> <message> <msgID> TXID </msgID> <sigV>          VALUE </sigV>           ... </message>
+    rule <k> check "transactions" : ("value"                : VALUE) => . ... </k> <txOrder> ListItem(TXID) ... </txOrder> <message> <msgID> TXID </msgID> <value>         VALUE </value>          ... </message>
+    rule <k> check "transactions" : ("chainId"              : VALUE) => . ... </k> <txOrder> ListItem(TXID) ... </txOrder> <message> <msgID> TXID </msgID> <txChainID>     VALUE </txChainID>      ... </message>
+    rule <k> check "transactions" : ("type"                 : VALUE) => . ... </k> <txOrder> ListItem(TXID) ... </txOrder> <message> <msgID> TXID </msgID> <txType>        VALUE </txType>         ... </message>
+    rule <k> check "transactions" : ("maxFeePerGas"         : VALUE) => . ... </k> <txOrder> ListItem(TXID) ... </txOrder> <message> <msgID> TXID </msgID> <txMaxFee>      VALUE </txMaxFee>       ... </message>
+    rule <k> check "transactions" : ("maxPriorityFeePerGas" : VALUE) => . ... </k> <txOrder> ListItem(TXID) ... </txOrder> <message> <msgID> TXID </msgID> <txPriorityFee> VALUE </txPriorityFee>  ... </message>
+    rule <k> check "transactions" : ("sender"               : VALUE) => . ... </k> <txOrder> ListItem(TXID) ... </txOrder> <message> <msgID> TXID </msgID> <sigV> TW </sigV> <sigR> TR </sigR> <sigS> TS </sigS> ... </message> requires  #sender( #getTxData(TXID), TW, TR, TS ) ==K VALUE
+
+    syntax Bool ::= isInAccessListStorage ( Int , JSON )    [function]
+                  | isInAccessList ( Account , Int , JSON ) [function]
+ // ------------------------------------------------------------------
+    rule isInAccessList(_   , _  , [.JSONs                     ]) => false
+    rule isInAccessList(ADDR, KEY, [[ACCT, [STRG:JSONs]],  REST]) => #if   ADDR ==K #asAccount(#parseByteStackRaw(ACCT))
+                                                                     #then isInAccessListStorage (KEY, [STRG]) orBool isInAccessList(ADDR, KEY, [REST])
+                                                                     #else isInAccessList(ADDR, KEY, [REST]) #fi
+
+    rule isInAccessListStorage(_  , [.JSONs    ]) => false
+    rule isInAccessListStorage(KEY, [SKEY, REST]) => #if   KEY ==Int #asWord(#parseByteStackRaw(SKEY))
+                                                     #then true
+                                                     #else isInAccessListStorage(KEY, [REST]) #fi
+
+

TODO: case with nonzero ommers.

+
    rule <k> check TESTID : { "uncleHeaders" : OMMERS } => check "ommerHeaders" : OMMERS ~> failure TESTID ... </k>
+ // ---------------------------------------------------------------------------------------------------------------
+    rule <k> check "ommerHeaders" : [ .JSONs ] => . ... </k> <ommerBlockHeaders> [ .JSONs ] </ommerBlockHeaders>
+
+
endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/edsl.md b/include/kframework/edsl.md deleted file mode 100644 index 65f2c6d669..0000000000 --- a/include/kframework/edsl.md +++ /dev/null @@ -1,34 +0,0 @@ -eDSL High-Level Notations -========================= - -The eDSL high-level notations make the EVM specifications more succinct and closer to their high-level specifications. -The succinctness increases the readability, and the closeness helps "eye-ball validation" of the specification refinement. -The high-level notations are defined by translation to the corresponding EVM terms, and thus can be freely used with other EVM terms. -The notations are inspired by the production compilers of the smart contract languages like Solidity and Vyper, and their definition is derived by formalizing the corresponding translation made by the compilers. - -```k -requires "buf.md" -requires "hashed-locations.md" -requires "abi.md" -requires "gas.md" -requires "optimizations.md" - -module EDSL - imports BUF - imports HASHED-LOCATIONS - imports SOLIDITY-FIELDS - imports EVM-ABI - imports EVM-OPTIMIZATIONS - imports INFINITE-GAS - imports BIN-RUNTIME -endmodule - -module BIN-RUNTIME - imports EVM-ABI - - syntax Contract - syntax Bytes ::= #binRuntime ( Contract ) [alias, klabel(binRuntime), symbol, function, no-evaluators] - // ------------------------------------------------------------------------------------------------------ - -endmodule -``` diff --git a/include/kframework/edsl/index.html b/include/kframework/edsl/index.html new file mode 100644 index 0000000000..8bdc3ad0a6 --- /dev/null +++ b/include/kframework/edsl/index.html @@ -0,0 +1,220 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

eDSL High-Level Notations

+

The eDSL high-level notations make the EVM specifications more succinct and closer to their high-level specifications. +The succinctness increases the readability, and the closeness helps "eye-ball validation" of the specification refinement. +The high-level notations are defined by translation to the corresponding EVM terms, and thus can be freely used with other EVM terms. +The notations are inspired by the production compilers of the smart contract languages like Solidity and Vyper, and their definition is derived by formalizing the corresponding translation made by the compilers.

+
requires "buf.md"
+requires "hashed-locations.md"
+requires "abi.md"
+requires "gas.md"
+requires "optimizations.md"
+
+module EDSL
+    imports BUF
+    imports HASHED-LOCATIONS
+    imports SOLIDITY-FIELDS
+    imports EVM-ABI
+    imports EVM-OPTIMIZATIONS
+    imports INFINITE-GAS
+    imports BIN-RUNTIME
+endmodule
+
+module BIN-RUNTIME
+    imports EVM-ABI
+
+    syntax Contract
+    syntax Bytes ::= #binRuntime ( Contract ) [alias, klabel(binRuntime), symbol, function, no-evaluators]
+ // ------------------------------------------------------------------------------------------------------
+
+endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/evm-imp-specs.md b/include/kframework/evm-imp-specs.md deleted file mode 100644 index ae87d784f5..0000000000 --- a/include/kframework/evm-imp-specs.md +++ /dev/null @@ -1,144 +0,0 @@ -Scripting language for imperative specifications (SOLAR-style) -============================================================== - -```k -requires "evm.md" - -module EVM-IMP-SPECS - imports ID - imports EVM - - configuration - - - .Map - -``` - -Core specification language ---------------------------- - -```k - syntax EthereumCommand ::= "#assert" Exp [strict] - | "#assertFailure" Exp - rule #assert R:Bool => . ... - requires R - - rule #assert R:Bool => #assertFailure R ... - requires notBool R - - syntax EthereumCommand ::= "#assume" Exp [strict] - - //Adapted from driver.md `failure` - syntax EthereumCommand ::= "#takeHalt" String - // --------------------------------------------- - rule #takeHalt _ => . ... - rule #halt ~> #takeHalt _ => . ... - - //Shortcut for #mkCall and required setup - syntax EthereumCommand ::= "#mkCallShortcut" Id Int Int Bytes Id - rule #mkCallShortcut V_CONF_BACKUP CALLER_ID ACCT_ID ARGS V_SAVEOUT_ID - => #restoreEthereum V_CONF_BACKUP - ~> #mkCall CALLER_ID ACCT_ID ACCT_ID PARSEDCODE 0 ARGS false - ~> #takeHalt "failure" - ~> #saveOutput V_SAVEOUT_ID - ... - - ACCT_ID - PARSEDCODE - - //Dummy command at the beginning of to ensure execution doesn't start with a spec rule - syntax EthereumCommand ::= "#dummy" - rule #dummy => . ... -``` - -Configuration access commands ------------------------------ - -```k - syntax EthereumCommand ::= "#saveEthereum" Id - rule #saveEthereum X => . ... - ETH - VARS => VARS[X <- ETH] - - syntax EthereumCommand ::= "#restoreEthereum" Id - rule #restoreEthereum X => . ... - ( _ => ETH ) - ... X |-> ETH ... - - syntax EthereumCommand ::= "#saveOutput" Id - rule #saveOutput X => . ... - OUT - VARS => VARS[X <- OUT] - - syntax EthereumCommand ::= "#saveStorage" Int Id - rule #saveStorage ACCT_ID X => . ... - ACCT_ID - S - VARS => VARS[X <- S] - - syntax EthereumCommand ::= "#saveLog" Id - rule #saveLog X => . ... - L - VARS => VARS[X <- L] - - syntax EthereumCommand ::= "#saveRefund" Id - rule #saveRefund X => . ... - R - VARS => VARS[X <- R] -``` - -Specification expression language ---------------------------------- - -```k - syntax KResult ::= Bytes | StatusCode | List | Map - - syntax Exp ::= Exp "==S" Exp [seqstrict] - | Exp "=/=S" Exp [seqstrict] - | Exp "+List" Exp [seqstrict] - | KResult - - rule R1:KResult ==S R2:KResult => R1 ==K R2 ... - rule R1:KResult =/=S R2:KResult => R1 =/=K R2 ... - rule L1:List +List L2:List => L1 L2 ... - - // Boolean expressions - syntax Exp ::= Exp "&&S" Exp [seqstrict, left] - > Exp "||S" Exp [seqstrict, left] - - rule R1:Bool &&S R2:Bool => R1 andBool R2 ... - rule R1:Bool ||S R2:Bool => R1 orBool R2 ... - - // Configuration access and other helpers - syntax Exp ::= "#getStatusCode" - | "#getOutput" - | "#getLog" - | "#getRefund" - | #getStorage ( Int ) - | #var( Id ) - | #sizeBytesExp ( Exp ) [strict] - - rule #getStatusCode => SC ... - SC - - rule #getOutput => OUT ... - OUT - - rule #getLog => L ... - L - - rule #getRefund => R ... - R - - rule #getStorage(ACCT_ID) => S ... - ACCT_ID - S - - rule #var(X) => VARS[X] ... - VARS - - rule #sizeBytesExp(WS:Bytes) => lengthBytes(WS) ... - -endmodule -``` diff --git a/include/kframework/evm-imp-specs/index.html b/include/kframework/evm-imp-specs/index.html new file mode 100644 index 0000000000..11ed431f22 --- /dev/null +++ b/include/kframework/evm-imp-specs/index.html @@ -0,0 +1,341 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Scripting language for imperative specifications (SOLAR-style)

+
requires "evm.md"
+
+module EVM-IMP-SPECS
+    imports ID
+    imports EVM
+
+    configuration
+      <kevm-specs>
+        <kevm/>
+        <commandVars> .Map </commandVars>
+      </kevm-specs>
+
+

Core specification language

+
    syntax EthereumCommand ::= "#assert" Exp [strict]
+                             | "#assertFailure" Exp
+    rule <k> #assert R:Bool => . ... </k>
+      requires R
+
+    rule <k> #assert R:Bool => #assertFailure R ... </k>
+      requires notBool R
+
+    syntax EthereumCommand ::= "#assume" Exp [strict]
+
+    //Adapted from driver.md `failure`
+    syntax EthereumCommand ::= "#takeHalt" String
+ // ---------------------------------------------
+    rule <k>          #takeHalt _ => . ... </k>
+    rule <k> #halt ~> #takeHalt _ => . ... </k>
+
+    //Shortcut for #mkCall and required setup
+    syntax EthereumCommand ::= "#mkCallShortcut" Id Int Int Bytes Id
+    rule <k> #mkCallShortcut V_CONF_BACKUP CALLER_ID ACCT_ID ARGS V_SAVEOUT_ID
+          => #restoreEthereum V_CONF_BACKUP
+          ~> #mkCall CALLER_ID ACCT_ID ACCT_ID PARSEDCODE 0 ARGS false
+          ~> #takeHalt "failure"
+          ~> #saveOutput V_SAVEOUT_ID
+         ...
+         </k>
+        <acctID> ACCT_ID </acctID>
+        <code> PARSEDCODE </code>
+
+    //Dummy command at the beginning of <k> to ensure execution doesn't start with a spec rule 
+    syntax EthereumCommand ::= "#dummy"
+    rule <k> #dummy => . ... </k>
+
+

Configuration access commands

+
    syntax EthereumCommand ::= "#saveEthereum" Id
+    rule <k> #saveEthereum X => . ... </k>
+         <ethereum> ETH </ethereum>
+         <commandVars> VARS => VARS[X <- ETH] </commandVars>
+
+    syntax EthereumCommand ::= "#restoreEthereum" Id
+    rule <k> #restoreEthereum X => . ... </k>
+         (<ethereum> _ </ethereum> => <ethereum> ETH </ethereum>)
+         <commandVars>... X |-> ETH ...</commandVars>
+
+    syntax EthereumCommand ::= "#saveOutput" Id
+    rule <k> #saveOutput X => . ... </k>
+         <output> OUT </output>
+         <commandVars> VARS => VARS[X <- OUT] </commandVars>
+
+    syntax EthereumCommand ::= "#saveStorage" Int Id
+    rule <k> #saveStorage ACCT_ID X => . ... </k>
+         <acctID> ACCT_ID </acctID>
+         <storage> S </storage>
+         <commandVars> VARS => VARS[X <- S] </commandVars>
+
+    syntax EthereumCommand ::= "#saveLog" Id
+    rule <k> #saveLog X => . ... </k>
+         <log> L </log>
+         <commandVars> VARS => VARS[X <- L] </commandVars>
+
+    syntax EthereumCommand ::= "#saveRefund" Id
+    rule <k> #saveRefund X => . ... </k>
+         <refund> R </refund>
+         <commandVars> VARS => VARS[X <- R] </commandVars>
+
+

Specification expression language

+
    syntax KResult ::= Bytes | StatusCode | List | Map
+
+    syntax Exp ::= Exp "==S"  Exp  [seqstrict]
+                 | Exp "=/=S" Exp  [seqstrict]
+                 | Exp "+List" Exp [seqstrict]
+                 | KResult
+
+    rule <k> R1:KResult ==S  R2:KResult => R1 ==K  R2 ...</k>
+    rule <k> R1:KResult =/=S R2:KResult => R1 =/=K R2 ...</k>
+    rule <k> L1:List +List L2:List      => L1 L2      ...</k>
+
+    // Boolean expressions
+    syntax Exp ::= Exp "&&S" Exp [seqstrict, left]
+                 > Exp "||S" Exp [seqstrict, left]
+
+    rule <k> R1:Bool &&S R2:Bool => R1 andBool R2 ... </k>
+    rule <k> R1:Bool ||S R2:Bool => R1 orBool R2  ... </k>
+
+    // Configuration access and other helpers
+    syntax Exp ::= "#getStatusCode"
+                 | "#getOutput"
+                 | "#getLog"
+                 | "#getRefund"
+                 | #getStorage ( Int )
+                 | #var( Id )
+                 | #sizeBytesExp ( Exp ) [strict]
+
+    rule <k> #getStatusCode => SC ... </k>
+         <statusCode> SC </statusCode>
+
+    rule <k> #getOutput => OUT ... </k>
+         <output> OUT </output>
+
+    rule <k> #getLog => L ... </k>
+         <log> L </log>
+
+    rule <k> #getRefund => R ... </k>
+         <refund> R </refund>
+
+    rule <k> #getStorage(ACCT_ID) => S ... </k>
+         <acctID> ACCT_ID </acctID>
+         <storage> S </storage>
+
+    rule <k> #var(X) => VARS[X] ... </k>
+         <commandVars> VARS </commandVars>
+
+    rule <k> #sizeBytesExp(WS:Bytes) => lengthBytes(WS) ... </k>
+
+endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/evm-node.md b/include/kframework/evm-node.md deleted file mode 100644 index bc02196317..0000000000 --- a/include/kframework/evm-node.md +++ /dev/null @@ -1,366 +0,0 @@ -EVM Integration with Production Client -====================================== - -Contained in this file is glue code needed in order to enable the ability to use KEVM as a VM for an actual Ethereum node. - -```{.k .node} -requires "evm.md" -requires "optimizations.md" - -module EVM-NODE - imports EVM - imports EVM-OPTIMIZATIONS - imports K-REFLECTION - imports COLLECTIONS - imports BYTES - - configuration - - false -``` - -### State loading operations. - -In order to enable scalable execution of transactions on an entire blockchain, it is necessary to avoid serializing/deserializing the entire state of all accounts when constructing the initial configuration for KEVM. -To do this, we assume that accounts not present in the `` cell might not exist and need to be loaded on each access. -We also defer loading of storage entries and the actual code byte string until it is needed. -Because the same account may be loaded more than once, implementations of this interface are expected to cache the actual query to the Ethereum client. - -- `#unloaded` represents the code of an account that has not had its code loaded yet. Unloaded code may not be empty. -- Empty code is detected without lazy evaluation by means of checking the code hash, and therefore will always be represented in the `` cell as `.WordStack`. - -```{.k .node} - syntax InternalOp ::= "#load" "[" OpCode "]" - // -------------------------------------------- - rule (. => #load [ OP ]) ~> #next [ OP ] ... - false => true - [priority(35)] - - rule #execute ... - true => false - [priority(35)] -``` - -- `CREATE2` is a special case -Note that we cannot execute #loadAccount during the #load phase earlier because gas will not yet -have been paid, and it may be to expensive to compute the hash of the init code. - -```{.k .node} - rule #gas [ CREATE2, _ ] ... - true => false - [priority(35)] - - rule (. => #loadAccount #newAddr(ACCT, SALT, #range(LM, MEMSTART, MEMWIDTH))) - ~> CREATE2 _VALUE MEMSTART MEMWIDTH SALT - ... - - ACCT - LM - false => true - [priority(35)] -``` - -```{.k .node} - rule #load [ OP:OpCode ] => #loadAccount W0 ~> #lookupCode W0 ... - W0 : _ - requires isAddr1Op(OP) - - rule #load [ OP:OpCode ] => #loadAccount W1 ~> #lookupCode W1 ... - _ : W1 : _ - requires isAddr2Op(OP) - - rule #load [ CREATE ] => #loadAccount #newAddr(ACCT, NONCE) ... - ACCT - - ACCT - NONCE - ... - - - rule #load [ OP:OpCode ] => #lookupStorage ACCT W0 ... - ACCT - W0 : _ - requires OP ==K SSTORE orBool OP ==K SLOAD - - rule #load [ _OP:OpCode ] => . ... [owise] -``` - -```{.k .node} - syntax AccountCode ::= #unloaded(Int) -``` - -- `#getBalance` returns the balance of an account that exists based on its integer address. -- `#getNonce` returns the nonce of an account that exists based on its integer address. -- `#isCodeEmpty` returns true if the code hash of the account is equal to the hash of the empty string, and false otherwise. -- `#accountExists` returns true if the account is present in the state trie for the current block, and false otherwise. - -```{.k .node} - syntax Int ::= #getBalance ( Int ) [function, hook(BLOCKCHAIN.getBalance)] - | #getNonce ( Int ) [function, hook(BLOCKCHAIN.getNonce)] - | #getCodeHash ( Int ) [function] - // ----------------------------------------------------------------------------- - rule #getCodeHash(ACCT) => keccak(#parseByteStackRaw(#getCode(ACCT))) - - syntax Bool ::= #isCodeEmpty ( Int ) [function, hook(BLOCKCHAIN.isCodeEmpty)] - | #accountExists ( Int ) [function, hook(BLOCKCHAIN.accountExists)] - // --------------------------------------------------------------------------------- -``` - -The following operations help with loading account information from an external running client. -This minimizes the amount of information which must be stored in the configuration. - -- `#loadAccount` queries for account data from the running client. -- `#lookupCode` loads the code of an account into the `` cell. -- `#lookupStorage` loads the value of the specified storage key into the `` cell. - -```k - syntax InternalOp ::= "#loadAccount" Int - | "#lookupCode" Int - | "#lookupStorage" Int Int - // ---------------------------------------------- -``` - -- `#loadAccount` loads an account's balance and nonce if it exists, and leaves the code and storage unloaded, except if the code is empty, in which case the code is fully loaded. - If the account does not exist, it does nothing. - -```{.k .node} - rule #loadAccount ACCT => . ... ACCT ... - - rule #loadAccount ACCT => . ... - requires notBool #accountExists(ACCT) - [priority(55)] - - rule #loadAccount ACCT => . ... - - ( .Bag - => - ACCT - #getBalance(ACCT) - #if #isCodeEmpty(ACCT) #then .Bytes #else #unloaded(#getCodeHash(ACCT)) #fi - .Map - .Map - #getNonce(ACCT) - - ) - ... - [owise] -``` - -- `#getStorageData` loads the value for a single storage key of a specified account by its address and storage offset. - If the storage key has already been loaded or the account does not exist, it does nothing. - -```{.k .node} - syntax Int ::= #getStorageData ( Int , Int ) [function, hook(BLOCKCHAIN.getStorageData)] - // ---------------------------------------------------------------------------------------- - rule #lookupStorage ACCT INDEX => . ... - - ACCT - STORAGE => STORAGE [ INDEX <- #getStorageData(ACCT, INDEX) ] - ORIGSTORAGE => ORIGSTORAGE [ INDEX <- #getStorageData(ACCT, INDEX) ] - ... - - requires notBool INDEX in_keys(STORAGE) - - rule #lookupStorage ACCT INDEX => . ... - - ACCT - STORAGE:Map - ... - - requires INDEX in_keys(STORAGE) - - rule #lookupStorage ACCT _ => . ... - requires notBool #accountExists(ACCT) -``` - -- `#getCode` loads the code for a specified account by its address. If the code has already been loaded, it does nothing. - If the account does not exist, it also does nothing. - -```{.k .node} - syntax String ::= #getCode ( Int ) [function, hook(BLOCKCHAIN.getCode)] - // ----------------------------------------------------------------------- - rule #lookupCode ACCT => . ... - - ACCT - #unloaded(_) => #parseByteStackRaw(#getCode(ACCT)) - ... - - - rule #lookupCode ACCT => . ... - - ACCT - _:Bytes - ... - - - rule #lookupCode ACCT => . ... - requires notBool #accountExists(ACCT) -``` - -- `#getBlockhash(N)` returns the blockhash of the Nth most recent block, up to a maximum of 256 blocks. - It is used in the implementation of the BLOCKHASH instruction as seen below. - -```{.k .node} - syntax Int ::= #getBlockhash ( Int ) [function, hook(BLOCKCHAIN.getBlockhash)] - // ------------------------------------------------------------------------------ - rule BLOCKHASH N => #getBlockhash(N) ~> #push ... NORMAL requires N >=Int 0 andBool N BLOCKHASH N => 0 ~> #push ...
NORMAL requires N =Int 256 -``` - -```{.k .node} - rule keccak({#unloaded(HASH)}:>Bytes) => HASH [concrete] -``` - -### Transaction Execution - -- `runVM` takes all the input state of a transaction and the current block header and executes the transaction according to the specified state, relying on the above loading operations for access to accounts and block hashes. - The signature of this function must match the signature expected by VM.ml in the blockchain-k-plugin. - -```{.k .node} - syntax EthereumSimulation ::= runVM ( iscreate: Bool , to: Int , from: Int , code: String , args: String , value: Int , gasprice: Int - , gas: Int , beneficiary: Int , difficulty: Int , number: Int , gaslimit: Int , timestamp: Int , unused: String ) [symbol] - // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- - rule (.K => #loadAccount ACCTFROM) ~> runVM(... from: ACCTFROM) ... - .Bag - - rule runVM(true, _, ACCTFROM, _, ARGS, VALUE, GPRICE, GAVAIL, CB, DIFF, NUMB, GLIMIT, TS, _) - => #loadAccount #newAddr(ACCTFROM, NONCE -Int 1) - ~> #create ACCTFROM #newAddr(ACCTFROM, NONCE -Int 1) VALUE #parseByteStackRaw(ARGS) - ~> #codeDeposit #newAddr(ACCTFROM, NONCE -Int 1) - ~> #endCreate - ... - - _ => GPRICE - _ => GAVAIL - _ => ACCTFROM - _ => -1 - _ => CB - _ => DIFF - _ => NUMB - _ => GLIMIT - _ => TS - - ACCTFROM - NONCE - ... - - _ => SetItem(CB) - ACCESSED => ACCESSED |Set SetItem(ACCTFROM) |Set SetItem(#newAddr(ACCTFROM, NONCE -Int 1)) - - rule runVM(false, ACCTTO, ACCTFROM, _, ARGS, VALUE, GPRICE, GAVAIL, CB, DIFF, NUMB, GLIMIT, TS, _) - => #loadAccount ACCTTO - ~> #lookupCode ACCTTO - ~> #call ACCTFROM ACCTTO ACCTTO VALUE VALUE #parseByteStackRaw(ARGS) false - ~> #endVM - ... - - _ => GPRICE - _ => GAVAIL - _ => ACCTFROM - _ => -1 - _ => CB - _ => DIFF - _ => NUMB - _ => GLIMIT - _ => TS - _ => SetItem(CB) - ACCESSED => ACCESSED |Set SetItem(ACCTFROM) |Set SetItem(ACCTTO) - ACCTFROM ... -``` - -- `makeAccessList` will initialize the `` and `` cells for an access list transaction type and leave runVM at the top of the `` cell. - -```{.k .node} - syntax KItem ::= storageLocation ( Int, Int ) [symbol] - syntax EthereumSimulation ::= makeAccessList ( accessedAddresses: Set, storageList: Set , runvm: EthereumSimulation ) [symbol] - // ------------------------------------------------------------------------------------------------------------------------------ - rule makeAccessList( ACCESSED, .Set, RUNVM ) => RUNVM ... - _ => ACCESSED - - rule makeAccessList( _, SetItem(storageLocation(ACCT, LOCATION)) STORAGELIST => STORAGELIST, _ ) ... - ... ACCT |-> (LOCATIONS => LOCATIONS |Set SetItem(LOCATION)) ... - - rule makeAccessList( _, SetItem(storageLocation(ACCT, LOCATION)) STORAGELIST => STORAGELIST, _ ) ... - STORAGEMAP => STORAGEMAP[ACCT <- SetItem(LOCATION)] - requires notBool ACCT in_keys(STORAGEMAP) -``` - -- `#endCreate` and `#endVM` clean up after the transaction finishes and store the return status code of the top level call frame on the top of the `` cell. - -```{.k .node} - syntax KItem ::= "#endVM" | "#endCreate" - // ---------------------------------------- - rule _:ExceptionalStatusCode - #halt ~> #endVM => #popCallStack ~> #popWorldState ~> 0 - _ => .Bytes - - rule EVMC_REVERT - #halt ~> #endVM => #popCallStack ~> #popWorldState ~> #refund GAVAIL ~> 0 - GAVAIL - - rule EVMC_SUCCESS - #halt ~> #endVM => #popCallStack ~> #dropWorldState ~> #refund GAVAIL ~> 1 - GAVAIL - - rule #endCreate => W ... W : _WS -``` - -### Primitive operations expected to exist by the blockchain-k-plugin - -- `vmResult` represents the extracted information about the world state after the transaction finishes. - Its signature must match the signature expected by VM.ml in the blockchain-k-plugin. -- `extractConfig` takes a final configuration after rewriting and extracts a `vmResult` from it in order to abstract away configuration structure from the postprocessing done by the blockchain-k-plugin. - -```{.k .node} - syntax KItem ::= vmResult ( return: String , gas: Int , refund: Int , status: Int , selfdestruct: Set , logs: List , AccountsCell , touched: Set , statusCode: String ) - syntax KItem ::= extractConfig() [function, symbol] - // --------------------------------------------------- - rule [[ extractConfig() => vmResult(#unparseByteStack(OUT), GAVAIL, REFUND, STATUS, SD, LOGS, ACCTS , TOUCHED, StatusCode2String(STATUSCODE)) ]] - OUT - GAVAIL - REFUND - STATUS:Int - SD - LOGS - ACCTS - TOUCHED - STATUSCODE - - syntax KItem ::= accessListResult( accountsSet: Set, storageSet: Set ) [symbol] - syntax KItem ::= extractAccessList() [function, symbol] - // ------------------------------------------------------------------------------- - rule [[ extractAccessList() => accessListResult( ACCESSED, warmStorage2Set( keys_list(STORAGE), STORAGE, .Set) ) ]] - ACCESSED - STORAGE - - syntax Set ::= warmStorage2Set ( List, Map, Set ) [function] - | warmStorage2SetAux( Int, List, Set ) [function] - // -------------------------------------------------------------- - rule warmStorage2Set( .List, _, STORAGELIST ) => STORAGELIST - rule warmStorage2Set( (ListItem(ACCT) => .List) _, STORAGE, RESULT => RESULT |Set warmStorage2SetAux(ACCT, Set2List({STORAGE[ACCT]}:>Set), .Set) ) - - rule warmStorage2SetAux( _, .List, RESULT ) => RESULT - rule warmStorage2SetAux( ACCT, (ListItem(LOCATION) => .List) _LOCATIONS, RESULT => RESULT |Set SetItem(storageLocation(ACCT, LOCATION)) ) -``` - -- `contractBytes` takes the contents of the `` cell and returns its binary representation as a String. - -```{.k .node} - syntax String ::= contractBytes(AccountCode) [function, symbol] - // --------------------------------------------------------------- - rule contractBytes(WS) => #unparseByteStack(WS) -``` - -The following are expected to exist in the client, but are already defined in [data.md]. - -- `accountEmpty` takes the contents of the `` cell, the contents of the `` cell, and the contents of the `` cell and returns true if the account is empty according to the semantics of EIP161 (i.e., empty code zero balance zero nonce). -- `unparseByteStack` takes a WordStack and returns the corresponding byte String. -- `initKevmCell` is the top cell initializer used to construct an initial configuration. - The configuration is expected to have `$MODE`, `$PGM`, and `$SCHEDULE` parameters. -- `logEntry` is an entry in the log data created by a transaction. - It is expected to consist of an Int address, a List of Int topics, and a WordStack of data. -- `NORMAL` is the value of `$MODE` used by actual transaction execution. - -```{.k .node} -endmodule -``` diff --git a/include/kframework/evm-node/index.html b/include/kframework/evm-node/index.html new file mode 100644 index 0000000000..b2ad06f09a --- /dev/null +++ b/include/kframework/evm-node/index.html @@ -0,0 +1,526 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

EVM Integration with Production Client

+

Contained in this file is glue code needed in order to enable the ability to use KEVM as a VM for an actual Ethereum node.

+
requires "evm.md"
+requires "optimizations.md"
+
+module EVM-NODE
+    imports EVM
+    imports EVM-OPTIMIZATIONS
+    imports K-REFLECTION
+    imports COLLECTIONS
+    imports BYTES
+
+  configuration
+    <kevm/>
+    <loaded> false </loaded>
+
+

State loading operations.

+

In order to enable scalable execution of transactions on an entire blockchain, it is necessary to avoid serializing/deserializing the entire state of all accounts when constructing the initial configuration for KEVM. +To do this, we assume that accounts not present in the <accounts> cell might not exist and need to be loaded on each access. +We also defer loading of storage entries and the actual code byte string until it is needed. +Because the same account may be loaded more than once, implementations of this interface are expected to cache the actual query to the Ethereum client.

+
    +
  • #unloaded represents the code of an account that has not had its code loaded yet. Unloaded code may not be empty.
  • +
  • Empty code is detected without lazy evaluation by means of checking the code hash, and therefore will always be represented in the <code> cell as .WordStack.
  • +
+
    syntax InternalOp ::= "#load" "[" OpCode "]"
+ // --------------------------------------------
+    rule <k> (. => #load [ OP ]) ~> #next [ OP ] ... </k>
+         <loaded> false => true </loaded>
+      [priority(35)]
+
+    rule <k> #execute ... </k>
+         <loaded> true => false </loaded>
+      [priority(35)]
+
+
    +
  • CREATE2 is a special case +Note that we cannot execute #loadAccount during the #load phase earlier because gas will not yet +have been paid, and it may be to expensive to compute the hash of the init code.
  • +
+
    rule <k> #gas [ CREATE2, _ ] ... </k>
+         <loaded> true => false </loaded>
+      [priority(35)]
+
+    rule <k> (. => #loadAccount #newAddr(ACCT, SALT, #range(LM, MEMSTART, MEMWIDTH)))
+          ~> CREATE2 _VALUE MEMSTART MEMWIDTH SALT
+         ...
+         </k>
+         <id> ACCT </id>
+         <localMem> LM </localMem>
+         <loaded> false => true </loaded>
+      [priority(35)]
+
+
    rule <k> #load [ OP:OpCode ] => #loadAccount W0 ~> #lookupCode W0 ... </k>
+         <wordStack> W0 : _ </wordStack>
+      requires isAddr1Op(OP)
+
+    rule <k> #load [ OP:OpCode ] => #loadAccount W1 ~> #lookupCode W1 ... </k>
+         <wordStack> _ : W1 : _ </wordStack>
+      requires isAddr2Op(OP)
+
+    rule <k> #load [ CREATE ] => #loadAccount #newAddr(ACCT, NONCE) ... </k>
+         <id> ACCT </id>
+         <account>
+           <acctID> ACCT </acctID>
+           <nonce> NONCE </nonce>
+           ...
+         </account>
+
+    rule <k> #load [ OP:OpCode ] => #lookupStorage ACCT W0 ... </k>
+         <id> ACCT </id>
+         <wordStack> W0 : _ </wordStack>
+      requires OP ==K SSTORE orBool OP ==K SLOAD
+
+    rule <k> #load [ _OP:OpCode ] => . ... </k> [owise]
+
+
    syntax AccountCode ::= #unloaded(Int)
+
+
    +
  • #getBalance returns the balance of an account that exists based on its integer address.
  • +
  • #getNonce returns the nonce of an account that exists based on its integer address.
  • +
  • #isCodeEmpty returns true if the code hash of the account is equal to the hash of the empty string, and false otherwise.
  • +
  • #accountExists returns true if the account is present in the state trie for the current block, and false otherwise.
  • +
+
    syntax Int  ::= #getBalance  ( Int ) [function, hook(BLOCKCHAIN.getBalance)]
+                  | #getNonce    ( Int ) [function, hook(BLOCKCHAIN.getNonce)]
+                  | #getCodeHash ( Int ) [function]
+ // -----------------------------------------------------------------------------
+    rule #getCodeHash(ACCT) => keccak(#parseByteStackRaw(#getCode(ACCT)))
+
+    syntax Bool ::= #isCodeEmpty   ( Int ) [function, hook(BLOCKCHAIN.isCodeEmpty)]
+                  | #accountExists ( Int ) [function, hook(BLOCKCHAIN.accountExists)]
+ // ---------------------------------------------------------------------------------
+
+

The following operations help with loading account information from an external running client. +This minimizes the amount of information which must be stored in the configuration.

+
    +
  • #loadAccount queries for account data from the running client.
  • +
  • #lookupCode loads the code of an account into the <code> cell.
  • +
  • #lookupStorage loads the value of the specified storage key into the <storage> cell.
  • +
+
    syntax InternalOp ::= "#loadAccount"   Int
+                        | "#lookupCode"    Int
+                        | "#lookupStorage" Int Int
+ // ----------------------------------------------
+
+
    +
  • #loadAccount loads an account's balance and nonce if it exists, and leaves the code and storage unloaded, except if the code is empty, in which case the code is fully loaded. +If the account does not exist, it does nothing.
  • +
+
    rule <k> #loadAccount ACCT => . ... </k> <account> <acctID> ACCT </acctID> ... </account>
+
+    rule <k> #loadAccount ACCT => . ... </k>
+      requires notBool #accountExists(ACCT)
+      [priority(55)]
+
+    rule <k> #loadAccount ACCT => . ... </k>
+         <accounts>
+           ( .Bag
+          => <account>
+               <acctID> ACCT </acctID>
+               <balance> #getBalance(ACCT) </balance>
+               <code> #if #isCodeEmpty(ACCT) #then .Bytes #else #unloaded(#getCodeHash(ACCT)) #fi </code>
+               <storage> .Map </storage>
+               <origStorage> .Map </origStorage>
+               <nonce> #getNonce(ACCT) </nonce>
+             </account>
+           )
+           ...
+         </accounts> [owise]
+
+
    +
  • #getStorageData loads the value for a single storage key of a specified account by its address and storage offset. +If the storage key has already been loaded or the account does not exist, it does nothing.
  • +
+
    syntax Int ::= #getStorageData ( Int , Int ) [function, hook(BLOCKCHAIN.getStorageData)]
+ // ----------------------------------------------------------------------------------------
+    rule <k> #lookupStorage ACCT INDEX => . ... </k>
+         <account>
+           <acctID>  ACCT                                                         </acctID>
+           <storage> STORAGE => STORAGE [ INDEX <- #getStorageData(ACCT, INDEX) ] </storage>
+           <origStorage> ORIGSTORAGE => ORIGSTORAGE [ INDEX <- #getStorageData(ACCT, INDEX) ] </origStorage>
+           ...
+         </account>
+      requires notBool INDEX in_keys(STORAGE)
+
+    rule <k> #lookupStorage ACCT INDEX => . ... </k>
+         <account>
+           <acctID> ACCT </acctID>
+           <storage> STORAGE:Map </storage>
+           ...
+         </account>
+      requires INDEX in_keys(STORAGE)
+
+    rule <k> #lookupStorage ACCT _ => . ... </k>
+      requires notBool #accountExists(ACCT)
+
+
    +
  • #getCode loads the code for a specified account by its address. If the code has already been loaded, it does nothing. +If the account does not exist, it also does nothing.
  • +
+
    syntax String ::= #getCode ( Int ) [function, hook(BLOCKCHAIN.getCode)]
+ // -----------------------------------------------------------------------
+    rule <k> #lookupCode ACCT => . ... </k>
+         <account>
+           <acctID> ACCT </acctID>
+           <code> #unloaded(_) => #parseByteStackRaw(#getCode(ACCT)) </code>
+           ...
+         </account>
+
+    rule <k> #lookupCode ACCT => . ... </k>
+         <account>
+           <acctID> ACCT </acctID>
+           <code> _:Bytes </code>
+           ...
+         </account>
+
+    rule <k> #lookupCode ACCT => . ... </k>
+      requires notBool #accountExists(ACCT)
+
+
    +
  • #getBlockhash(N) returns the blockhash of the Nth most recent block, up to a maximum of 256 blocks. +It is used in the implementation of the BLOCKHASH instruction as seen below.
  • +
+
    syntax Int ::= #getBlockhash ( Int ) [function, hook(BLOCKCHAIN.getBlockhash)]
+ // ------------------------------------------------------------------------------
+    rule <k> BLOCKHASH N => #getBlockhash(N) ~> #push ... </k> <mode> NORMAL </mode> requires N >=Int 0 andBool N  <Int 256
+    rule <k> BLOCKHASH N => 0                ~> #push ... </k> <mode> NORMAL </mode> requires N  <Int 0  orBool N >=Int 256
+
+
    rule keccak({#unloaded(HASH)}:>Bytes) => HASH [concrete]
+
+

Transaction Execution

+
    +
  • runVM takes all the input state of a transaction and the current block header and executes the transaction according to the specified state, relying on the above loading operations for access to accounts and block hashes. +The signature of this function must match the signature expected by VM.ml in the blockchain-k-plugin.
  • +
+
    syntax EthereumSimulation ::= runVM ( iscreate: Bool , to: Int          , from: Int       , code: String  , args: String  , value: Int     , gasprice: Int
+                                        , gas: Int       , beneficiary: Int , difficulty: Int , number: Int   , gaslimit: Int , timestamp: Int , unused: String ) [symbol]
+ // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
+    rule <k> (.K => #loadAccount ACCTFROM) ~> runVM(... from: ACCTFROM) ... </k>
+         <accounts> .Bag </accounts>
+
+    rule <k> runVM(true, _, ACCTFROM, _, ARGS, VALUE, GPRICE, GAVAIL, CB, DIFF, NUMB, GLIMIT, TS, _)
+          => #loadAccount #newAddr(ACCTFROM, NONCE -Int 1)
+          ~> #create ACCTFROM #newAddr(ACCTFROM, NONCE -Int 1) VALUE #parseByteStackRaw(ARGS)
+          ~> #codeDeposit #newAddr(ACCTFROM, NONCE -Int 1)
+          ~> #endCreate
+         ...
+         </k>
+         <gasPrice> _ => GPRICE </gasPrice>
+         <callGas> _ => GAVAIL </callGas>
+         <origin> _ => ACCTFROM </origin>
+         <callDepth> _ => -1 </callDepth>
+         <coinbase> _ => CB </coinbase>
+         <difficulty> _ => DIFF </difficulty>
+         <number> _ => NUMB </number>
+         <gasLimit> _ => GLIMIT </gasLimit>
+         <timestamp> _ => TS </timestamp>
+         <account>
+           <acctID> ACCTFROM </acctID>
+           <nonce> NONCE </nonce>
+           ...
+         </account>
+         <touchedAccounts> _ => SetItem(CB) </touchedAccounts>
+         <accessedAccounts> ACCESSED => ACCESSED |Set SetItem(ACCTFROM) |Set SetItem(#newAddr(ACCTFROM, NONCE -Int 1)) </accessedAccounts>
+
+    rule <k> runVM(false, ACCTTO, ACCTFROM, _, ARGS, VALUE, GPRICE, GAVAIL, CB, DIFF, NUMB, GLIMIT, TS, _)
+          => #loadAccount ACCTTO
+          ~> #lookupCode ACCTTO
+          ~> #call ACCTFROM ACCTTO ACCTTO VALUE VALUE #parseByteStackRaw(ARGS) false
+          ~> #endVM
+         ...
+         </k>
+         <gasPrice> _ => GPRICE </gasPrice>
+         <callGas> _ => GAVAIL </callGas>
+         <origin> _ => ACCTFROM </origin>
+         <callDepth> _ => -1 </callDepth>
+         <coinbase> _ => CB </coinbase>
+         <difficulty> _ => DIFF </difficulty>
+         <number> _ => NUMB </number>
+         <gasLimit> _ => GLIMIT </gasLimit>
+         <timestamp> _ => TS </timestamp>
+         <touchedAccounts> _ => SetItem(CB) </touchedAccounts>
+         <accessedAccounts> ACCESSED => ACCESSED |Set SetItem(ACCTFROM) |Set SetItem(ACCTTO) </accessedAccounts>
+         <account> <acctID> ACCTFROM </acctID> ... </account>
+
+
    +
  • makeAccessList will initialize the <accessedAccounts> and <accessedStorage> cells for an access list transaction type and leave runVM at the top of the <k> cell.
  • +
+
    syntax KItem ::= storageLocation ( Int, Int ) [symbol]
+    syntax EthereumSimulation ::= makeAccessList ( accessedAddresses: Set, storageList: Set , runvm: EthereumSimulation ) [symbol]
+ // ------------------------------------------------------------------------------------------------------------------------------
+    rule <k> makeAccessList( ACCESSED, .Set, RUNVM ) => RUNVM ... </k>
+         <accessedAccounts> _ => ACCESSED </accessedAccounts>
+
+    rule <k> makeAccessList( _, SetItem(storageLocation(ACCT, LOCATION)) STORAGELIST => STORAGELIST, _ ) ... </k>
+         <accessedStorage> ... ACCT |-> (LOCATIONS => LOCATIONS |Set SetItem(LOCATION)) ... </accessedStorage>
+
+    rule <k> makeAccessList( _, SetItem(storageLocation(ACCT, LOCATION)) STORAGELIST => STORAGELIST, _ ) ... </k>
+         <accessedStorage> STORAGEMAP => STORAGEMAP[ACCT <- SetItem(LOCATION)] </accessedStorage>
+      requires notBool ACCT in_keys(STORAGEMAP)
+
+
    +
  • #endCreate and #endVM clean up after the transaction finishes and store the return status code of the top level call frame on the top of the <k> cell.
  • +
+
    syntax KItem ::= "#endVM" | "#endCreate"
+ // ----------------------------------------
+    rule <statusCode> _:ExceptionalStatusCode </statusCode>
+         <k> #halt ~> #endVM => #popCallStack ~> #popWorldState ~> 0 </k>
+         <output> _ => .Bytes </output>
+
+    rule <statusCode> EVMC_REVERT </statusCode>
+         <k> #halt ~> #endVM => #popCallStack ~> #popWorldState ~> #refund GAVAIL ~> 0 </k>
+         <gas> GAVAIL </gas>
+
+    rule <statusCode> EVMC_SUCCESS </statusCode>
+         <k> #halt ~> #endVM => #popCallStack ~> #dropWorldState ~> #refund GAVAIL ~> 1 </k>
+         <gas> GAVAIL </gas>
+
+    rule <k> #endCreate => W ... </k> <wordStack> W : _WS </wordStack>
+
+

Primitive operations expected to exist by the blockchain-k-plugin

+
    +
  • vmResult represents the extracted information about the world state after the transaction finishes. +Its signature must match the signature expected by VM.ml in the blockchain-k-plugin.
  • +
  • extractConfig takes a final configuration after rewriting and extracts a vmResult from it in order to abstract away configuration structure from the postprocessing done by the blockchain-k-plugin.
  • +
+
    syntax KItem ::= vmResult ( return: String , gas: Int , refund: Int , status: Int , selfdestruct: Set , logs: List , AccountsCell , touched: Set , statusCode: String )
+    syntax KItem ::= extractConfig() [function, symbol]
+ // ---------------------------------------------------
+    rule [[ extractConfig() => vmResult(#unparseByteStack(OUT), GAVAIL, REFUND, STATUS, SD, LOGS, <accounts> ACCTS </accounts>, TOUCHED, StatusCode2String(STATUSCODE)) ]]
+         <output> OUT </output>
+         <gas> GAVAIL </gas>
+         <refund> REFUND </refund>
+         <k> STATUS:Int </k>
+         <selfDestruct> SD </selfDestruct>
+         <log> LOGS </log>
+         <accounts> ACCTS </accounts>
+         <touchedAccounts> TOUCHED </touchedAccounts>
+         <statusCode> STATUSCODE </statusCode>
+
+    syntax KItem ::= accessListResult( accountsSet: Set, storageSet: Set ) [symbol]
+    syntax KItem ::= extractAccessList() [function, symbol]
+ // -------------------------------------------------------------------------------
+    rule [[ extractAccessList() => accessListResult( ACCESSED, warmStorage2Set( keys_list(STORAGE), STORAGE, .Set) ) ]]
+         <accessedAccounts> ACCESSED </accessedAccounts>
+         <accessedStorage>  STORAGE  </accessedStorage>
+
+    syntax Set ::= warmStorage2Set   ( List, Map, Set ) [function]
+                 | warmStorage2SetAux( Int, List, Set ) [function]
+ // --------------------------------------------------------------
+    rule warmStorage2Set( .List, _, STORAGELIST ) => STORAGELIST
+    rule warmStorage2Set( (ListItem(ACCT) => .List) _, STORAGE, RESULT => RESULT |Set warmStorage2SetAux(ACCT, Set2List({STORAGE[ACCT]}:>Set), .Set) )
+
+    rule warmStorage2SetAux( _, .List, RESULT ) => RESULT
+    rule warmStorage2SetAux( ACCT, (ListItem(LOCATION) => .List) _LOCATIONS, RESULT => RESULT |Set SetItem(storageLocation(ACCT, LOCATION)) )
+
+
    +
  • contractBytes takes the contents of the <code> cell and returns its binary representation as a String.
  • +
+
    syntax String ::= contractBytes(AccountCode) [function, symbol]
+ // ---------------------------------------------------------------
+    rule contractBytes(WS) => #unparseByteStack(WS)
+
+

The following are expected to exist in the client, but are already defined in [data.md].

+
    +
  • accountEmpty takes the contents of the <code> cell, the contents of the <nonce> cell, and the contents of the <balance> cell and returns true if the account is empty according to the semantics of EIP161 (i.e., empty code zero balance zero nonce).
  • +
  • unparseByteStack takes a WordStack and returns the corresponding byte String.
  • +
  • initKevmCell is the top cell initializer used to construct an initial configuration. +The configuration is expected to have $MODE, $PGM, and $SCHEDULE parameters.
  • +
  • logEntry is an entry in the log data created by a transaction. +It is expected to consist of an Int address, a List of Int topics, and a WordStack of data.
  • +
  • NORMAL is the value of $MODE used by actual transaction execution.
  • +
+
endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/evm-types.md b/include/kframework/evm-types.md deleted file mode 100644 index 420602111c..0000000000 --- a/include/kframework/evm-types.md +++ /dev/null @@ -1,469 +0,0 @@ -Data-Structures over `Word` -=========================== - -EVM uses bounded 256 bit integer words, and sometimes also bytes (8 bit words). -Here we provide the arithmetic of these words, as well as some data-structures over them. -Both are implemented using K's `Int`. - -```k -requires "word.md" - -module EVM-TYPES - imports STRING - imports COLLECTIONS - imports K-EQUAL - imports JSON - imports WORD -``` - -Utilities ---------- - -### Boolean Conversions - -Primitives provide the basic conversion from K's sorts `Int` and `Bool` to EVM's words. - -- `bool2Word` interprets a `Bool` as a `Int`. -- `word2Bool` interprets a `Int` as a `Bool`. - -```k - syntax Int ::= bool2Word ( Bool ) [function, total, smtlib(bool2Word)] - // ---------------------------------------------------------------------- - rule bool2Word( true ) => 1 - rule bool2Word( false ) => 0 - - syntax Bool ::= word2Bool ( Int ) [function, total] - // --------------------------------------------------- - rule word2Bool( W ) => false requires W ==Int 0 - rule word2Bool( W ) => true requires W =/=Int 0 -``` - -- `sgn` gives the twos-complement interperetation of the sign of a word. -- `abs` gives the twos-complement interperetation of the magnitude of a word. - -```k - syntax Int ::= sgn ( Int ) [function, total] - | abs ( Int ) [function, total] - // -------------------------------------------- - rule sgn(I) => -1 requires pow255 <=Int I andBool I 1 requires 0 <=Int I andBool I 0 requires I 0 -Word I requires sgn(I) ==Int -1 - rule abs(I) => I requires sgn(I) ==Int 1 - rule abs(I) => 0 requires sgn(I) ==Int 0 -``` - -Word Operations ---------------- - -### Low-Level - -- `up/Int` performs integer division but rounds up instead of down. - -NOTE: Here, we choose to add `I2 -Int 1` to the numerator beforing doing the division to mimic the C++ implementation. -You could alternatively calculate `I1 modInt I2`, then add one to the normal integer division afterward depending on the result. - -```k - syntax Int ::= Int "up/Int" Int [function, total, smtlib(upDivInt)] - // ------------------------------------------------------------------- - rule _I1 up/Int 0 => 0 [concrete] - rule _I1 up/Int I2 => 0 requires I2 <=Int 0 [concrete] - rule I1 up/Int 1 => I1 [concrete] - rule I1 up/Int I2 => (I1 +Int (I2 -Int 1)) /Int I2 requires 1 log2Int(N) /Int 8 -``` - -The corresponding `Word` operations automatically perform the correct modulus for EVM words. -Warning: operands are assumed to be within the range of a 256 bit EVM word. Unbound integers may not return the correct result. - -```k - syntax Int ::= Int "+Word" Int [function, total] - | Int "*Word" Int [function, total] - | Int "-Word" Int [function, total] - | Int "/Word" Int [function, total] - | Int "%Word" Int [function, total] - // ------------------------------------------------ - rule W0 +Word W1 => chop( W0 +Int W1 ) - rule W0 -Word W1 => chop( W0 -Int W1 ) - rule W0 *Word W1 => chop( W0 *Int W1 ) - rule _ /Word W1 => 0 requires W1 ==Int 0 - rule W0 /Word W1 => W0 /Int W1 requires W1 =/=Int 0 - rule _ %Word W1 => 0 requires W1 ==Int 0 - rule W0 %Word W1 => W0 modInt W1 requires W1 =/=Int 0 -``` - -Care is needed for `^Word` to avoid big exponentiation. -The helper `powmod` is a totalization of the operator `_^%Int__` (which comes with K). -`_^%Int__` is not defined when the modulus (third argument) is zero, but `powmod` is. - -```k - syntax Int ::= Int "^Word" Int [function] - syntax Int ::= powmod(Int, Int, Int) [function, total] - // ------------------------------------------------------ - rule W0 ^Word W1 => powmod(W0, W1, pow256) - - rule [powmod.nonzero]: powmod(W0, W1, W2) => W0 ^%Int W1 W2 requires W2 =/=Int 0 [concrete] - rule [powmod.zero]: powmod( _, _, W2) => 0 requires W2 ==Int 0 [concrete] -``` - -`/sWord` and `%sWord` give the signed interperetations of `/Word` and `%Word`. - -```k - syntax Int ::= Int "/sWord" Int [function] - | Int "%sWord" Int [function] - // ------------------------------------------ - rule [divSWord.same]: W0 /sWord W1 => abs(W0) /Word abs(W1) requires sgn(W0) *Int sgn(W1) ==Int 1 - rule [divSWord.diff]: W0 /sWord W1 => 0 -Word (abs(W0) /Word abs(W1)) requires sgn(W0) *Int sgn(W1) ==Int -1 - rule [modSWord.pos]: W0 %sWord W1 => abs(W0) %Word abs(W1) requires sgn(W0) ==Int 1 - rule [modSWord.neg]: W0 %sWord W1 => 0 -Word (abs(W0) %Word abs(W1)) requires sgn(W0) ==Int -1 -``` - -### Word Comparison - -The `Word` comparisons similarly lift K operators to EVM ones: - -```k - syntax Int ::= Int "Word" Int [function, total] - | Int "<=Word" Int [function, total] - | Int ">=Word" Int [function, total] - | Int "==Word" Int [function, total] - // ------------------------------------------------- - rule W0 bool2Word(W0 Word W1 => bool2Word(W0 >Int W1) - rule W0 <=Word W1 => bool2Word(W0 <=Int W1) - rule W0 >=Word W1 => bool2Word(W0 >=Int W1) - rule W0 ==Word W1 => bool2Word(W0 ==Int W1) -``` - -- `s W0 bool2Word(false) requires sgn(W0) ==K 1 andBool sgn(W1) ==K -1 - rule [s bool2Word(true) requires sgn(W0) ==K -1 andBool sgn(W1) ==K 1 - rule [s abs(W1) >Word" Int [function, total] - | Int ">>sWord" Int [function, total] - // -------------------------------------------------- - rule ~Word W => W xorInt maxUInt256 - rule W0 |Word W1 => W0 |Int W1 - rule W0 &Word W1 => W0 &Int W1 - rule W0 xorWord W1 => W0 xorInt W1 - rule W0 < chop( W0 < 0 [owise] - rule W0 >>Word W1 => W0 >>Int W1 requires 0 <=Int W0 andBool 0 <=Int W1 - rule _ >>Word _ => 0 [owise] - rule W0 >>sWord W1 => chop( (abs(W0) *Int sgn(W0)) >>Int W1 ) requires 0 <=Int W0 andBool 0 <=Int W1 - rule _ >>sWord _ => 0 [owise] -``` - -- `bit` gets bit `N` (0 being MSB). -- `byte` gets byte `N` (0 being the MSB). - -```k - syntax Int ::= bit ( Int , Int ) [function] - | byte ( Int , Int ) [function] - // -------------------------------------------- - rule bit (N, _) => 0 requires notBool (N >=Int 0 andBool N 0 requires notBool (N >=Int 0 andBool N bitRangeInt(W , (255 -Int N) , 1) requires N >=Int 0 andBool N bitRangeInt(W , ( 31 -Int N) *Int 8 , 8) requires N >=Int 0 andBool N (1 <=Int 0 - rule #nBytes(N) => #nBits(N *Int 8) requires N >=Int 0 -``` - -- `signextend(N, W)` sign-extends from byte `N` of `W` (0 being MSB). - -```k - syntax Int ::= signextend( Int , Int ) [function, total] - // -------------------------------------------------------- - rule [signextend.invalid]: signextend(N, W) => W requires N >=Int 32 orBool N chop( (#nBytes(31 -Int N) <=Int 0 andBool word2Bool(bit(256 -Int (8 *Int (N +Int 1)), W)) [concrete] - rule [signextend.positive]: signextend(N, W) => chop( #nBytes(N +Int 1) &Int W ) requires N =Int 0 andBool notBool word2Bool(bit(256 -Int (8 *Int (N +Int 1)), W)) [concrete] -``` - - -A WordStack for EVM -------------------- - -### As a cons-list - -A cons-list is used for the EVM wordstack. - -- `.WordStack` serves as the empty worstack, and -- `_:_` serves as the "cons" operator. - -```k - syntax WordStack ::= ".WordStack" [smtlib(_dotWS)] - | Int ":" WordStack [klabel(_:_WS), smtlib(_WS_)] - // -------------------------------------------------------------------- -``` - -```k - syntax Bytes ::= Int ":" Bytes [function] - // ----------------------------------------- - rule I : BS => Int2Bytes(1, I, BE) +Bytes BS requires I .WordStack requires notBool N >Int 0 - rule [#take.zero-pad]: #take(N, .WordStack) => 0 : #take(N -Int 1, .WordStack) requires N >Int 0 - rule [#take.recursive]: #take(N, (W : WS):WordStack) => W : #take(N -Int 1, WS) requires N >Int 0 - - syntax WordStack ::= #drop ( Int , WordStack ) [klabel(dropWordStack), function, total] - // --------------------------------------------------------------------------------------- - rule #drop(N, WS:WordStack) => WS requires notBool N >Int 0 - rule #drop(N, .WordStack) => .WordStack requires N >Int 0 - rule #drop(N, (W : WS):WordStack) => #drop(1, #drop(N -Int 1, (W : WS))) requires N >Int 1 - rule #drop(1, (_ : WS):WordStack) => WS -``` - -### Element Access - -- `WS [ N ]` accesses element `N` of `WS`. -- `WS [ N := W ]` sets element `N` of `WS` to `W` (padding with zeros as needed). - -```k - syntax Int ::= WordStack "[" Int "]" [function, total] - // ------------------------------------------------------ - rule (W : _):WordStack [ N ] => W requires N ==Int 0 - rule WS:WordStack [ N ] => #drop(N, WS) [ 0 ] requires N >Int 0 - rule _:WordStack [ N ] => 0 requires N W : WS requires N ==Int 0 - rule ( W0 : WS):WordStack [ N := W ] => W0 : (WS [ N -Int 1 := W ]) requires N >Int 0 - rule WS :WordStack [ N := _ ] => WS requires N (0 : .WordStack) [ N := W ] -``` - -- `#sizeWordStack` calculates the size of a `WordStack`. -- `_in_` determines if a `Int` occurs in a `WordStack`. - -```k - syntax Int ::= #sizeWordStack ( WordStack ) [function, total, smtlib(sizeWordStack)] - | #sizeWordStack ( WordStack , Int ) [function, total, klabel(sizeWordStackAux), smtlib(sizeWordStackAux)] - // ----------------------------------------------------------------------------------------------------------------------- - rule #sizeWordStack ( WS ) => #sizeWordStack(WS, 0) - rule #sizeWordStack ( .WordStack, SIZE ) => SIZE - rule #sizeWordStack ( _ : WS, SIZE ) => #sizeWordStack(WS, SIZE +Int 1) - - syntax Bool ::= Int "in" WordStack [function] - // --------------------------------------------- - rule _ in .WordStack => false - rule W in (W' : WS) => (W ==K W') orElseBool (W in WS) -``` - -- `#replicateAux` pushes `N` copies of `A` onto a `WordStack`. -- `#replicate` is a `WordStack` of length `N` with `A` the value of every element. - -```k - syntax WordStack ::= #replicate ( Int, Int ) [function, total] - | #replicateAux ( Int, Int, WordStack ) [function, total] - // ---------------------------------------------------------------------------- - rule #replicate ( N, A ) => #replicateAux(N, A, .WordStack) - rule #replicateAux( N, A, WS ) => #replicateAux(N -Int 1, A, A : WS) requires N >Int 0 - rule #replicateAux( N, _A, WS ) => WS requires notBool N >Int 0 -``` - -- `WordStack2List` converts a term of sort `WordStack` to a term of sort `List`. - -```k - syntax List ::= WordStack2List ( WordStack ) [function, total] - // -------------------------------------------------------------- - rule WordStack2List(.WordStack) => .List - rule WordStack2List(W : WS) => ListItem(W) WordStack2List(WS) -``` - - -- `WS [ START := WS' ]` assigns a contiguous chunk of `WS'` to `WS` starting at position `START`. -- `#write(WM, IDX, VAL)` assigns a value `VAL` at position `IDX` in `WM`. -- TODO: remove the first rule for `:=` when [#1844](https://github.com/runtimeverification/evm-semantics/issues/1844) is fixed. - -```k - syntax Bytes ::= "#write" "(" Bytes "," Int "," Int ")" [function] - | Bytes "[" Int ":=" Bytes "]" [function, total, klabel(mapWriteRange)] - // -------------------------------------------------------------------------------------- - rule #write(WM, IDX, VAL) => padRightBytes(WM, IDX +Int 1, 0) [ IDX <- VAL ] - - rule WS [ START := WS' ] => WS requires 0 <=Int START andBool lengthBytes(WS') ==Int 0 [concrete] - rule WS [ START := WS' ] => replaceAtBytes(padRightBytes(WS, START +Int lengthBytes(WS'), 0), START, WS') requires 0 <=Int START andBool lengthBytes(WS') =/=Int 0 [concrete] - rule _ [ START := _ ] => .Bytes requires START chop(Bytes2Int(WS, BE, Unsigned)) [concrete] - - syntax Int ::= #asInteger ( Bytes ) [function, total] - // ----------------------------------------------------- - rule #asInteger(WS) => Bytes2Int(WS, BE, Unsigned) [concrete] - - syntax Account ::= #asAccount ( Bytes ) [function] - // -------------------------------------------------- - rule #asAccount(BS) => .Account requires lengthBytes(BS) ==Int 0 - rule #asAccount(BS) => #asWord(BS) [owise] - - syntax Bytes ::= #asByteStack ( Int ) [function, total] - // ------------------------------------------------------- - rule #asByteStack(W) => Int2Bytes(W, BE, Unsigned) [concrete] - - syntax Bytes ::= #range ( Bytes , Int , Int ) [function, total] - // --------------------------------------------------------------- - rule #range(_, START, WIDTH) => .Bytes requires notBool (WIDTH >=Int 0 andBool START >=Int 0) [concrete] - rule [bytesRange] : #range(WS, START, WIDTH) => substrBytes(padRightBytes(WS, START +Int WIDTH, 0), START, START +Int WIDTH) requires WIDTH >=Int 0 andBool START >=Int 0 andBool START padRightBytes(.Bytes, WIDTH, 0) [owise, concrete] - - syntax Bytes ::= #padToWidth ( Int , Bytes ) [function, total] - | #padRightToWidth ( Int , Bytes ) [function, total] - // ------------------------------------------------------------------- - rule #padToWidth(N, BS) => BS requires notBool (0 <=Int N) [concrete] - rule #padToWidth(N, BS) => padLeftBytes(BS, N, 0) requires 0 <=Int N [concrete] - rule #padRightToWidth(N, BS) => BS requires notBool (0 <=Int N) [concrete] - rule #padRightToWidth(N, BS) => padRightBytes(BS, N, 0) requires 0 <=Int N [concrete] -``` - -Accounts --------- - -### Empty Account - -- `.Account` represents the case when an account ID is referenced in the yellowpaper, but - the actual value of the account ID is the empty set. This is used, for example, when - referring to the destination of a message which creates a new contract. - -```k - syntax Account ::= ".Account" | Int - // ----------------------------------- - - syntax AccountCode ::= Bytes - // ---------------------------- -``` - -### Addresses - -- `#addr` turns an Ethereum word into the corresponding Ethereum address (160 LSB). - -```k - syntax Int ::= #addr ( Int ) [function, total] - // --------------------------------------- - rule #addr(W) => W %Word pow160 -``` - -Storage/Memory Lookup ---------------------- - -`#lookup*` looks up a key in a map and returns 0 if the key doesn't exist, otherwise returning its value. - -```k - syntax Int ::= #lookup ( Map , Int ) [function, total, smtlib(lookup)] - | #lookupMemory ( Map , Int ) [function, total, smtlib(lookupMemory)] - // ----------------------------------------------------------------------------------- - rule [#lookup.some]: #lookup( (KEY |-> VAL:Int) _M, KEY ) => VAL modInt pow256 - rule [#lookup.none]: #lookup( M, KEY ) => 0 requires notBool KEY in_keys(M) - //Impossible case, for completeness - rule [#lookup.notInt]: #lookup( (KEY |-> VAL ) _M, KEY ) => 0 requires notBool isInt(VAL) - - rule [#lookupMemory.some]: #lookupMemory( (KEY |-> VAL:Int) _M, KEY ) => VAL modInt 256 - rule [#lookupMemory.none]: #lookupMemory( M, KEY ) => 0 requires notBool KEY in_keys(M) - //Impossible case, for completeness - rule [#lookupMemory.notInt]: #lookupMemory( (KEY |-> VAL ) _M, KEY ) => 0 requires notBool isInt(VAL) -``` - -Substate Log ------------- - -During execution of a transaction some things are recorded in the substate log (Section 6.1 in YellowPaper). -This is a right cons-list of `SubstateLogEntry` (which contains the account ID along with the specified portions of the `wordStack` and `localMem`). - -```k - syntax SubstateLogEntry ::= "{" Int "|" List "|" Bytes "}" [klabel(logEntry)] - // ----------------------------------------------------------------------------- -``` - -Transactions ------------- - -Productions related to transactions - -```k - syntax TxType ::= ".TxType" - | "Legacy" - | "AccessList" - | "DynamicFee" - // ------------------------------ - - syntax Int ::= #dasmTxPrefix ( TxType ) [function] - // -------------------------------------------------- - rule #dasmTxPrefix (Legacy) => 0 - rule #dasmTxPrefix (AccessList) => 1 - rule #dasmTxPrefix (DynamicFee) => 2 - - syntax TxType ::= #asmTxPrefix ( Int ) [function] - // ------------------------------------------------- - rule #asmTxPrefix (0) => Legacy - rule #asmTxPrefix (1) => AccessList - rule #asmTxPrefix (2) => DynamicFee - - syntax TxData ::= LegacyTx | AccessListTx | DynamicFeeTx - // -------------------------------------------------------- - - syntax LegacyTx ::= LegacyTxData ( nonce: Int, gasPrice: Int, gasLimit: Int, to: Account, value: Int, data: Bytes ) - | LegacyProtectedTxData( nonce: Int, gasPrice: Int, gasLimit: Int, to: Account, value: Int, data: Bytes, chainId: Int ) - syntax AccessListTx ::= AccessListTxData ( nonce: Int, gasPrice: Int, gasLimit: Int, to: Account, value: Int, data: Bytes, chainId: Int, accessLists: JSONs ) - syntax DynamicFeeTx ::= DynamicFeeTxData ( nonce: Int, priorityGasFee: Int, maxGasFee: Int, gasLimit: Int, to: Account, value: Int, data: Bytes, chainId: Int, accessLists: JSONs) - // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -endmodule -``` diff --git a/include/kframework/evm-types/index.html b/include/kframework/evm-types/index.html new file mode 100644 index 0000000000..16e2739122 --- /dev/null +++ b/include/kframework/evm-types/index.html @@ -0,0 +1,699 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Data-Structures over Word

+

EVM uses bounded 256 bit integer words, and sometimes also bytes (8 bit words). +Here we provide the arithmetic of these words, as well as some data-structures over them. +Both are implemented using K's Int.

+
requires "word.md"
+
+module EVM-TYPES
+    imports STRING
+    imports COLLECTIONS
+    imports K-EQUAL
+    imports JSON
+    imports WORD
+
+

Utilities

+

Boolean Conversions

+

Primitives provide the basic conversion from K's sorts Int and Bool to EVM's words.

+
    +
  • bool2Word interprets a Bool as a Int.
  • +
  • word2Bool interprets a Int as a Bool.
  • +
+
    syntax Int ::= bool2Word ( Bool ) [function, total, smtlib(bool2Word)]
+ // ----------------------------------------------------------------------
+    rule bool2Word( true  ) => 1
+    rule bool2Word( false ) => 0
+
+    syntax Bool ::= word2Bool ( Int ) [function, total]
+ // ---------------------------------------------------
+    rule word2Bool( W ) => false requires W  ==Int 0
+    rule word2Bool( W ) => true  requires W =/=Int 0
+
+
    +
  • sgn gives the twos-complement interperetation of the sign of a word.
  • +
  • abs gives the twos-complement interperetation of the magnitude of a word.
  • +
+
    syntax Int ::= sgn ( Int ) [function, total]
+                 | abs ( Int ) [function, total]
+ // --------------------------------------------
+    rule sgn(I) => -1 requires pow255 <=Int I andBool I <Int pow256
+    rule sgn(I) =>  1 requires 0 <=Int I andBool I <Int pow255
+    rule sgn(I) =>  0 requires I <Int 0 orBool pow256 <=Int I
+
+    rule abs(I) => 0 -Word I requires sgn(I) ==Int -1
+    rule abs(I) => I         requires sgn(I) ==Int  1
+    rule abs(I) => 0         requires sgn(I) ==Int  0
+
+

Word Operations

+

Low-Level

+
    +
  • up/Int performs integer division but rounds up instead of down.
  • +
+

NOTE: Here, we choose to add I2 -Int 1 to the numerator beforing doing the division to mimic the C++ implementation. +You could alternatively calculate I1 modInt I2, then add one to the normal integer division afterward depending on the result.

+
    syntax Int ::= Int "up/Int" Int [function, total, smtlib(upDivInt)]
+ // -------------------------------------------------------------------
+    rule _I1 up/Int 0  => 0                                                  [concrete]
+    rule _I1 up/Int I2 => 0                             requires I2 <=Int 0  [concrete]
+    rule  I1 up/Int 1  => I1                                                 [concrete]
+    rule  I1 up/Int I2 => (I1 +Int (I2 -Int 1)) /Int I2 requires 1  <Int  I2 [concrete]
+
+
    +
  • log256Int returns the log base 256 (floored) of an integer.
  • +
+
    syntax Int ::= log256Int ( Int ) [function]
+ // -------------------------------------------
+    rule log256Int(N) => log2Int(N) /Int 8
+
+

The corresponding <op>Word operations automatically perform the correct modulus for EVM words. +Warning: operands are assumed to be within the range of a 256 bit EVM word. Unbound integers may not return the correct result.

+
    syntax Int ::= Int "+Word" Int [function, total]
+                 | Int "*Word" Int [function, total]
+                 | Int "-Word" Int [function, total]
+                 | Int "/Word" Int [function, total]
+                 | Int "%Word" Int [function, total]
+ // ------------------------------------------------
+    rule W0 +Word W1 => chop( W0 +Int W1 )
+    rule W0 -Word W1 => chop( W0 -Int W1 )
+    rule W0 *Word W1 => chop( W0 *Int W1 )
+    rule  _ /Word W1 => 0            requires W1  ==Int 0
+    rule W0 /Word W1 => W0 /Int W1   requires W1 =/=Int 0
+    rule  _ %Word W1 => 0            requires W1  ==Int 0
+    rule W0 %Word W1 => W0 modInt W1 requires W1 =/=Int 0
+
+

Care is needed for ^Word to avoid big exponentiation. +The helper powmod is a totalization of the operator _^%Int__ (which comes with K). +_^%Int__ is not defined when the modulus (third argument) is zero, but powmod is.

+
    syntax Int ::= Int "^Word" Int       [function]
+    syntax Int ::= powmod(Int, Int, Int) [function, total]
+ // ------------------------------------------------------
+    rule W0 ^Word W1 => powmod(W0, W1, pow256)
+
+    rule [powmod.nonzero]: powmod(W0, W1, W2) => W0 ^%Int W1 W2  requires W2 =/=Int 0 [concrete]
+    rule [powmod.zero]:    powmod( _,  _, W2) => 0               requires W2  ==Int 0 [concrete]
+
+

/sWord and %sWord give the signed interperetations of /Word and %Word.

+
    syntax Int ::= Int "/sWord" Int [function]
+                 | Int "%sWord" Int [function]
+ // ------------------------------------------
+    rule [divSWord.same]: W0 /sWord W1 =>          abs(W0) /Word abs(W1)  requires sgn(W0) *Int sgn(W1) ==Int  1
+    rule [divSWord.diff]: W0 /sWord W1 => 0 -Word (abs(W0) /Word abs(W1)) requires sgn(W0) *Int sgn(W1) ==Int -1
+    rule [modSWord.pos]:  W0 %sWord W1 =>          abs(W0) %Word abs(W1)  requires sgn(W0) ==Int  1
+    rule [modSWord.neg]:  W0 %sWord W1 => 0 -Word (abs(W0) %Word abs(W1)) requires sgn(W0) ==Int -1
+
+

Word Comparison

+

The <op>Word comparisons similarly lift K operators to EVM ones:

+
    syntax Int ::= Int "<Word"  Int [function, total]
+                 | Int ">Word"  Int [function, total]
+                 | Int "<=Word" Int [function, total]
+                 | Int ">=Word" Int [function, total]
+                 | Int "==Word" Int [function, total]
+ // -------------------------------------------------
+    rule W0 <Word  W1 => bool2Word(W0 <Int  W1)
+    rule W0 >Word  W1 => bool2Word(W0 >Int  W1)
+    rule W0 <=Word W1 => bool2Word(W0 <=Int W1)
+    rule W0 >=Word W1 => bool2Word(W0 >=Int W1)
+    rule W0 ==Word W1 => bool2Word(W0 ==Int W1)
+
+
    +
  • s<Word implements a less-than for Word (with signed interperetation).
  • +
+
    syntax Int ::= Int "s<Word" Int [function, total]
+ // -------------------------------------------------
+    rule [s<Word.pp]: W0 s<Word W1 => W0 <Word W1           requires sgn(W0) ==K 1  andBool sgn(W1) ==K 1
+    rule [s<Word.pn]: W0 s<Word W1 => bool2Word(false)      requires sgn(W0) ==K 1  andBool sgn(W1) ==K -1
+    rule [s<Word.np]: W0 s<Word W1 => bool2Word(true)       requires sgn(W0) ==K -1 andBool sgn(W1) ==K 1
+    rule [s<Word.nn]: W0 s<Word W1 => abs(W1) <Word abs(W0) requires sgn(W0) ==K -1 andBool sgn(W1) ==K -1
+
+

Bitwise Operators

+

Bitwise logical operators are lifted from the integer versions.

+
    syntax Int ::= "~Word" Int       [function, total]
+                 | Int "|Word"   Int [function, total]
+                 | Int "&Word"   Int [function, total]
+                 | Int "xorWord" Int [function, total]
+                 | Int "<<Word"  Int [function, total]
+                 | Int ">>Word"  Int [function, total]
+                 | Int ">>sWord" Int [function, total]
+ // --------------------------------------------------
+    rule ~Word W       => W xorInt maxUInt256
+    rule W0 |Word   W1 => W0 |Int W1
+    rule W0 &Word   W1 => W0 &Int W1
+    rule W0 xorWord W1 => W0 xorInt W1
+    rule W0 <<Word  W1 => chop( W0 <<Int W1 ) requires 0 <=Int W0 andBool 0 <=Int W1 andBool W1 <Int 256
+    rule  _ <<Word  _  => 0 [owise]
+    rule W0 >>Word  W1 => W0 >>Int W1 requires 0 <=Int W0 andBool 0 <=Int W1
+    rule  _ >>Word   _ => 0 [owise]
+    rule W0 >>sWord W1 => chop( (abs(W0) *Int sgn(W0)) >>Int W1 ) requires 0 <=Int W0 andBool 0 <=Int W1
+    rule  _ >>sWord  _ => 0 [owise]
+
+
    +
  • bit gets bit N (0 being MSB).
  • +
  • byte gets byte N (0 being the MSB).
  • +
+
    syntax Int ::= bit  ( Int , Int ) [function]
+                 | byte ( Int , Int ) [function]
+ // --------------------------------------------
+    rule bit (N, _) => 0 requires notBool (N >=Int 0 andBool N <Int 256)
+    rule byte(N, _) => 0 requires notBool (N >=Int 0 andBool N <Int  32)
+
+    rule bit (N, W) => bitRangeInt(W , (255 -Int N)        , 1) requires N >=Int 0 andBool N <Int 256
+    rule byte(N, W) => bitRangeInt(W , ( 31 -Int N) *Int 8 , 8) requires N >=Int 0 andBool N <Int  32
+
+
    +
  • #nBits shifts in N ones from the right.
  • +
  • #nBytes shifts in N bytes of ones from the right.
  • +
+
    syntax Int ::= #nBits  ( Int )  [function]
+                 | #nBytes ( Int )  [function]
+ // ------------------------------------------
+    rule #nBits(N)  => (1 <<Int N) -Int 1 requires N >=Int 0
+    rule #nBytes(N) => #nBits(N *Int 8)   requires N >=Int 0
+
+
    +
  • signextend(N, W) sign-extends from byte N of W (0 being MSB).
  • +
+
    syntax Int ::= signextend( Int , Int ) [function, total]
+ // --------------------------------------------------------
+    rule [signextend.invalid]:  signextend(N, W) => W requires N >=Int 32 orBool N <Int 0                                                                                                                      [concrete]
+    rule [signextend.negative]: signextend(N, W) => chop( (#nBytes(31 -Int N) <<Byte (N +Int 1)) |Int W ) requires N <Int 32 andBool N >=Int 0 andBool         word2Bool(bit(256 -Int (8 *Int (N +Int 1)), W)) [concrete]
+    rule [signextend.positive]: signextend(N, W) => chop( #nBytes(N +Int 1)                      &Int W ) requires N <Int 32 andBool N >=Int 0 andBool notBool word2Bool(bit(256 -Int (8 *Int (N +Int 1)), W)) [concrete]
+
+

A WordStack for EVM

+

As a cons-list

+

A cons-list is used for the EVM wordstack.

+
    +
  • .WordStack serves as the empty worstack, and
  • +
  • _:_ serves as the "cons" operator.
  • +
+
    syntax WordStack ::= ".WordStack"      [smtlib(_dotWS)]
+                       | Int ":" WordStack [klabel(_:_WS), smtlib(_WS_)]
+ // --------------------------------------------------------------------
+
+
    syntax Bytes ::= Int ":" Bytes [function]
+ // -----------------------------------------
+    rule I : BS => Int2Bytes(1, I, BE) +Bytes BS requires I <Int 256
+
+
    +
  • #take(N , WS) keeps the first N elements of a WordStack (passing with zeros as needed).
  • +
  • #drop(N , WS) removes the first N elements of a WordStack.
  • +
+
    syntax WordStack ::= #take ( Int , WordStack ) [klabel(takeWordStack), function, total]
+ // ---------------------------------------------------------------------------------------
+    rule [#take.base]:      #take(N, _WS)                => .WordStack                      requires notBool N >Int 0
+    rule [#take.zero-pad]:  #take(N, .WordStack)         => 0 : #take(N -Int 1, .WordStack) requires N >Int 0
+    rule [#take.recursive]: #take(N, (W : WS):WordStack) => W : #take(N -Int 1, WS)         requires N >Int 0
+
+    syntax WordStack ::= #drop ( Int , WordStack ) [klabel(dropWordStack), function, total]
+ // ---------------------------------------------------------------------------------------
+    rule #drop(N, WS:WordStack)       => WS                                  requires notBool N >Int 0
+    rule #drop(N, .WordStack)         => .WordStack                          requires         N >Int 0
+    rule #drop(N, (W : WS):WordStack) => #drop(1, #drop(N -Int 1, (W : WS))) requires         N >Int 1
+    rule #drop(1, (_ : WS):WordStack) => WS
+
+

Element Access

+
    +
  • WS [ N ] accesses element N of WS.
  • +
  • WS [ N := W ] sets element N of WS to W (padding with zeros as needed).
  • +
+
    syntax Int ::= WordStack "[" Int "]" [function, total]
+ // ------------------------------------------------------
+    rule (W : _):WordStack [ N ] => W                  requires N ==Int 0
+    rule WS:WordStack      [ N ] => #drop(N, WS) [ 0 ] requires N  >Int 0
+    rule  _:WordStack      [ N ] => 0                  requires N  <Int 0
+
+    syntax WordStack ::= WordStack "[" Int ":=" Int "]" [function, total]
+ // ---------------------------------------------------------------------
+    rule (_W0 : WS):WordStack [ N := W ] => W  : WS                     requires N ==Int 0
+    rule ( W0 : WS):WordStack [ N := W ] => W0 : (WS [ N -Int 1 := W ]) requires N  >Int 0
+    rule        WS :WordStack [ N := _ ] => WS                          requires N  <Int 0
+    rule .WordStack           [ N := W ] => (0 : .WordStack) [ N := W ]
+
+
    +
  • #sizeWordStack calculates the size of a WordStack.
  • +
  • _in_ determines if a Int occurs in a WordStack.
  • +
+
    syntax Int ::= #sizeWordStack ( WordStack )       [function, total, smtlib(sizeWordStack)]
+                 | #sizeWordStack ( WordStack , Int ) [function, total, klabel(sizeWordStackAux), smtlib(sizeWordStackAux)]
+ // -----------------------------------------------------------------------------------------------------------------------
+    rule #sizeWordStack ( WS ) => #sizeWordStack(WS, 0)
+    rule #sizeWordStack ( .WordStack, SIZE ) => SIZE
+    rule #sizeWordStack ( _ : WS, SIZE )     => #sizeWordStack(WS, SIZE +Int 1)
+
+    syntax Bool ::= Int "in" WordStack [function]
+ // ---------------------------------------------
+    rule _ in .WordStack => false
+    rule W in (W' : WS)  => (W ==K W') orElseBool (W in WS)
+
+
    +
  • #replicateAux pushes N copies of A onto a WordStack.
  • +
  • #replicate is a WordStack of length N with A the value of every element.
  • +
+
    syntax WordStack ::= #replicate    ( Int, Int )            [function, total]
+                       | #replicateAux ( Int, Int, WordStack ) [function, total]
+ // ----------------------------------------------------------------------------
+    rule #replicate   ( N,  A )     => #replicateAux(N, A, .WordStack)
+    rule #replicateAux( N,  A, WS ) => #replicateAux(N -Int 1, A, A : WS) requires         N >Int 0
+    rule #replicateAux( N, _A, WS ) => WS                                 requires notBool N >Int 0
+
+
    +
  • WordStack2List converts a term of sort WordStack to a term of sort List.
  • +
+
    syntax List ::= WordStack2List ( WordStack ) [function, total]
+ // --------------------------------------------------------------
+    rule WordStack2List(.WordStack) => .List
+    rule WordStack2List(W : WS) => ListItem(W) WordStack2List(WS)
+
+
    +
  • WS [ START := WS' ] assigns a contiguous chunk of WS' to WS starting at position START.
  • +
  • #write(WM, IDX, VAL) assigns a value VAL at position IDX in WM.
  • +
  • TODO: remove the first rule for := when #1844 is fixed.
  • +
+
    syntax Bytes ::= "#write" "(" Bytes "," Int "," Int ")" [function]
+                   | Bytes "[" Int ":=" Bytes "]" [function, total, klabel(mapWriteRange)]
+ // --------------------------------------------------------------------------------------
+    rule #write(WM, IDX, VAL) => padRightBytes(WM, IDX +Int 1, 0) [ IDX <- VAL ]
+
+    rule WS [ START := WS' ] => WS                                                                            requires 0     <=Int START andBool lengthBytes(WS')  ==Int 0 [concrete]
+    rule WS [ START := WS' ] => replaceAtBytes(padRightBytes(WS, START +Int lengthBytes(WS'), 0), START, WS') requires 0     <=Int START andBool lengthBytes(WS') =/=Int 0 [concrete]
+    rule _  [ START := _ ]   => .Bytes                                                                        requires START  <Int 0                                       [concrete]
+
+

Bytes helper functions

+
    +
  • #asWord will interperet a stack of bytes as a single word (with MSB first).
  • +
  • #asInteger will interperet a stack of bytes as a single arbitrary-precision integer (with MSB first).
  • +
  • #asAccount will interpret a stack of bytes as a single account id (with MSB first). +Differs from #asWord only in that an empty stack represents the empty account, not account zero.
  • +
  • #asByteStack will split a single word up into a Bytes.
  • +
  • #range(WS, N, W) access the range of WS beginning with N of width W.
  • +
  • #padToWidth(N, WS) and #padRightToWidth make sure that a Bytes is the correct size.
  • +
+
    syntax Int ::= #asWord ( Bytes ) [function, total, smtlib(asWord)]
+ // ------------------------------------------------------------------
+    rule #asWord(WS) => chop(Bytes2Int(WS, BE, Unsigned)) [concrete]
+
+    syntax Int ::= #asInteger ( Bytes ) [function, total]
+ // -----------------------------------------------------
+    rule #asInteger(WS) => Bytes2Int(WS, BE, Unsigned) [concrete]
+
+    syntax Account ::= #asAccount ( Bytes ) [function]
+ // --------------------------------------------------
+    rule #asAccount(BS) => .Account    requires lengthBytes(BS) ==Int 0
+    rule #asAccount(BS) => #asWord(BS) [owise]
+
+    syntax Bytes ::= #asByteStack ( Int ) [function, total]
+ // -------------------------------------------------------
+    rule #asByteStack(W) => Int2Bytes(W, BE, Unsigned) [concrete]
+
+    syntax Bytes ::= #range ( Bytes , Int , Int ) [function, total]
+ // ---------------------------------------------------------------
+    rule                #range(_, START, WIDTH)  => .Bytes                                                                       requires notBool (WIDTH >=Int 0 andBool START >=Int 0) [concrete]
+    rule [bytesRange] : #range(WS, START, WIDTH) => substrBytes(padRightBytes(WS, START +Int WIDTH, 0), START, START +Int WIDTH) requires WIDTH >=Int 0 andBool START >=Int 0 andBool START <Int lengthBytes(WS) [concrete]
+    rule                #range(_, _, WIDTH)      => padRightBytes(.Bytes, WIDTH, 0) [owise, concrete]
+
+    syntax Bytes ::= #padToWidth      ( Int , Bytes ) [function, total]
+                   | #padRightToWidth ( Int , Bytes ) [function, total]
+ // -------------------------------------------------------------------
+    rule #padToWidth(N, BS)      =>               BS        requires notBool (0 <=Int N) [concrete]
+    rule #padToWidth(N, BS)      =>  padLeftBytes(BS, N, 0) requires          0 <=Int N  [concrete]
+    rule #padRightToWidth(N, BS) =>               BS        requires notBool (0 <=Int N) [concrete]
+    rule #padRightToWidth(N, BS) => padRightBytes(BS, N, 0) requires          0 <=Int N  [concrete]
+
+

Accounts

+

Empty Account

+
    +
  • .Account represents the case when an account ID is referenced in the yellowpaper, but +the actual value of the account ID is the empty set. This is used, for example, when +referring to the destination of a message which creates a new contract.
  • +
+
    syntax Account ::= ".Account" | Int
+ // -----------------------------------
+
+    syntax AccountCode ::= Bytes
+ // ----------------------------
+
+

Addresses

+
    +
  • #addr turns an Ethereum word into the corresponding Ethereum address (160 LSB).
  • +
+
    syntax Int ::= #addr ( Int ) [function, total]
+ // ---------------------------------------
+    rule #addr(W) => W %Word pow160
+
+

Storage/Memory Lookup

+

#lookup* looks up a key in a map and returns 0 if the key doesn't exist, otherwise returning its value.

+
    syntax Int ::= #lookup        ( Map , Int ) [function, total, smtlib(lookup)]
+                 | #lookupMemory  ( Map , Int ) [function, total, smtlib(lookupMemory)]
+ // -----------------------------------------------------------------------------------
+    rule [#lookup.some]:         #lookup(       (KEY |-> VAL:Int) _M, KEY ) => VAL modInt pow256
+    rule [#lookup.none]:         #lookup(                          M, KEY ) => 0                 requires notBool KEY in_keys(M)
+    //Impossible case, for completeness
+    rule [#lookup.notInt]:       #lookup(       (KEY |-> VAL    ) _M, KEY ) => 0                 requires notBool isInt(VAL)
+
+    rule [#lookupMemory.some]:   #lookupMemory( (KEY |-> VAL:Int) _M, KEY ) => VAL modInt 256
+    rule [#lookupMemory.none]:   #lookupMemory(                    M, KEY ) => 0                 requires notBool KEY in_keys(M)
+    //Impossible case, for completeness
+    rule [#lookupMemory.notInt]: #lookupMemory( (KEY |-> VAL    ) _M, KEY ) => 0                 requires notBool isInt(VAL)
+
+

Substate Log

+

During execution of a transaction some things are recorded in the substate log (Section 6.1 in YellowPaper). +This is a right cons-list of SubstateLogEntry (which contains the account ID along with the specified portions of the wordStack and localMem).

+
    syntax SubstateLogEntry ::= "{" Int "|" List "|" Bytes "}" [klabel(logEntry)]
+ // -----------------------------------------------------------------------------
+
+

Transactions

+

Productions related to transactions

+
    syntax TxType ::= ".TxType"
+                    | "Legacy"
+                    | "AccessList"
+                    | "DynamicFee"
+ // ------------------------------
+
+    syntax Int ::= #dasmTxPrefix ( TxType ) [function]
+ // --------------------------------------------------
+    rule #dasmTxPrefix (Legacy)     => 0
+    rule #dasmTxPrefix (AccessList) => 1
+    rule #dasmTxPrefix (DynamicFee) => 2
+
+    syntax TxType ::= #asmTxPrefix ( Int ) [function]
+ // -------------------------------------------------
+    rule #asmTxPrefix (0) => Legacy
+    rule #asmTxPrefix (1) => AccessList
+    rule #asmTxPrefix (2) => DynamicFee
+
+    syntax TxData ::= LegacyTx | AccessListTx | DynamicFeeTx
+ // --------------------------------------------------------
+
+    syntax LegacyTx     ::= LegacyTxData         ( nonce: Int, gasPrice: Int, gasLimit: Int, to: Account, value: Int, data: Bytes )
+                          | LegacyProtectedTxData( nonce: Int, gasPrice: Int, gasLimit: Int, to: Account, value: Int, data: Bytes, chainId: Int )
+    syntax AccessListTx ::= AccessListTxData     ( nonce: Int, gasPrice: Int, gasLimit: Int, to: Account, value: Int, data: Bytes, chainId: Int, accessLists: JSONs )
+    syntax DynamicFeeTx ::= DynamicFeeTxData     ( nonce: Int, priorityGasFee: Int, maxGasFee: Int, gasLimit: Int, to: Account, value: Int, data: Bytes, chainId: Int, accessLists: JSONs)
+ // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/evm.md b/include/kframework/evm.md deleted file mode 100644 index dc7c215a91..0000000000 --- a/include/kframework/evm.md +++ /dev/null @@ -1,2345 +0,0 @@ -EVM Execution -============= - -### Overview - -The EVM is a stack machine over some simple opcodes. -Most of the opcodes are "local" to the execution state of the machine, but some of them must interact with the world state. -This file only defines the local execution operations, the file `driver.md` will define the interactions with the world state. - -```k -requires "data.md" -requires "network.md" -requires "gas.md" - -module EVM - imports STRING - imports EVM-DATA - imports NETWORK - imports GAS -``` - -Configuration -------------- - -The configuration has cells for the current account id, the current opcode, the program counter, the current gas, the gas price, the current program, the word stack, and the local memory. -In addition, there are cells for the callstack and execution substate. - -We've broken up the configuration into two components; those parts of the state that mutate during execution of a single transaction and those that are static throughout. -In the comments next to each cell, we've marked which component of the YellowPaper state corresponds to each cell. - -```k - configuration - - $PGM:EthereumSimulation - 1 - $MODE:Mode - $SCHEDULE:Schedule - - - - // EVM Specific - // ============ - - - - // Mutable during a single transaction - // ----------------------------------- - - .Bytes // H_RETURN - .StatusCode - .List - .List - .Set - - - .Bytes - .Set - - // I_* - .Account // I_a - .Account // I_s - .Bytes // I_d - 0 // I_v - - // \mu_* - .WordStack // \mu_s - .Bytes // \mu_m - 0 // \mu_pc - 0:Gas // \mau_g - 0 // \mu_i - 0:Gas - - false - 0 - - - // A_* (execution substate) - - .Set // A_s - .List // A_l - 0 // A_r - .Set - .Map - - - // Immutable during a single transaction - // ------------------------------------- - - 0 // I_p - .Account // I_o - - // I_H* (block information) - .List - - 0 // I_Hp - 0 // I_Ho - 0 // I_Hc - 0 // I_Hr - 0 // I_Ht - 0 // I_He - .Bytes // I_Hb - 0 // I_Hd - 0 // I_Hi - 0 // I_Hl - 0:Gas // I_Hg - 0 // I_Hs - .Bytes // I_Hx - 0 // I_Hm - 0 // I_Hn - 0 - - [ .JSONs ] - - - - - // Ethereum Network - // ================ - - - - // Chain identifier - // ---------------- - $CHAINID:Int - - // Accounts Record - // --------------- - - - - 0 - 0 - .Bytes:AccountCode - .Map - .Map - 0 - - - - // Transactions Record - // ------------------- - - .List - .List - - - - 0 - 0 // T_n - 0 // T_p - 0 // T_g - .Account // T_t - 0 // T_v - 0 // T_w - .Bytes // T_r - .Bytes // T_s - .Bytes // T_i/T_e - [ .JSONs ] // T_a - 0 // T_c - 0 - 0 - .TxType - - - - - - - - - syntax EthereumSimulation - // ---------------------------- -``` - -Modal Semantics ---------------- - -Our semantics is modal, with the initial mode being set on the command line via `-cMODE=EXECMODE`. - -- `NORMAL` executes as a client on the network would. -- `VMTESTS` skips `CALL*` and `CREATE` operations. - -```k - syntax Mode ::= "NORMAL" [klabel(NORMAL), symbol] - | "VMTESTS" [klabel(VMTESTS), symbol] - // --------------------------------------------------- -``` - -State Stacks ------------- - -### The CallStack - -The `callStack` cell stores a list of previous VM execution states. - -- `#pushCallStack` saves a copy of VM execution state on the `callStack`. -- `#popCallStack` restores the top element of the `callStack`. -- `#dropCallStack` removes the top element of the `callStack`. - -```k - syntax InternalOp ::= "#pushCallStack" - // -------------------------------------- - rule #pushCallStack => . ... - STACK => ListItem(CALLSTATE) STACK - CALLSTATE - - syntax InternalOp ::= "#popCallStack" - // ------------------------------------- - rule #popCallStack => . ... - ListItem(CALLSTATE) REST => REST - _ => CALLSTATE - - syntax InternalOp ::= "#dropCallStack" - // -------------------------------------- - rule #dropCallStack => . ... - ListItem(_) REST => REST -``` - -### The StateStack - -The `interimStates` cell stores a list of previous world states. - -- `#pushWorldState` stores a copy of the current accounts and the substate at the top of the `interimStates` cell. -- `#popWorldState` restores the top element of the `interimStates`. -- `#dropWorldState` removes the top element of the `interimStates`. - -```k - syntax Accounts ::= "{" AccountsCellFragment "|" SubstateCellFragment "}" - // ------------------------------------------------------------------------- - - syntax InternalOp ::= "#pushWorldState" - // --------------------------------------- - rule #pushWorldState => .K ... - STATES => ListItem({ ACCTDATA | SUBSTATE }) STATES - ACCTDATA - SUBSTATE - - syntax InternalOp ::= "#popWorldState" - // -------------------------------------- - rule #popWorldState => .K ... - ListItem({ ACCTDATA | SUBSTATE }) REST => REST - _ => ACCTDATA - _ => SUBSTATE - - syntax InternalOp ::= "#dropWorldState" - // --------------------------------------- - rule #dropWorldState => . ... ListItem(_) REST => REST -``` - -Control Flow ------------- - -### Exception Based - -- `#halt` indicates end of execution. - It will consume anything related to the current computation behind it on the `` cell. -- `#end_` sets the `statusCode` and the program counter of the last executed opcode, then halts execution. - -```k - syntax KItem ::= "#halt" | "#end" StatusCode - // -------------------------------------------- - rule [end]: - #end SC => #halt ... - _ => SC - - rule #halt ~> (_:Int => .) ... - rule #halt ~> (_:OpCode => .) ... -``` - -OpCode Execution ----------------- - -### Execution Macros - -- `#lookupOpCode` reads an `OpCode` from the program `Bytes` if the program-counter is within the bounds of the program, meaning that it points to an actual opcode. - It will return `.NoOpCode` otherwise. - -```k - syntax MaybeOpCode ::= ".NoOpCode" | OpCode - - syntax MaybeOpCode ::= "#lookupOpCode" "(" Bytes "," Int "," Schedule ")" [function, total] - // ----------------------------------------------------------------------------------------------- - rule #lookupOpCode(BA, I, SCHED) => #dasmOpCode(BA[I], SCHED) requires 0 <=Int I andBool I .NoOpCode [owise] -``` - -- `#execute` loads the next opcode. - -```k - syntax KItem ::= "#execute" - // --------------------------- - rule [halt]: - #halt ~> (#execute => .) ... - - rule [step]: - (. => #next [ #lookupOpCode(PGM, PCOUNT, SCHED) ]) ~> #execute ... - PGM - PCOUNT - SCHED -``` - -### Single Step - -If the program-counter points to an actual opcode, it's loaded into the `#next [_]` operator. -If `.NoOpCode` is loaded into `#next [_]`, then it means that there is no next opcode and the execution will halt with an `EVMC_SUCCESS` status code. -The `#next [_]` operator initiates execution by: - -1. checking if there will be a stack over/underflow, or a static mode violation, -2. calculate any address conversions needed for items on the wordstack, -3. executing the opcode (which includes any gas deduction needed), and -4. adjusting the program counter. - -```k - syntax InternalOp ::= "#next" "[" MaybeOpCode "]" - // ------------------------------------------------- - rule #next [ .NoOpCode ] => #end EVMC_SUCCESS ... - _ => .Bytes - - rule #next [ OP:OpCode ] - => #addr [ OP ] - ~> #exec [ OP ] - ~> #pc [ OP ] - ... - - WS - STATIC:Bool - requires notBool ( #stackUnderflow(WS, OP) orBool #stackOverflow(WS, OP) ) - andBool notBool ( STATIC andBool #changesState(OP, WS) ) - - rule #next [ OP ] => #end EVMC_STACK_UNDERFLOW ... - WS - requires #stackUnderflow(WS, OP) - - rule #next [ OP ] => #end EVMC_STACK_OVERFLOW ... - WS - requires #stackOverflow(WS, OP) - - rule #next [ OP ] => #end EVMC_STATIC_MODE_VIOLATION ... - WS - STATIC:Bool - requires STATIC andBool #changesState(OP, WS) - andBool notBool ( #stackUnderflow(WS, OP) orBool #stackOverflow(WS, OP) ) -``` - -### Exceptional Checks - -- `#stackNeeded` is how many arguments that opcode will need off the top of the stack. -- `#stackAdded` is how many arguments that opcode will push onto the top of the stack. -- `#stackDelta` is the delta the stack will have after the opcode executes. - -```k - syntax Bool ::= #stackUnderflow ( WordStack , OpCode ) [macro] - | #stackOverflow ( WordStack , OpCode ) [macro] - // -------------------------------------------------------------- - rule #stackUnderflow(WS, OP:OpCode) => #sizeWordStack(WS) #sizeWordStack(WS) +Int #stackDelta(OP) >Int 1024 - - syntax Int ::= #stackNeeded ( OpCode ) [function] - // ------------------------------------------------- - rule #stackNeeded(PUSH(_)) => 0 - rule #stackNeeded(_IOP:InvalidOp) => 0 - rule #stackNeeded(_NOP:NullStackOp) => 0 - rule #stackNeeded(_UOP:UnStackOp) => 1 - rule #stackNeeded(BOP:BinStackOp) => 2 requires notBool isLogOp(BOP) - rule #stackNeeded(_TOP:TernStackOp) => 3 - rule #stackNeeded(_QOP:QuadStackOp) => 4 - rule #stackNeeded(DUP(N)) => N - rule #stackNeeded(SWAP(N)) => N +Int 1 - rule #stackNeeded(LOG(N)) => N +Int 2 - rule #stackNeeded(_CSOP:CallSixOp) => 6 - rule #stackNeeded(COP:CallOp) => 7 requires notBool isCallSixOp(COP) - - syntax Int ::= #stackAdded ( OpCode ) [function] - // ------------------------------------------------ - rule #stackAdded(CALLDATACOPY) => 0 - rule #stackAdded(RETURNDATACOPY) => 0 - rule #stackAdded(CODECOPY) => 0 - rule #stackAdded(EXTCODECOPY) => 0 - rule #stackAdded(POP) => 0 - rule #stackAdded(MSTORE) => 0 - rule #stackAdded(MSTORE8) => 0 - rule #stackAdded(SSTORE) => 0 - rule #stackAdded(JUMP) => 0 - rule #stackAdded(JUMPI) => 0 - rule #stackAdded(JUMPDEST) => 0 - rule #stackAdded(STOP) => 0 - rule #stackAdded(RETURN) => 0 - rule #stackAdded(REVERT) => 0 - rule #stackAdded(SELFDESTRUCT) => 0 - rule #stackAdded(PUSH(_)) => 1 - rule #stackAdded(LOG(_)) => 0 - rule #stackAdded(SWAP(N)) => N +Int 1 - rule #stackAdded(DUP(N)) => N +Int 1 - rule #stackAdded(_IOP:InvalidOp) => 0 - rule #stackAdded(_OP) => 1 [owise] - - syntax Int ::= #stackDelta ( OpCode ) [function] - // ------------------------------------------------ - rule #stackDelta(OP) => #stackAdded(OP) -Int #stackNeeded(OP) -``` - -- `#changesState` is true if the given opcode will change `` state given the arguments. - -```k - syntax Bool ::= #changesState ( OpCode , WordStack ) [function] - // --------------------------------------------------------------- -``` - -```k - rule #changesState(CALL , _ : _ : VALUE : _) => true requires VALUE =/=Int 0 - rule #changesState(LOG(_) , _) => true - rule #changesState(SSTORE , _) => true - rule #changesState(CREATE , _) => true - rule #changesState(CREATE2 , _) => true - rule #changesState(SELFDESTRUCT , _) => true - rule #changesState(_ , _) => false [owise] -``` - -### Execution Step - -- `#exec` will load the arguments of the opcode (it assumes `#stackNeeded?` is accurate and has been called) and trigger the subsequent operations. - -```k - syntax InternalOp ::= "#exec" "[" OpCode "]" - // -------------------------------------------- - rule #exec [ IOP:InvalidOp ] => IOP ... - - rule #exec [ OP ] => #gas [ OP , OP ] ~> OP ... requires isNullStackOp(OP) orBool isPushOp(OP) -``` - -Here we load the correct number of arguments from the `wordStack` based on the sort of the opcode. - -```k - syntax KItem ::= OpCode - syntax OpCode ::= NullStackOp | UnStackOp | BinStackOp | TernStackOp | QuadStackOp - | InvalidOp | StackOp | InternalOp | CallOp | CallSixOp | PushOp - // -------------------------------------------------------------------------------- - - syntax InternalOp ::= UnStackOp Int - | BinStackOp Int Int - | TernStackOp Int Int Int - | QuadStackOp Int Int Int Int - // ------------------------------------------------- - rule #exec [ UOP:UnStackOp ] => #gas [ UOP , UOP W0 ] ~> UOP W0 ... W0 : WS => WS - rule #exec [ BOP:BinStackOp ] => #gas [ BOP , BOP W0 W1 ] ~> BOP W0 W1 ... W0 : W1 : WS => WS - rule #exec [ TOP:TernStackOp ] => #gas [ TOP , TOP W0 W1 W2 ] ~> TOP W0 W1 W2 ... W0 : W1 : W2 : WS => WS - rule #exec [ QOP:QuadStackOp ] => #gas [ QOP , QOP W0 W1 W2 W3 ] ~> QOP W0 W1 W2 W3 ... W0 : W1 : W2 : W3 : WS => WS -``` - -`StackOp` is used for opcodes which require a large portion of the stack. - -```k - syntax InternalOp ::= StackOp WordStack - // --------------------------------------- - rule #exec [ SO:StackOp ] => #gas [ SO , SO WS ] ~> SO WS ... WS -``` - -The `CallOp` opcodes all interperet their second argument as an address. - -```k - syntax InternalOp ::= CallSixOp Int Int Int Int Int Int - | CallOp Int Int Int Int Int Int Int - // ----------------------------------------------------------- - rule #exec [ CSO:CallSixOp ] => #gas [ CSO , CSO W0 W1 W2 W3 W4 W5 ] ~> CSO W0 W1 W2 W3 W4 W5 ... W0 : W1 : W2 : W3 : W4 : W5 : WS => WS - rule #exec [ CO:CallOp ] => #gas [ CO , CO W0 W1 W2 W3 W4 W5 W6 ] ~> CO W0 W1 W2 W3 W4 W5 W6 ... W0 : W1 : W2 : W3 : W4 : W5 : W6 : WS => WS -``` - -### Address Conversion - -Some opcodes require accessing elements of the state at different addresses. -We make sure the given arguments (to be interpreted as addresses) are with 160 bits ahead of time. - -```k - syntax InternalOp ::= "#addr" "[" OpCode "]" - // -------------------------------------------- - rule #addr [ OP:OpCode ] => . ... - (W0 => #addr(W0)) : _WS - requires isAddr1Op(OP) - - rule #addr [ OP:OpCode ] => . ... - _W0 : (W1 => #addr(W1)) : _WS - requires isAddr2Op(OP) - - rule #addr [ OP:OpCode ] => . ... - requires notBool ( isAddr1Op(OP) orBool isAddr2Op(OP) ) - - syntax Bool ::= isAddr1Op ( OpCode ) [function, total] - | isAddr2Op ( OpCode ) [function, total] - // ------------------------------------------------------ - rule isAddr1Op(BALANCE) => true - rule isAddr1Op(SELFDESTRUCT) => true - rule isAddr1Op(EXTCODEHASH) => true - rule isAddr1Op(EXTCODESIZE) => true - rule isAddr1Op(EXTCODECOPY) => true - rule isAddr1Op(_) => false [owise] - - rule isAddr2Op(_:CallOp) => true - rule isAddr2Op(_:CallSixOp) => true - rule isAddr2Op(_) => false [owise] -``` - -### Program Counter - -All operators except for `PUSH` and `JUMP*` increment the program counter by 1. -The arguments to `PUSH` must be skipped over (as they are inline), and the opcode `JUMP` already affects the program counter in the correct way. - -- `#pc` calculates the next program counter of the given operator. - -```k - syntax InternalOp ::= "#pc" "[" OpCode "]" - // ------------------------------------------ - rule #pc [ OP ] => . ... - PCOUNT => PCOUNT +Int #widthOp(OP) - - syntax Int ::= #widthOp ( OpCode ) [function, total] - // ---------------------------------------------------- - rule #widthOp(PUSH(N)) => 1 +Int N - rule #widthOp(_) => 1 [owise] -``` - -After executing a transaction, it's necessary to have the effect of the substate log recorded. - -- `#finalizeStorage` updates the origStorage cell with the new values of storage. -- `#finalizeTx` makes the substate log actually have an effect on the state. -- `#deleteAccounts` deletes the accounts specified by the self destruct list. - -```k - syntax InternalOp ::= #finalizeStorage ( List ) - // ----------------------------------------------- - rule #finalizeStorage(ListItem(ACCT) REST => REST) ... - - ACCT - STORAGE - _ => STORAGE - ... - - - rule #finalizeStorage(.List) => . ... - - rule (.K => #newAccount ACCT) ~> #finalizeStorage(ListItem(ACCT) _ACCTS) ... [owise] - - syntax InternalOp ::= #finalizeTx ( Bool ) - | #deleteAccounts ( List ) - // ---------------------------------------------- - rule #finalizeTx(true) => #finalizeStorage(Set2List(SetItem(MINER) |Set ACCTS)) ... - .Set - MINER - ACCTS - _ => .Set - _ => .Map - - rule #finalizeTx(false) ... - SCHED - GAVAIL => G*(GAVAIL, GLIMIT, REFUND, SCHED) - REFUND => 0 - ListItem(MSGID:Int) ... - - MSGID - GLIMIT - ... - - requires REFUND =/=Int 0 - - rule #finalizeTx(false => true) ... - BFEE - ORG - MINER - GAVAIL - GUSED => GUSED +Gas GLIMIT -Gas GAVAIL - GPRICE - 0 - - ORG - ORGBAL => ORGBAL +Int GAVAIL *Int GPRICE - ... - - - MINER - MINBAL => MINBAL +Int (GLIMIT -Int GAVAIL) *Int (GPRICE -Int BFEE) - ... - - ListItem(TXID:Int) REST => REST - - TXID - GLIMIT - ... - - requires ORG =/=Int MINER - - rule #finalizeTx(false => true) ... - BFEE - ACCT - ACCT - GAVAIL - GUSED => GUSED +Gas GLIMIT -Gas GAVAIL - GPRICE - 0 - - ACCT - BAL => BAL +Int GLIMIT *Int (GPRICE -Int BFEE) - ... - - ListItem(MsgId:Int) REST => REST - - MsgId - GLIMIT - ... - - - rule (. => #deleteAccounts(Set2List(ACCTS))) ~> #finalizeTx(true) ... - ACCTS => .Set - requires size(ACCTS) >Int 0 - - rule (. => #newAccount MINER) ~> #finalizeTx(_) ... - MINER [owise] - - rule #deleteAccounts(ListItem(ACCT) ACCTS) => #deleteAccounts(ACCTS) ... - - ( - ACCT - ... - - => .Bag - ) - ... - - - rule #deleteAccounts(.List) => . ... -``` - -### Block processing - -- `#startBlock` is used to signal that we are about to start mining a block and block initialization should take place (before transactions are executed). -- `#finalizeBlock` is used to signal that block finalization procedures should take place (after transactions have executed). -- `#rewardOmmers(_)` pays out the reward to uncle blocks so that blocks are orphaned less often in Ethereum. - -```k - syntax EthereumCommand ::= "#startBlock" - // ---------------------------------------- - rule #startBlock => . ... - _ => 0 - _ => .List - _ => #padToWidth(256, .Bytes) - - syntax EthereumCommand ::= "#finalizeBlock" | #rewardOmmers ( JSONs ) - // --------------------------------------------------------------------- - rule #finalizeBlock => #rewardOmmers(OMMERS) ... - SCHED - [ OMMERS ] - MINER - - MINER - MINBAL => MINBAL +Int Rb < SCHED > - ... - - LOGS - _ => #bloomFilter(LOGS) - - rule (.K => #newAccount MINER) ~> #finalizeBlock ... - MINER [owise] - - rule #rewardOmmers(.JSONs) => . ... - rule #rewardOmmers([ _ , _ , OMMER , _ , _ , _ , _ , _ , OMMNUM , _ ] , REST) => #rewardOmmers(REST) ... - SCHED - MINER - CURNUM - - MINER - MINBAL => MINBAL +Int Rb < SCHED > /Int 32 - ... - - - OMMER - OMMBAL => OMMBAL +Int Rb < SCHED > +Int (OMMNUM -Int CURNUM) *Int (Rb < SCHED > /Int 8) - ... - - - syntax Bytes ::= #bloomFilter(List) [function] - | #bloomFilter(List, Int) [function, klabel(#bloomFilterAux)] - // ---------------------------------------------------------------------------- - rule #bloomFilter(L) => #bloomFilter(L, 0) - - rule #bloomFilter(.List, B) => #padToWidth(256, #asByteStack(B)) - rule #bloomFilter(ListItem({ ACCT | TOPICS | _ }) L, B) => #bloomFilter(ListItem(#padToWidth(20, #asByteStack(ACCT))) listAsBytes(TOPICS) L, B) - - syntax List ::= listAsBytes(List) [function] - // -------------------------------------------- - rule listAsBytes(.List) => .List - rule listAsBytes(ListItem(TOPIC) L) => ListItem(#padToWidth(32, #asByteStack(TOPIC))) listAsBytes(L) - - rule #bloomFilter(ListItem(WS:Bytes) L, B) => #bloomFilter(L, B |Int M3:2048(WS)) -``` - -- `M3:2048` computes the 2048-bit hash of a log entry in which exactly 3 bits are set. This is used to compute the Bloom filter of a log entry. - -```k - syntax Int ::= "M3:2048" "(" Bytes ")" [function] - // ------------------------------------------------- - rule M3:2048(WS) => setBloomFilterBits(#parseByteStack(Keccak256(#unparseByteStack(WS)))) - - syntax Int ::= setBloomFilterBits(Bytes) [function] - // --------------------------------------------------- - rule setBloomFilterBits(HASH) => (1 < #asInteger(#range(X, I, 2)) %Int 2048 -``` - -EVM Programs -============ - -EVM OpCodes ------------ - - -### Internal Operations - -These are just used by the other operators for shuffling local execution state around on the EVM. - -- `#push` will push an element to the `wordStack` without any checks. -- `#setStack_` will set the current stack to the given one. - -```k - syntax InternalOp ::= "#push" | "#setStack" WordStack - // ----------------------------------------------------- - rule W0:Int ~> #push => . ... WS => W0 : WS - rule #setStack WS => . ... _ => WS -``` - -- `#newAccount_` allows declaring a new empty account with the given address (and assumes the rounding to 160 bits has already occured). - If the account already exists with non-zero nonce or non-empty code, an exception is thrown. - Otherwise, if the account already exists, the storage is cleared. - -```k - syntax InternalOp ::= "#newAccount" Int - | "#newExistingAccount" Int - | "#newFreshAccount" Int - // -------------------------------------------- - rule #newAccount ACCT => #newExistingAccount ACCT ... ACCT ... - rule #newAccount ACCT => #newFreshAccount ACCT ... [owise] - - rule #newExistingAccount ACCT => #end EVMC_ACCOUNT_ALREADY_EXISTS ... - - ACCT - CODE - NONCE - ... - - requires CODE =/=K .Bytes orBool NONCE =/=Int 0 - - rule #newExistingAccount ACCT => . ... - - ACCT - CODE - 0 - _ => .Map - _ => .Map - ... - - requires lengthBytes(CODE) ==Int 0 - - rule #newFreshAccount ACCT => . ... - - ( .Bag - => - ACCT - ... - - ) - ... - -``` - -- `#transferFunds` moves money from one account into another, creating the destination account if it doesn't exist. - -```k - syntax InternalOp ::= "#transferFunds" Int Int Int - | "#transferFundsToNonExistent" Int Int Int - // --------------------------------------------------------------- - rule #transferFunds ACCT ACCT VALUE => . ... - - ACCT - ORIGFROM - ... - - requires VALUE <=Int ORIGFROM - - rule #transferFunds ACCTFROM ACCTTO VALUE => . ... - - ACCTFROM - ORIGFROM => ORIGFROM -Word VALUE - ... - - - ACCTTO - ORIGTO => ORIGTO +Word VALUE - ... - - requires ACCTFROM =/=K ACCTTO andBool VALUE <=Int ORIGFROM - - rule #transferFunds ACCTFROM _ACCTTO VALUE => #end EVMC_BALANCE_UNDERFLOW ... - - ACCTFROM - ORIGFROM - ... - - requires VALUE >Int ORIGFROM - - rule #transferFunds ACCTFROM ACCTTO VALUE => #transferFundsToNonExistent ACCTFROM ACCTTO VALUE ... [owise] - - rule #transferFundsToNonExistent ACCTFROM ACCTTO VALUE => #newAccount ACCTTO ~> #transferFunds ACCTFROM ACCTTO VALUE ... - SCHED - requires ACCTFROM =/=K ACCTTO - andBool (VALUE >Int 0 orBool notBool Gemptyisnonexistent << SCHED >>) - - rule #transferFundsToNonExistent ACCTFROM ACCTTO 0 => . ... - SCHED - requires ACCTFROM =/=K ACCTTO - andBool Gemptyisnonexistent << SCHED >> -``` - -### Invalid Operator - -We use `INVALID` both for marking the designated invalid operator, and `UNDEFINED(_)` for garbage bytes in the input program. - -```k - syntax InvalidOp ::= "INVALID" | "UNDEFINED" "(" Int ")" - // -------------------------------------------------------- - rule INVALID => #end EVMC_INVALID_INSTRUCTION ... - rule UNDEFINED(_) => #end EVMC_UNDEFINED_INSTRUCTION ... -``` - -### Stack Manipulations - -Some operators don't calculate anything, they just push the stack around a bit. - -```k - syntax UnStackOp ::= "POP" - // -------------------------- - rule POP _ => . ... - - syntax StackOp ::= DUP ( Int ) | SWAP ( Int ) - // --------------------------------------------- - rule DUP(N) WS:WordStack => #setStack ((WS [ N -Int 1 ]) : WS) ... - rule SWAP(N) (W0 : WS) => #setStack ((WS [ N -Int 1 ]) : (WS [ N -Int 1 := W0 ])) ... - - syntax PushOp ::= PUSH ( Int ) - // ------------------------------ - rule PUSH(N) => #asWord(#range(PGM, PCOUNT +Int 1, N)) ~> #push ... - PCOUNT - PGM -``` - -### Local Memory - -These operations are getters/setters of the local execution memory. - -```k - syntax UnStackOp ::= "MLOAD" - // ---------------------------- - rule MLOAD INDEX => #asWord(#range(LM, INDEX, 32)) ~> #push ... - LM - - syntax BinStackOp ::= "MSTORE" | "MSTORE8" - // ------------------------------------------ - rule MSTORE INDEX VALUE => . ... - LM => LM [ INDEX := #padToWidth(32, #asByteStack(VALUE)) ] - - rule MSTORE8 INDEX VALUE => . ... - LM => #write(LM, INDEX, (VALUE modInt 256)) -``` - -### Expressions - -Expression calculations are simple and don't require anything but the arguments from the `wordStack` to operate. - -NOTE: We have to call the opcode `OR` by `EVMOR` instead, because K has trouble parsing it/compiling the definition otherwise. - -```k - syntax UnStackOp ::= "ISZERO" | "NOT" - // ------------------------------------- - rule ISZERO W => W ==Word 0 ~> #push ... - rule NOT W => ~Word W ~> #push ... - - syntax BinStackOp ::= "ADD" | "MUL" | "SUB" | "DIV" | "EXP" | "MOD" - // ------------------------------------------------------------------- - rule ADD W0 W1 => W0 +Word W1 ~> #push ... - rule MUL W0 W1 => W0 *Word W1 ~> #push ... - rule SUB W0 W1 => W0 -Word W1 ~> #push ... - rule DIV W0 W1 => W0 /Word W1 ~> #push ... - rule EXP W0 W1 => W0 ^Word W1 ~> #push ... - rule MOD W0 W1 => W0 %Word W1 ~> #push ... - - syntax BinStackOp ::= "SDIV" | "SMOD" - // ------------------------------------- - rule SDIV W0 W1 => W0 /sWord W1 ~> #push ... - rule SMOD W0 W1 => W0 %sWord W1 ~> #push ... - - syntax TernStackOp ::= "ADDMOD" | "MULMOD" - // ------------------------------------------ - rule ADDMOD W0 W1 W2 => (W0 +Int W1) %Word W2 ~> #push ... - rule MULMOD W0 W1 W2 => (W0 *Int W1) %Word W2 ~> #push ... - - syntax BinStackOp ::= "BYTE" | "SIGNEXTEND" - // ------------------------------------------- - rule BYTE INDEX W => byte(INDEX, W) ~> #push ... - rule SIGNEXTEND W0 W1 => signextend(W0, W1) ~> #push ... - - syntax BinStackOp ::= "SHL" | "SHR" | "SAR" - // ------------------------------------------- - rule SHL W0 W1 => W1 < #push ... - rule SHR W0 W1 => W1 >>Word W0 ~> #push ... - rule SAR W0 W1 => W1 >>sWord W0 ~> #push ... - - syntax BinStackOp ::= "AND" | "EVMOR" | "XOR" - // --------------------------------------------- - rule AND W0 W1 => W0 &Word W1 ~> #push ... - rule EVMOR W0 W1 => W0 |Word W1 ~> #push ... - rule XOR W0 W1 => W0 xorWord W1 ~> #push ... - - syntax BinStackOp ::= "LT" | "GT" | "EQ" - // ---------------------------------------- - rule LT W0 W1 => W0 #push ... - rule GT W0 W1 => W0 >Word W1 ~> #push ... - rule EQ W0 W1 => W0 ==Word W1 ~> #push ... - - syntax BinStackOp ::= "SLT" | "SGT" - // ----------------------------------- - rule SLT W0 W1 => W0 s #push ... - rule SGT W0 W1 => W1 s #push ... - - syntax BinStackOp ::= "SHA3" - // ---------------------------- - rule SHA3 MEMSTART MEMWIDTH => keccak(#range(LM, MEMSTART, MEMWIDTH)) ~> #push ... - LM -``` - -### Local State - -These operators make queries about the current execution state. - -```k - syntax NullStackOp ::= "PC" | "GAS" | "GASPRICE" | "GASLIMIT" | "BASEFEE" - // ------------------------------------------------------------------------- - rule PC => PCOUNT ~> #push ... PCOUNT - rule GAS => gas2Int(GAVAIL) ~> #push ... GAVAIL - rule GASPRICE => GPRICE ~> #push ... GPRICE - rule GASLIMIT => GLIMIT ~> #push ... GLIMIT - rule BASEFEE => BFEE ~> #push ... BFEE - - syntax NullStackOp ::= "COINBASE" | "TIMESTAMP" | "NUMBER" | "DIFFICULTY" | "PREVRANDAO" - // ---------------------------------------------------------------------------------------- - rule COINBASE => CB ~> #push ... CB - rule TIMESTAMP => TS ~> #push ... TS - rule NUMBER => NUMB ~> #push ... NUMB - rule DIFFICULTY => DIFF ~> #push ... DIFF - rule PREVRANDAO => RDAO ~> #push ... RDAO - - syntax NullStackOp ::= "ADDRESS" | "ORIGIN" | "CALLER" | "CALLVALUE" | "CHAINID" | "SELFBALANCE" - // ------------------------------------------------------------------------------------------------ - rule ADDRESS => ACCT ~> #push ... ACCT - rule ORIGIN => ORG ~> #push ... ORG - rule CALLER => CL ~> #push ... CL - rule CALLVALUE => CV ~> #push ... CV - rule CHAINID => CID ~> #push ... CID - rule SELFBALANCE => BAL ~> #push ... - ACCT - - ACCT - BAL - ... - - - syntax NullStackOp ::= "MSIZE" | "CODESIZE" - // ------------------------------------------- - rule MSIZE => 32 *Word MU ~> #push ... MU - rule CODESIZE => lengthBytes(PGM) ~> #push ... PGM - - syntax TernStackOp ::= "CODECOPY" - // --------------------------------- - rule CODECOPY MEMSTART PGMSTART WIDTH => . ... - PGM - LM => LM [ MEMSTART := #range(PGM, PGMSTART, WIDTH) ] - - syntax UnStackOp ::= "BLOCKHASH" - // -------------------------------- -``` - -When running as a `node`, the blockhash will be retrieved from the running client. -Otherwise, it is calculated here using the "shortcut" formula used for running tests. - -```{.k .standalone} - rule BLOCKHASH N => #blockhash(HASHES, N, HI -Int 1, 0) ~> #push ... - HI - HASHES - - syntax Int ::= #blockhash ( List , Int , Int , Int ) [function] - // --------------------------------------------------------------- - rule #blockhash(_, N, HI, _) => 0 requires N >Int HI - rule #blockhash(_, _, _, 256) => 0 - rule #blockhash(ListItem(0) _, _, _, _) => 0 - rule #blockhash(ListItem(H) _, N, N, _) => H - rule #blockhash(ListItem(_) L, N, HI, A) => #blockhash(L, N, HI -Int 1, A +Int 1) [owise] -``` - -EVM OpCodes ------------ - -### EVM Control Flow - -The `JUMP*` family of operations affect the current program counter. - -```k - syntax NullStackOp ::= "JUMPDEST" - // --------------------------------- - rule JUMPDEST => . ... - - syntax UnStackOp ::= "JUMP" - // --------------------------- - rule JUMP DEST => #endBasicBlock... - _ => DEST - DESTS - requires DEST in DESTS - - rule JUMP DEST => #end EVMC_BAD_JUMP_DESTINATION ... - DESTS - requires notBool DEST in DESTS - - syntax BinStackOp ::= "JUMPI" - // ----------------------------- - rule [jumpi.false]: JUMPI _DEST I => . ... requires I ==Int 0 - rule [jumpi.true]: JUMPI DEST I => JUMP DEST ... requires I =/=Int 0 - - syntax InternalOp ::= "#endBasicBlock" - // -------------------------------------- - rule #endBasicBlock ~> (_:OpCode => .) ... - rule (#endBasicBlock => .) ~> #execute ... -``` - -### `STOP`, `REVERT`, and `RETURN` - -```k - syntax NullStackOp ::= "STOP" - // ----------------------------- - rule STOP => #end EVMC_SUCCESS ... - _ => .Bytes - - syntax BinStackOp ::= "RETURN" - // ------------------------------ - rule RETURN RETSTART RETWIDTH => #end EVMC_SUCCESS ... - _ => #range(LM, RETSTART, RETWIDTH) - LM - - syntax BinStackOp ::= "REVERT" - // ------------------------------ - rule REVERT RETSTART RETWIDTH => #end EVMC_REVERT ... - _ => #range(LM, RETSTART, RETWIDTH) - LM -``` - -### Call Data - -These operators query about the current `CALL*` state. - -```k - syntax NullStackOp ::= "CALLDATASIZE" - // ------------------------------------- - rule CALLDATASIZE => lengthBytes(CD) ~> #push ... - CD - - syntax UnStackOp ::= "CALLDATALOAD" - // ----------------------------------- - rule CALLDATALOAD DATASTART => #asWord(#range(CD, DATASTART, 32)) ~> #push ... - CD - - syntax TernStackOp ::= "CALLDATACOPY" - // ------------------------------------- - rule CALLDATACOPY MEMSTART DATASTART DATAWIDTH => . ... - LM => LM [ MEMSTART := #range(CD, DATASTART, DATAWIDTH) ] - CD -``` - -### Return Data - -These operators query about the current return data buffer. - -```k - syntax NullStackOp ::= "RETURNDATASIZE" - // --------------------------------------- - rule RETURNDATASIZE => lengthBytes(RD) ~> #push ... - RD - - syntax TernStackOp ::= "RETURNDATACOPY" - // ---------------------------------------- - rule RETURNDATACOPY MEMSTART DATASTART DATAWIDTH => . ... - LM => LM [ MEMSTART := #range(RD, DATASTART, DATAWIDTH) ] - RD - requires DATASTART +Int DATAWIDTH <=Int lengthBytes(RD) - - rule RETURNDATACOPY _MEMSTART DATASTART DATAWIDTH => #end EVMC_INVALID_MEMORY_ACCESS ... - RD - requires DATASTART +Int DATAWIDTH >Int lengthBytes(RD) -``` - -### Log Operations - -```k - syntax BinStackOp ::= LogOp - syntax LogOp ::= LOG ( Int ) - // ---------------------------- - rule LOG(N) MEMSTART MEMWIDTH => . ... - ACCT - WS => #drop(N, WS) - LM - L => L ListItem({ ACCT | WordStack2List(#take(N, WS)) | #range(LM, MEMSTART, MEMWIDTH) }) - requires #sizeWordStack(WS) >=Int N -``` - -Ethereum Network OpCodes ------------------------- - -Operators that require access to the rest of the Ethereum network world-state can be taken as a first draft of a "blockchain generic" language. - -### Account Queries - -```k - syntax UnStackOp ::= "BALANCE" - // ------------------------------ - rule BALANCE ACCT => BAL ~> #push ... - - ACCT - BAL - ... - - - rule BALANCE _ => 0 ~> #push ... [owise] - - syntax UnStackOp ::= "EXTCODESIZE" - // ---------------------------------- - rule EXTCODESIZE ACCT => lengthBytes(CODE) ~> #push ... - - ACCT - CODE - ... - - - rule EXTCODESIZE _ => 0 ~> #push ... [owise] - - syntax UnStackOp ::= "EXTCODEHASH" - // ---------------------------------- - rule EXTCODEHASH ACCT => keccak(CODE) ~> #push ... - - ACCT - CODE:Bytes - NONCE - BAL - ... - - requires notBool #accountEmpty(CODE, NONCE, BAL) - - rule EXTCODEHASH _ => 0 ~> #push ... [owise] - - syntax QuadStackOp ::= "EXTCODECOPY" - // ------------------------------------ - rule EXTCODECOPY ACCT MEMSTART PGMSTART WIDTH => . ... - LM => LM [ MEMSTART := #range(PGM, PGMSTART, WIDTH) ] - - ACCT - PGM - ... - - - rule EXTCODECOPY _ MEMSTART _ WIDTH => . ... - LM => LM [ MEMSTART := #padToWidth(WIDTH, .Bytes) ] [owise] -``` - -### Account Storage Operations - -These rules reach into the network state and load/store from account storage: - -```k - syntax UnStackOp ::= "SLOAD" - // ---------------------------- - rule SLOAD INDEX => #lookup(STORAGE, INDEX) ~> #push ... - ACCT - - ACCT - STORAGE - ... - - - syntax BinStackOp ::= "SSTORE" - // ------------------------------ - rule SSTORE INDEX NEW => . ... - ACCT - - ACCT - STORAGE => STORAGE [ INDEX <- NEW ] - ... - -``` - -### Call Operations - -The various `CALL*` (and other inter-contract control flow) operations will be desugared into these `InternalOp`s. - -- The `callLog` is used to store the `CALL*`/`CREATE` operations so that we can compare them against the test-set. - -- `#call_____` takes the calling account, the account to execute as, the account whose code should execute, the gas limit, the amount to transfer, the arguments, and the static flag. -- `#callWithCode______` takes the calling account, the accout to execute as, the code to execute (as a `Bytes`), the gas limit, the amount to transfer, the arguments, and the static flag. -- `#return__` is a placeholder for the calling program, specifying where to place the returned data in memory. - -```k - syntax InternalOp ::= "#checkCall" Int Int - | "#call" Int Int Int Int Int Bytes Bool - | "#callWithCode" Int Int Int Bytes Int Int Bytes Bool - | "#mkCall" Int Int Int Bytes Int Bytes Bool - // -------------------------------------------------------------------------- - rule #checkCall ACCT VALUE - => #refund GCALL ~> #pushCallStack ~> #pushWorldState - ~> #end #if VALUE >Int BAL #then EVMC_BALANCE_UNDERFLOW #else #if CD >=Int 1024 #then EVMC_CALL_DEPTH_EXCEEDED #else EVMC_NONCE_EXCEEDED #fi #fi - ... - - CD - _ => .Bytes - - ACCT - BAL - NONCE - ... - - GCALL - requires VALUE >Int BAL orBool CD >=Int 1024 orBool notBool #rangeNonce(NONCE) - - rule #checkCall ACCT VALUE => . ... - CD - - ACCT - BAL - NONCE - ... - - requires notBool (VALUE >Int BAL orBool CD >=Int 1024 orBool notBool #rangeNonce(NONCE)) - - rule #call ACCTFROM ACCTTO ACCTCODE VALUE APPVALUE ARGS STATIC - => #callWithCode ACCTFROM ACCTTO ACCTCODE CODE VALUE APPVALUE ARGS STATIC - ... - - - ACCTCODE - CODE - ... - - - rule #call ACCTFROM ACCTTO ACCTCODE VALUE APPVALUE ARGS STATIC - => #callWithCode ACCTFROM ACCTTO ACCTCODE .Bytes VALUE APPVALUE ARGS STATIC - ... - [owise] - - rule #callWithCode ACCTFROM ACCTTO ACCTCODE BYTES VALUE APPVALUE ARGS STATIC - => #pushCallStack ~> #pushWorldState - ~> #transferFunds ACCTFROM ACCTTO VALUE - ~> #mkCall ACCTFROM ACCTTO ACCTCODE BYTES APPVALUE ARGS STATIC - ... - - - rule #mkCall ACCTFROM ACCTTO ACCTCODE BYTES APPVALUE ARGS STATIC:Bool - => #touchAccounts ACCTFROM ACCTTO ~> #accessAccounts ACCTFROM ACCTTO ~> #loadProgram BYTES ~> #initVM ~> #precompiled?(ACCTCODE, SCHED) ~> #execute - ... - - CD => CD +Int 1 - _ => ARGS - _ => APPVALUE - _ => ACCTTO - _ => GCALL - GCALL => 0 - _ => ACCTFROM - OLDSTATIC:Bool => OLDSTATIC orBool STATIC - SCHED - - syntax InternalOp ::= "#precompiled?" "(" Int "," Schedule ")" - // -------------------------------------------------------------- - rule #precompiled?(ACCTCODE, SCHED) => #next [ #precompiled(ACCTCODE) ] ... requires #isPrecompiledAccount(ACCTCODE, SCHED) - [preserves-definedness] - rule #precompiled?(ACCTCODE, SCHED) => . ... requires notBool #isPrecompiledAccount(ACCTCODE, SCHED) - - syntax Bool ::= #isPrecompiledAccount ( Int , Schedule ) [function, total, smtlib(isPrecompiledAccount)] - // -------------------------------------------------------------------------------------------------------- - rule [isPrecompiledAccount.true]: #isPrecompiledAccount(ACCTCODE, SCHED) => true requires ACCTCODE in #precompiledAccounts(SCHED) - rule [isPrecompiledAccount.false]: #isPrecompiledAccount(ACCTCODE, SCHED) => false requires notBool ACCTCODE in #precompiledAccounts(SCHED) - - syntax KItem ::= "#initVM" - // -------------------------- - rule #initVM => . ... - _ => 0 - _ => 0 - _ => .Bytes - _ => .WordStack - _ => .Bytes - - syntax KItem ::= "#loadProgram" Bytes - // ------------------------------------- - rule #loadProgram BYTES => . ... - _ => BYTES - _ => #computeValidJumpDests(BYTES) - - syntax KItem ::= "#touchAccounts" Account | "#touchAccounts" Account Account - // ---------------------------------------------------------------------------- - rule #touchAccounts ADDR1 ADDR2 => #touchAccounts ADDR1 ~> #touchAccounts ADDR2 ... - - rule #touchAccounts ADDR => . ... - TOUCHED_ACCOUNTS => TOUCHED_ACCOUNTS |Set SetItem(ADDR) - - syntax KItem ::= "#accessStorage" Account Int - // -------------------------------------------- - rule #accessStorage ACCT INDEX => . ... - ... ACCT |-> (TS:Set => TS |Set SetItem(INDEX)) ... - rule #accessStorage ACCT INDEX => . ... - TS => TS[ACCT <- SetItem(INDEX)] - requires notBool ACCT in_keys(TS) - - syntax KItem ::= "#accessAccounts" Account - | "#accessAccounts" Set - | "#accessAccounts" Account Account - | "#accessAccounts" Account Account Set - // ----------------------------------------------------- - rule #accessAccounts ADDR1:Account ADDR2:Account ADDRSET:Set => #accessAccounts ADDR1 ~> #accessAccounts ADDR2 ~> #accessAccounts ADDRSET ... - - rule #accessAccounts ADDR1:Account ADDR2:Account => #accessAccounts ADDR1 ~> #accessAccounts ADDR2 ... - - rule #accessAccounts ADDR:Account => . ... - TOUCHED_ACCOUNTS => TOUCHED_ACCOUNTS |Set SetItem(ADDR) - - rule #accessAccounts ADDRSET:Set => . ... - TOUCHED_ACCOUNTS => TOUCHED_ACCOUNTS |Set ADDRSET - - syntax Set ::= #computeValidJumpDests(Bytes) [function, memo, total] - | #computeValidJumpDests(Bytes, Int, List) [function, klabel(#computeValidJumpDestsAux)] - // ----------------------------------------------------------------------------------------------------- - rule #computeValidJumpDests(PGM) => #computeValidJumpDests(PGM, 0, .List) - - syntax Set ::= #computeValidJumpDestsWithinBound(Bytes, Int, List) [function] - // ----------------------------------------------------------------------------- - rule #computeValidJumpDests(PGM, I, RESULT) => List2Set(RESULT) requires I >=Int lengthBytes(PGM) - rule #computeValidJumpDests(PGM, I, RESULT) => #computeValidJumpDestsWithinBound(PGM, I, RESULT) requires I #computeValidJumpDests(PGM, I +Int 1, RESULT ListItem(I)) requires PGM [ I ] ==Int 91 - rule #computeValidJumpDestsWithinBound(PGM, I, RESULT) => #computeValidJumpDests(PGM, I +Int #widthOpCode(PGM [ I ]), RESULT) requires notBool PGM [ I ] ==Int 91 -``` - -```k - syntax Int ::= #widthOpCode(Int) [function] - // ------------------------------------------- - rule #widthOpCode(W) => W -Int 94 requires W >=Int 96 andBool W <=Int 127 - rule #widthOpCode(_) => 1 [owise] - - syntax KItem ::= "#return" Int Int - // ---------------------------------- - rule [return.exception]: - _:ExceptionalStatusCode - #halt ~> #return _ _ - => #popCallStack ~> #popWorldState ~> 0 ~> #push - ... - - _ => .Bytes - - rule [return.revert]: - EVMC_REVERT - #halt ~> #return RETSTART RETWIDTH - => #popCallStack ~> #popWorldState - ~> 0 ~> #push ~> #refund GAVAIL ~> #setLocalMem RETSTART RETWIDTH OUT - ... - - OUT - GAVAIL - - rule [return.success]: - EVMC_SUCCESS - #halt ~> #return RETSTART RETWIDTH - => #popCallStack ~> #dropWorldState - ~> 1 ~> #push ~> #refund GAVAIL ~> #setLocalMem RETSTART RETWIDTH OUT - ... - - OUT - GAVAIL - - syntax InternalOp ::= "#refund" Gas - | "#setLocalMem" Int Int Bytes - // -------------------------------------------------- - rule [refund]: #refund G:Gas => . ... GAVAIL => GAVAIL +Gas G - - rule #setLocalMem START WIDTH WS => . ... - LM => LM [ START := #range(WS, 0, minInt(WIDTH, lengthBytes(WS))) ] -``` - -Ethereum Network OpCodes ------------------------- - -### Call Operations - -For each `CALL*` operation, we make a corresponding call to `#call` and a state-change to setup the custom parts of the calling environment. - -```k - syntax CallOp ::= "CALL" - // ------------------------ - rule [call]: - CALL _GCAP ACCTTO VALUE ARGSTART ARGWIDTH RETSTART RETWIDTH - => #checkCall ACCTFROM VALUE - ~> #call ACCTFROM ACCTTO ACCTTO VALUE VALUE #range(LM, ARGSTART, ARGWIDTH) false - ~> #return RETSTART RETWIDTH - ... - - ACCTFROM - LM - - syntax CallOp ::= "CALLCODE" - // ---------------------------- - rule [callcode]: - CALLCODE _GCAP ACCTTO VALUE ARGSTART ARGWIDTH RETSTART RETWIDTH - => #checkCall ACCTFROM VALUE - ~> #call ACCTFROM ACCTFROM ACCTTO VALUE VALUE #range(LM, ARGSTART, ARGWIDTH) false - ~> #return RETSTART RETWIDTH - ... - - ACCTFROM - LM - - syntax CallSixOp ::= "DELEGATECALL" - // ----------------------------------- - rule [delegatecall]: - DELEGATECALL _GCAP ACCTTO ARGSTART ARGWIDTH RETSTART RETWIDTH - => #checkCall ACCTFROM 0 - ~> #call ACCTAPPFROM ACCTFROM ACCTTO 0 VALUE #range(LM, ARGSTART, ARGWIDTH) false - ~> #return RETSTART RETWIDTH - ... - - ACCTFROM - ACCTAPPFROM - VALUE - LM - - syntax CallSixOp ::= "STATICCALL" - // --------------------------------- - rule [staticcall]: - STATICCALL _GCAP ACCTTO ARGSTART ARGWIDTH RETSTART RETWIDTH - => #checkCall ACCTFROM 0 - ~> #call ACCTFROM ACCTTO ACCTTO 0 0 #range(LM, ARGSTART, ARGWIDTH) true - ~> #return RETSTART RETWIDTH - ... - - ACCTFROM - LM -``` - -### Account Creation/Deletion - -- `#create____` transfers the endowment to the new account and triggers the execution of the initialization code. -- `#codeDeposit_` checks the result of initialization code and whether the code deposit can be paid, indicating an error if not. -- `#isValidCode_` checks if the code returned by the execution of the initialization code begins with a reserved byte. [EIP-3541] - -```k - syntax InternalOp ::= "#create" Int Int Int Bytes - | "#mkCreate" Int Int Int Bytes - | "#incrementNonce" Int - // ------------------------------------------- - rule #create ACCTFROM ACCTTO VALUE INITCODE - => #incrementNonce ACCTFROM - ~> #pushCallStack ~> #pushWorldState - ~> #newAccount ACCTTO - ~> #transferFunds ACCTFROM ACCTTO VALUE - ~> #mkCreate ACCTFROM ACCTTO VALUE INITCODE - ... - - - rule #mkCreate ACCTFROM ACCTTO VALUE INITCODE - => #touchAccounts ACCTFROM ACCTTO ~> #accessAccounts ACCTFROM ACCTTO ~> #loadProgram INITCODE ~> #initVM ~> #execute - ... - - SCHED - _ => ACCTTO - _ => GCALL - GCALL => 0 - _ => ACCTFROM - CD => CD +Int 1 - _ => .Bytes - _ => VALUE - - ACCTTO - NONCE => #if Gemptyisnonexistent << SCHED >> #then NONCE +Int 1 #else NONCE #fi - ... - - - rule #incrementNonce ACCT => . ... - - ACCT - NONCE => NONCE +Int 1 - ... - - - syntax Bool ::= #isValidCode ( Bytes , Schedule ) [function] - // ------------------------------------------------------------ - rule #isValidCode( OUT , SCHED) => Ghasrejectedfirstbyte << SCHED >> impliesBool OUT[0] =/=Int 239 requires lengthBytes(OUT) >Int 0 - rule #isValidCode(_OUT , _SCHED) => true [owise] - - syntax KItem ::= "#codeDeposit" Int - | "#mkCodeDeposit" Int - | "#finishCodeDeposit" Int Bytes - // ----------------------------------------------- - rule _:ExceptionalStatusCode - #halt ~> #codeDeposit _ => #popCallStack ~> #popWorldState ~> 0 ~> #push ... _ => .Bytes - - rule EVMC_REVERT - #halt ~> #codeDeposit _ => #popCallStack ~> #popWorldState ~> #refund GAVAIL ~> 0 ~> #push ... - GAVAIL - - rule EVMC_SUCCESS - #halt ~> #codeDeposit ACCT => #mkCodeDeposit ACCT ... - - rule #mkCodeDeposit ACCT - => Gcodedeposit < SCHED > *Int lengthBytes(OUT) ~> #deductGas - ~> #finishCodeDeposit ACCT OUT - ... - - SCHED - OUT => .Bytes - requires lengthBytes(OUT) <=Int maxCodeSize < SCHED > andBool #isValidCode(OUT, SCHED) - - rule #mkCodeDeposit _ACCT => #popCallStack ~> #popWorldState ~> 0 ~> #push ... - SCHED - OUT => .Bytes - requires notBool ( lengthBytes(OUT) <=Int maxCodeSize < SCHED > andBool #isValidCode(OUT, SCHED) ) - - rule #finishCodeDeposit ACCT OUT - => #popCallStack ~> #dropWorldState - ~> #refund GAVAIL ~> ACCT ~> #push - ... - - GAVAIL - - ACCT - _ => OUT - ... - - - rule _:ExceptionalStatusCode - #halt ~> #finishCodeDeposit ACCT _ - => #popCallStack ~> #dropWorldState - ~> #refund GAVAIL ~> ACCT ~> #push - ... - - GAVAIL - FRONTIER - - rule _:ExceptionalStatusCode - #halt ~> #finishCodeDeposit _ _ => #popCallStack ~> #popWorldState ~> 0 ~> #push ... - SCHED - requires SCHED =/=K FRONTIER -``` - -`CREATE` will attempt to `#create` the account using the initialization code and cleans up the result with `#codeDeposit`. - -```k - syntax TernStackOp ::= "CREATE" - // ------------------------------- - rule [create]: - CREATE VALUE MEMSTART MEMWIDTH - => #accessAccounts #newAddr(ACCT, NONCE) - ~> #checkCall ACCT VALUE - ~> #create ACCT #newAddr(ACCT, NONCE) VALUE #range(LM, MEMSTART, MEMWIDTH) - ~> #codeDeposit #newAddr(ACCT, NONCE) - ... - - ACCT - LM - - ACCT - NONCE - ... - -``` - -`CREATE2` will attempt to `#create` the account, but with the new scheme for choosing the account address. - -```k - syntax QuadStackOp ::= "CREATE2" - // -------------------------------- - rule [create2]: - CREATE2 VALUE MEMSTART MEMWIDTH SALT - => #accessAccounts #newAddr(ACCT, SALT, #range(LM, MEMSTART, MEMWIDTH)) - ~> #checkCall ACCT VALUE - ~> #create ACCT #newAddr(ACCT, SALT, #range(LM, MEMSTART, MEMWIDTH)) VALUE #range(LM, MEMSTART, MEMWIDTH) - ~> #codeDeposit #newAddr(ACCT, SALT, #range(LM, MEMSTART, MEMWIDTH)) - ... - - ACCT - LM -``` - -`SELFDESTRUCT` marks the current account for deletion and transfers funds out of the current account. -Self destructing to yourself, unlike a regular transfer, destroys the balance in the account, irreparably losing it. - -```k - syntax UnStackOp ::= "SELFDESTRUCT" - // ----------------------------------- - rule SELFDESTRUCT ACCTTO => #touchAccounts ACCT ACCTTO ~> #transferFunds ACCT ACCTTO BALFROM ~> #end EVMC_SUCCESS ... - ACCT - SDS => SDS |Set SetItem(ACCT) - - ACCT - BALFROM - ... - - _ => .Bytes - requires ACCT =/=Int ACCTTO - - rule SELFDESTRUCT ACCT => #touchAccounts ACCT ~> #end EVMC_SUCCESS ... - ACCT - SDS => SDS |Set SetItem(ACCT) - - ACCT - _ => 0 - ... - - _ => .Bytes -``` - -Precompiled Contracts ---------------------- - -- `#precompiled` is a placeholder for the 9 pre-compiled contracts at addresses 1 through 9. - -```k - syntax NullStackOp ::= PrecompiledOp - syntax PrecompiledOp ::= #precompiled ( Int ) [function] - // -------------------------------------------------------- - rule #precompiled(1) => ECREC - rule #precompiled(2) => SHA256 - rule #precompiled(3) => RIP160 - rule #precompiled(4) => ID - rule #precompiled(5) => MODEXP - rule #precompiled(6) => ECADD - rule #precompiled(7) => ECMUL - rule #precompiled(8) => ECPAIRING - rule #precompiled(9) => BLAKE2F - - syntax Set ::= #precompiledAccounts ( Schedule ) [function, total] - // ------------------------------------------------------------------ - rule #precompiledAccounts(DEFAULT) => SetItem(1) SetItem(2) SetItem(3) SetItem(4) - rule #precompiledAccounts(FRONTIER) => #precompiledAccounts(DEFAULT) - rule #precompiledAccounts(HOMESTEAD) => #precompiledAccounts(FRONTIER) - rule #precompiledAccounts(TANGERINE_WHISTLE) => #precompiledAccounts(HOMESTEAD) - rule #precompiledAccounts(SPURIOUS_DRAGON) => #precompiledAccounts(TANGERINE_WHISTLE) - rule #precompiledAccounts(BYZANTIUM) => #precompiledAccounts(SPURIOUS_DRAGON) SetItem(5) SetItem(6) SetItem(7) SetItem(8) - rule #precompiledAccounts(CONSTANTINOPLE) => #precompiledAccounts(BYZANTIUM) - rule #precompiledAccounts(PETERSBURG) => #precompiledAccounts(CONSTANTINOPLE) - rule #precompiledAccounts(ISTANBUL) => #precompiledAccounts(PETERSBURG) SetItem(9) - rule #precompiledAccounts(BERLIN) => #precompiledAccounts(ISTANBUL) - rule #precompiledAccounts(LONDON) => #precompiledAccounts(BERLIN) - rule #precompiledAccounts(MERGE) => #precompiledAccounts(LONDON) -``` - -- `ECREC` performs ECDSA public key recovery. -- `SHA256` performs the SHA2-257 hash function. -- `RIP160` performs the RIPEMD-160 hash function. -- `ID` is the identity function (copies input to output). - -```k - syntax PrecompiledOp ::= "ECREC" - // -------------------------------- - rule ECREC => #end EVMC_SUCCESS ... - DATA - _ => #ecrec(#range(DATA, 0, 32), #range(DATA, 32, 32), #range(DATA, 64, 32), #range(DATA, 96, 32)) - - syntax Bytes ::= #ecrec ( Bytes , Bytes , Bytes , Bytes ) [function, smtlib(ecrec)] - | #ecrec ( Account ) [function] - // -------------------------------------------------------------------- - rule [ecrec]: #ecrec(HASH, SIGV, SIGR, SIGS) => #ecrec(#sender(#unparseByteStack(HASH), #asWord(SIGV), #unparseByteStack(SIGR), #unparseByteStack(SIGS))) [concrete] - - rule #ecrec(.Account) => .Bytes - rule #ecrec(N:Int) => #padToWidth(32, #asByteStack(N)) - - syntax PrecompiledOp ::= "SHA256" - // --------------------------------- - rule SHA256 => #end EVMC_SUCCESS ... - DATA - _ => #parseHexBytes(Sha256(#unparseByteStack(DATA))) - - syntax PrecompiledOp ::= "RIP160" - // --------------------------------- - rule RIP160 => #end EVMC_SUCCESS ... - DATA - _ => #padToWidth(32, #parseHexBytes(RipEmd160(#unparseByteStack(DATA)))) - - syntax PrecompiledOp ::= "ID" - // ----------------------------- - rule ID => #end EVMC_SUCCESS ... - DATA - _ => DATA - - syntax PrecompiledOp ::= "MODEXP" - // --------------------------------- - rule MODEXP => #end EVMC_SUCCESS ... - DATA - _ => #modexp1(#asWord(#range(DATA, 0, 32)), #asWord(#range(DATA, 32, 32)), #asWord(#range(DATA, 64, 32)), #range(DATA, 96, maxInt(0, lengthBytes(DATA) -Int 96))) - - syntax Bytes ::= #modexp1 ( Int , Int , Int , Bytes ) [function] - | #modexp2 ( Int , Int , Int , Bytes ) [function] - | #modexp3 ( Int , Int , Int , Bytes ) [function] - | #modexp4 ( Int , Int , Int ) [function] - // ---------------------------------------------------------------- - rule #modexp1(BASELEN, EXPLEN, MODLEN, DATA) => #modexp2(#asInteger(#range(DATA, 0, BASELEN)), EXPLEN, MODLEN, #range(DATA, BASELEN, maxInt(0, lengthBytes(DATA) -Int BASELEN))) requires MODLEN =/=Int 0 - rule #modexp1(_, _, 0, _) => .Bytes - rule #modexp2(BASE, EXPLEN, MODLEN, DATA) => #modexp3(BASE, #asInteger(#range(DATA, 0, EXPLEN)), MODLEN, #range(DATA, EXPLEN, maxInt(0, lengthBytes(DATA) -Int EXPLEN))) - rule #modexp3(BASE, EXPONENT, MODLEN, DATA) => #padToWidth(MODLEN, #modexp4(BASE, EXPONENT, #asInteger(#range(DATA, 0, MODLEN)))) - rule #modexp4(BASE, EXPONENT, MODULUS) => #asByteStack(powmod(BASE, EXPONENT, MODULUS)) - - syntax PrecompiledOp ::= "ECADD" - // -------------------------------- - rule ECADD => #ecadd((#asWord(#range(DATA, 0, 32)), #asWord(#range(DATA, 32, 32))), (#asWord(#range(DATA, 64, 32)), #asWord(#range(DATA, 96, 32)))) ... - DATA - - syntax InternalOp ::= #ecadd(G1Point, G1Point) - // ---------------------------------------------- - rule #ecadd(P1, P2) => #end EVMC_PRECOMPILE_FAILURE ... - requires notBool isValidPoint(P1) orBool notBool isValidPoint(P2) - rule #ecadd(P1, P2) => #end EVMC_SUCCESS ... _ => #point(BN128Add(P1, P2)) - requires isValidPoint(P1) andBool isValidPoint(P2) - - syntax PrecompiledOp ::= "ECMUL" - // -------------------------------- - rule ECMUL => #ecmul((#asWord(#range(DATA, 0, 32)), #asWord(#range(DATA, 32, 32))), #asWord(#range(DATA, 64, 32))) ... - DATA - - syntax InternalOp ::= #ecmul(G1Point, Int) - // ------------------------------------------ - rule #ecmul(P, _S) => #end EVMC_PRECOMPILE_FAILURE ... - requires notBool isValidPoint(P) - rule #ecmul(P, S) => #end EVMC_SUCCESS ... _ => #point(BN128Mul(P, S)) - requires isValidPoint(P) - - syntax Bytes ::= #point ( G1Point ) [function] - // ---------------------------------------------- - rule #point((X, Y)) => #padToWidth(32, #asByteStack(X)) +Bytes #padToWidth(32, #asByteStack(Y)) - - syntax PrecompiledOp ::= "ECPAIRING" - // ------------------------------------ - rule ECPAIRING => #ecpairing(.List, .List, 0, DATA, lengthBytes(DATA)) ... - DATA - requires lengthBytes(DATA) modInt 192 ==Int 0 - rule ECPAIRING => #end EVMC_PRECOMPILE_FAILURE ... - DATA - requires lengthBytes(DATA) modInt 192 =/=Int 0 - - syntax InternalOp ::= #ecpairing(List, List, Int, Bytes, Int) - // ------------------------------------------------------------- - rule (.K => #checkPoint) ~> #ecpairing((.List => ListItem((#asWord(#range(DATA, I, 32)), #asWord(#range(DATA, I +Int 32, 32))))) _, (.List => ListItem((#asWord(#range(DATA, I +Int 96, 32)) x #asWord(#range(DATA, I +Int 64, 32)) , #asWord(#range(DATA, I +Int 160, 32)) x #asWord(#range(DATA, I +Int 128, 32))))) _, I => I +Int 192, DATA, LEN) ... - requires I =/=Int LEN - rule #ecpairing(A, B, LEN, _, LEN) => #end EVMC_SUCCESS ... - _ => #padToWidth(32, #asByteStack(bool2Word(BN128AtePairing(A, B)))) - - syntax InternalOp ::= "#checkPoint" - // ----------------------------------- - rule (#checkPoint => .) ~> #ecpairing(ListItem(AK::G1Point) _, ListItem(BK::G2Point) _, _, _, _) ... - requires isValidPoint(AK) andBool isValidPoint(BK) - rule #checkPoint ~> #ecpairing(ListItem(AK::G1Point) _, ListItem(BK::G2Point) _, _, _, _) => #end EVMC_PRECOMPILE_FAILURE ... - requires notBool isValidPoint(AK) orBool notBool isValidPoint(BK) - - syntax PrecompiledOp ::= "BLAKE2F" - // ---------------------------------- - rule BLAKE2F => #end EVMC_SUCCESS ... - _ => #parseByteStack( Blake2Compress( #unparseByteStack( DATA ) ) ) - DATA - requires lengthBytes( DATA ) ==Int 213 - andBool DATA[212] <=Int 1 - - rule BLAKE2F => #end EVMC_PRECOMPILE_FAILURE ... - DATA - requires lengthBytes( DATA ) ==Int 213 - andBool DATA[212] >Int 1 - - rule BLAKE2F => #end EVMC_PRECOMPILE_FAILURE ... - DATA - requires lengthBytes( DATA ) =/=Int 213 -``` - - -Ethereum Gas Calculation -======================== - -Overall Gas ------------ - -- `#gas` calculates how much gas this operation costs, and takes into account the memory consumed. -- `#deductGas` is used to check that there won't be a gas underflow (throwing `EVMC_OUT_OF_GAS` if so), and deducts the gas if not. -- `#deductMemory` checks that access to memory stay within sensible bounds (and deducts the correct amount of gas for it), throwing `EVMC_INVALID_MEMORY_ACCESS` if bad access happens. - -```k - syntax InternalOp ::= "#gas" "[" OpCode "," OpCode "]" - // ------------------------------------------------------ - rule #gas [ OP , AOP ] - => #memory [ OP , AOP ] - ~> #gas [ AOP ] - ~> #access [ OP , AOP ] - ... - - - rule #gas [ OP ] => #gasExec(SCHED, OP) ~> #deductGas ... - SCHED - - rule #memory [ OP , AOP ] => #memory(AOP, MU) ~> #deductMemory ... - MU - requires #usesMemory(OP) - - rule #memory [ _ , _ ] => . ... [owise] - - syntax InternalOp ::= "#gas" "[" OpCode "]" | "#deductGas" | "#deductMemoryGas" - | "#memory" "[" OpCode "," OpCode "]" | "#deductMemory" - // --------------------------------------------------------------------------- - rule MU':Int ~> #deductMemory => (Cmem(SCHED, MU') -Int Cmem(SCHED, MU)) ~> #deductMemoryGas ... - MU => MU' SCHED - - rule _G:Gas ~> (#deductMemoryGas => #deductGas) ... //Required for verification - rule G:Gas ~> #deductGas => #end EVMC_OUT_OF_GAS ... GAVAIL:Gas requires GAVAIL G:Gas ~> #deductGas => . ... GAVAIL:Gas => GAVAIL -Gas G requires G <=Gas GAVAIL - - syntax Bool ::= #inStorage ( Map , Account , Int ) [function, total] - | #inStorageAux1 ( KItem , Int ) [function, total] - | #inStorageAux2 ( Set , Int ) [function, total] - // -------------------------------------------------------------------------- - rule #inStorage(TS, ACCT, KEY) => #inStorageAux1(TS[ACCT], KEY) requires ACCT in_keys(TS) - rule #inStorage(_, _, _) => false [owise] - - rule #inStorageAux1(KEYS:Set, KEY) => #inStorageAux2(KEYS, KEY) - rule #inStorageAux1(_, _) => false [owise] - - rule #inStorageAux2(KEYS, KEY) => true requires KEY in KEYS - rule #inStorageAux2(_, _) => false [owise] -``` - -Memory Consumption ------------------- - -Memory consumed is tracked to determine the appropriate amount of gas to charge for each operation. -In the YellowPaper, each opcode is defined to consume zero gas unless specified otherwise next to the semantics of the opcode (appendix H). - -- `#memory` computes the new memory size given the old size and next operator (with its arguments). -- `#memoryUsageUpdate` is the function `M` in appendix H of the YellowPaper which helps track the memory used. - -```k - syntax Int ::= #memory ( OpCode , Int ) [function, total] - // --------------------------------------------------------- - rule #memory ( MLOAD INDEX , MU ) => #memoryUsageUpdate(MU, INDEX, 32) - rule #memory ( MSTORE INDEX _ , MU ) => #memoryUsageUpdate(MU, INDEX, 32) - rule #memory ( MSTORE8 INDEX _ , MU ) => #memoryUsageUpdate(MU, INDEX, 1) - - rule #memory ( SHA3 START WIDTH , MU ) => #memoryUsageUpdate(MU, START, WIDTH) - rule #memory ( LOG(_) START WIDTH , MU ) => #memoryUsageUpdate(MU, START, WIDTH) - - rule #memory ( CODECOPY START _ WIDTH , MU ) => #memoryUsageUpdate(MU, START, WIDTH) - rule #memory ( EXTCODECOPY _ START _ WIDTH , MU ) => #memoryUsageUpdate(MU, START, WIDTH) - rule #memory ( CALLDATACOPY START _ WIDTH , MU ) => #memoryUsageUpdate(MU, START, WIDTH) - rule #memory ( RETURNDATACOPY START _ WIDTH , MU ) => #memoryUsageUpdate(MU, START, WIDTH) - - rule #memory ( CREATE _ START WIDTH , MU ) => #memoryUsageUpdate(MU, START, WIDTH) - rule #memory ( CREATE2 _ START WIDTH _ , MU ) => #memoryUsageUpdate(MU, START, WIDTH) - rule #memory ( RETURN START WIDTH , MU ) => #memoryUsageUpdate(MU, START, WIDTH) - rule #memory ( REVERT START WIDTH , MU ) => #memoryUsageUpdate(MU, START, WIDTH) - - rule #memory ( _COP:CallOp _ _ _ ARGSTART ARGWIDTH RETSTART RETWIDTH , MU ) => #memoryUsageUpdate(#memoryUsageUpdate(MU, ARGSTART, ARGWIDTH), RETSTART, RETWIDTH) - rule #memory ( _CSOP:CallSixOp _ _ ARGSTART ARGWIDTH RETSTART RETWIDTH , MU ) => #memoryUsageUpdate(#memoryUsageUpdate(MU, ARGSTART, ARGWIDTH), RETSTART, RETWIDTH) - - rule #memory ( _ , MU ) => MU [owise] - - syntax Bool ::= #usesMemory ( OpCode ) [function, total] - // -------------------------------------------------------- - rule #usesMemory(_:LogOp) => true - rule #usesMemory(_:CallOp) => true - rule #usesMemory(_:CallSixOp) => true - rule #usesMemory(MLOAD) => true - rule #usesMemory(MSTORE) => true - rule #usesMemory(MSTORE8) => true - rule #usesMemory(SHA3) => true - rule #usesMemory(CODECOPY) => true - rule #usesMemory(EXTCODECOPY) => true - rule #usesMemory(CALLDATACOPY) => true - rule #usesMemory(RETURNDATACOPY) => true - rule #usesMemory(CREATE) => true - rule #usesMemory(CREATE2) => true - rule #usesMemory(RETURN) => true - rule #usesMemory(REVERT) => true - rule #usesMemory(_) => false [owise] - - syntax Int ::= #memoryUsageUpdate ( Int , Int , Int ) [function, total] - // ----------------------------------------------------------------------- - rule #memoryUsageUpdate(MU, _, WIDTH) => MU requires notBool 0 maxInt(MU, (START +Int WIDTH) up/Int 32) requires 0 true requires isAddr1Op(OP) - rule #usesAccessList(OP) => true requires isAddr2Op(OP) - rule #usesAccessList(SLOAD) => true - rule #usesAccessList(SSTORE) => true - rule #usesAccessList(_) => false [owise] - - syntax InternalOp ::= "#access" "[" OpCode "," OpCode "]" - // --------------------------------------------------------- - rule #access [ OP , AOP ] => #gasAccess(SCHED, AOP) ~> #deductGas ... - SCHED - requires Ghasaccesslist << SCHED >> andBool #usesAccessList(OP) - - rule #access [ _ , _ ] => . ... _ [owise] - - syntax InternalOp ::= #gasAccess ( Schedule, OpCode ) - // ----------------------------------------------------- - rule #gasAccess(SCHED, EXTCODESIZE ACCT) => #accessAccounts ACCT ~> Caddraccess(SCHED, ACCT in ACCTS) ... ACCTS - rule #gasAccess(SCHED, EXTCODECOPY ACCT _ _ _) => #accessAccounts ACCT ~> Caddraccess(SCHED, ACCT in ACCTS) ... ACCTS - rule #gasAccess(SCHED, EXTCODEHASH ACCT) => #accessAccounts ACCT ~> Caddraccess(SCHED, ACCT in ACCTS) ... ACCTS - rule #gasAccess(SCHED, BALANCE ACCT) => #accessAccounts ACCT ~> Caddraccess(SCHED, ACCT in ACCTS) ... ACCTS - rule #gasAccess(SCHED, SELFDESTRUCT ACCT) => #accessAccounts ACCT ~> #if ACCT in ACCTS #then 0 #else Gcoldaccountaccess < SCHED > #fi ... ACCTS - rule #gasAccess(_ , CALL _ ACCT _ _ _ _ _) => #accessAccounts ACCT ~> 0 ... - rule #gasAccess(_ , CALLCODE _ ACCT _ _ _ _ _) => #accessAccounts ACCT ~> 0 ... - rule #gasAccess(_ , DELEGATECALL _ ACCT _ _ _ _) => #accessAccounts ACCT ~> 0 ... - rule #gasAccess(_ , STATICCALL _ ACCT _ _ _ _) => #accessAccounts ACCT ~> 0 ... - rule #gasAccess(_ , SLOAD INDEX ) => #accessStorage ACCT INDEX ~> 0 ... ACCT - rule #gasAccess(SCHED, SSTORE INDEX _) => #accessStorage ACCT INDEX ~> #if #inStorage(TS, ACCT, INDEX) #then 0 #else Gcoldsload < SCHED > #fi ... ACCT TS - rule #gasAccess(_ , _ ) => 0 ... [owise] - -``` - -Execution Gas -------------- - -The intrinsic gas calculation mirrors the style of the YellowPaper (appendix H). - -- `#gasExec` loads all the relevant surronding state and uses that to compute the intrinsic execution gas of each opcode. - -```k - syntax InternalOp ::= #gasExec ( Schedule , OpCode ) - // ---------------------------------------------------- - rule #gasExec(SCHED, SSTORE INDEX NEW) => Csstore(SCHED, NEW, #lookup(STORAGE, INDEX), #lookup(ORIGSTORAGE, INDEX)) ... - ACCT - GAVAIL - - ACCT - STORAGE - ORIGSTORAGE - ... - - R => R +Int Rsstore(SCHED, NEW, #lookup(STORAGE, INDEX), #lookup(ORIGSTORAGE, INDEX)) - requires notBool Ghassstorestipend << SCHED >> - orBool notBool GAVAIL <=Gas Gcallstipend < SCHED > - - rule #gasExec(SCHED, SSTORE _ _ ) => #end EVMC_OUT_OF_GAS ... - GAVAIL - requires Ghassstorestipend << SCHED >> - andBool GAVAIL <=Gas Gcallstipend < SCHED > - - rule #gasExec(SCHED, EXP _ 0) => Gexp < SCHED > ... - rule #gasExec(SCHED, EXP _ W1) => Gexp < SCHED > +Int (Gexpbyte < SCHED > *Int (1 +Int (log256Int(W1)))) ... requires W1 =/=Int 0 - - rule #gasExec(SCHED, CALLDATACOPY _ _ WIDTH) => Gverylow < SCHED > +Int (Gcopy < SCHED > *Int (WIDTH up/Int 32)) ... - rule #gasExec(SCHED, RETURNDATACOPY _ _ WIDTH) => Gverylow < SCHED > +Int (Gcopy < SCHED > *Int (WIDTH up/Int 32)) ... - rule #gasExec(SCHED, CODECOPY _ _ WIDTH) => Gverylow < SCHED > +Int (Gcopy < SCHED > *Int (WIDTH up/Int 32)) ... - - rule #gasExec(SCHED, LOG(N) _ WIDTH) => (Glog < SCHED > +Int (Glogdata < SCHED > *Int WIDTH) +Int (N *Int Glogtopic < SCHED >)) ... - - rule #gasExec(SCHED, CALL GCAP ACCTTO VALUE _ _ _ _) - => Ccallgas(SCHED, #accountNonexistent(ACCTTO), GCAP, GAVAIL, VALUE, ACCTTO in ACCTS) ~> #allocateCallGas - ~> Ccall(SCHED, #accountNonexistent(ACCTTO), GCAP, GAVAIL, VALUE, ACCTTO in ACCTS) - ... - - GAVAIL - ACCTS - - rule #gasExec(SCHED, CALLCODE GCAP ACCTTO VALUE _ _ _ _) - => Ccallgas(SCHED, #accountNonexistent(ACCTFROM), GCAP, GAVAIL, VALUE, ACCTTO in ACCTS) ~> #allocateCallGas - ~> Ccall(SCHED, #accountNonexistent(ACCTFROM), GCAP, GAVAIL, VALUE, ACCTTO in ACCTS) - ... - - ACCTFROM - GAVAIL - ACCTS - - rule #gasExec(SCHED, DELEGATECALL GCAP ACCTTO _ _ _ _) - => Ccallgas(SCHED, #accountNonexistent(ACCTFROM), GCAP, GAVAIL, 0, ACCTTO in ACCTS) ~> #allocateCallGas - ~> Ccall(SCHED, #accountNonexistent(ACCTFROM), GCAP, GAVAIL, 0, ACCTTO in ACCTS) - ... - - ACCTFROM - GAVAIL - ACCTS - - rule #gasExec(SCHED, STATICCALL GCAP ACCTTO _ _ _ _) - => Ccallgas(SCHED, #accountNonexistent(ACCTTO), GCAP, GAVAIL, 0, ACCTTO in ACCTS) ~> #allocateCallGas - ~> Ccall(SCHED, #accountNonexistent(ACCTTO), GCAP, GAVAIL, 0, ACCTTO in ACCTS) - ... - - GAVAIL - ACCTS - - rule #gasExec(SCHED, SELFDESTRUCT ACCTTO) => Cselfdestruct(SCHED, #accountNonexistent(ACCTTO), BAL) ... - ACCTFROM - SDS - RF => #if ACCTFROM in SDS #then RF #else RF +Word Rselfdestruct < SCHED > #fi - - ACCTFROM - BAL - ... - - - rule #gasExec(SCHED, CREATE _ _ _) - => Gcreate < SCHED > ~> #deductGas - ~> #allocateCreateGas ~> 0 - ... - - - rule #gasExec(SCHED, CREATE2 _ _ WIDTH _) - => Gcreate < SCHED > +Int Gsha3word < SCHED > *Int (WIDTH up/Int 32) ~> #deductGas - ~> #allocateCreateGas ~> 0 - ... - - - rule #gasExec(SCHED, SHA3 _ WIDTH) => Gsha3 < SCHED > +Int (Gsha3word < SCHED > *Int (WIDTH up/Int 32)) ... - - rule #gasExec(SCHED, JUMPDEST) => Gjumpdest < SCHED > ... - rule #gasExec(SCHED, SLOAD INDEX) => Csload(SCHED, #inStorage(TS, ACCT, INDEX)) ... - ACCT - TS - - // Wzero - rule #gasExec(SCHED, STOP) => Gzero < SCHED > ... - rule #gasExec(SCHED, RETURN _ _) => Gzero < SCHED > ... - rule #gasExec(SCHED, REVERT _ _) => Gzero < SCHED > ... - - // Wbase - rule #gasExec(SCHED, ADDRESS) => Gbase < SCHED > ... - rule #gasExec(SCHED, ORIGIN) => Gbase < SCHED > ... - rule #gasExec(SCHED, CALLER) => Gbase < SCHED > ... - rule #gasExec(SCHED, CALLVALUE) => Gbase < SCHED > ... - rule #gasExec(SCHED, CALLDATASIZE) => Gbase < SCHED > ... - rule #gasExec(SCHED, RETURNDATASIZE) => Gbase < SCHED > ... - rule #gasExec(SCHED, CODESIZE) => Gbase < SCHED > ... - rule #gasExec(SCHED, GASPRICE) => Gbase < SCHED > ... - rule #gasExec(SCHED, COINBASE) => Gbase < SCHED > ... - rule #gasExec(SCHED, TIMESTAMP) => Gbase < SCHED > ... - rule #gasExec(SCHED, NUMBER) => Gbase < SCHED > ... - rule #gasExec(SCHED, DIFFICULTY) => Gbase < SCHED > ... - rule #gasExec(SCHED, PREVRANDAO) => Gbase < SCHED > ... - rule #gasExec(SCHED, GASLIMIT) => Gbase < SCHED > ... - rule #gasExec(SCHED, BASEFEE) => Gbase < SCHED > ... - rule #gasExec(SCHED, POP _) => Gbase < SCHED > ... - rule #gasExec(SCHED, PC) => Gbase < SCHED > ... - rule #gasExec(SCHED, MSIZE) => Gbase < SCHED > ... - rule #gasExec(SCHED, GAS) => Gbase < SCHED > ... - rule #gasExec(SCHED, CHAINID) => Gbase < SCHED > ... - - // Wverylow - rule #gasExec(SCHED, ADD _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, SUB _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, NOT _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, LT _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, GT _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, SLT _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, SGT _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, EQ _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, ISZERO _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, AND _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, EVMOR _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, XOR _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, BYTE _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, SHL _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, SHR _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, SAR _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, CALLDATALOAD _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, MLOAD _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, MSTORE _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, MSTORE8 _ _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, PUSH(_)) => Gverylow < SCHED > ... - rule #gasExec(SCHED, DUP(_) _) => Gverylow < SCHED > ... - rule #gasExec(SCHED, SWAP(_) _) => Gverylow < SCHED > ... - - // Wlow - rule #gasExec(SCHED, MUL _ _) => Glow < SCHED > ... - rule #gasExec(SCHED, DIV _ _) => Glow < SCHED > ... - rule #gasExec(SCHED, SDIV _ _) => Glow < SCHED > ... - rule #gasExec(SCHED, MOD _ _) => Glow < SCHED > ... - rule #gasExec(SCHED, SMOD _ _) => Glow < SCHED > ... - rule #gasExec(SCHED, SIGNEXTEND _ _) => Glow < SCHED > ... - rule #gasExec(SCHED, SELFBALANCE) => Glow < SCHED > ... - - // Wmid - rule #gasExec(SCHED, ADDMOD _ _ _) => Gmid < SCHED > ... - rule #gasExec(SCHED, MULMOD _ _ _) => Gmid < SCHED > ... - rule #gasExec(SCHED, JUMP _) => Gmid < SCHED > ... - - // Whigh - rule #gasExec(SCHED, JUMPI _ _) => Ghigh < SCHED > ... - - rule #gasExec(SCHED, EXTCODECOPY _ _ _ WIDTH) => Cextcodecopy(SCHED, WIDTH) ... - rule #gasExec(SCHED, EXTCODESIZE _) => Cextcodesize(SCHED) ... - rule #gasExec(SCHED, BALANCE _) => Cbalance(SCHED) ... - rule #gasExec(SCHED, EXTCODEHASH _) => Cextcodehash(SCHED) ... - rule #gasExec(SCHED, BLOCKHASH _) => Gblockhash < SCHED > ... - - // Precompiled - rule #gasExec(_, ECREC) => 3000 ... - rule #gasExec(_, SHA256) => 60 +Int 12 *Int (lengthBytes(DATA) up/Int 32) ... DATA - rule #gasExec(_, RIP160) => 600 +Int 120 *Int (lengthBytes(DATA) up/Int 32) ... DATA - rule #gasExec(_, ID) => 15 +Int 3 *Int (lengthBytes(DATA) up/Int 32) ... DATA - - rule #gasExec(SCHED, MODEXP) => Cmodexp(SCHED, DATA, #asWord(#range(DATA, 0, 32) ), #asWord(#range(DATA, 32, 32)), #asWord(#range(DATA, 64, 32))) ... - DATA - - rule #gasExec(SCHED, ECADD) => Gecadd < SCHED> ... - rule #gasExec(SCHED, ECMUL) => Gecmul < SCHED > ... - rule #gasExec(SCHED, ECPAIRING) => Gecpairconst < SCHED > +Int (lengthBytes(DATA) /Int 192) *Int Gecpaircoeff < SCHED > ... DATA - rule #gasExec(SCHED, BLAKE2F) => Gfround < SCHED > *Int #asWord(#range(DATA, 0, 4) ) ... DATA - - syntax InternalOp ::= "#allocateCallGas" - // ---------------------------------------- - rule GCALL:Gas ~> #allocateCallGas => . ... - _ => GCALL - - syntax InternalOp ::= "#allocateCreateGas" - // ------------------------------------------ - rule SCHED - #allocateCreateGas => . ... - GAVAIL => #if Gstaticcalldepth << SCHED >> #then 0 #else GAVAIL /Gas 64 #fi - _ => #if Gstaticcalldepth << SCHED >> #then GAVAIL #else #allBut64th(GAVAIL) #fi - [preserves-definedness] -``` - -There are several helpers for calculating gas (most of them also specified in the YellowPaper). - -```k - syntax Exp ::= Int | Gas - syntax KResult ::= Int - syntax Exp ::= Ccall ( Schedule , BExp , Gas , Gas , Int , Bool ) [strict(2)] - | Ccallgas ( Schedule , BExp , Gas , Gas , Int , Bool ) [strict(2)] - | Cselfdestruct ( Schedule , BExp , Int ) [strict(2)] - // ------------------------------------------------------------------------------------- - rule Ccall(SCHED, ISEMPTY:Bool, GCAP, GAVAIL, VALUE, ISWARM) - => Cextra(SCHED, ISEMPTY, VALUE, ISWARM) +Gas Cgascap(SCHED, GCAP, GAVAIL, Cextra(SCHED, ISEMPTY, VALUE, ISWARM)) ... - - rule Ccallgas(SCHED, ISEMPTY:Bool, GCAP, GAVAIL, VALUE, ISWARM) - => Cgascap(SCHED, GCAP, GAVAIL, Cextra(SCHED, ISEMPTY, VALUE, ISWARM)) +Gas #if VALUE ==Int 0 #then 0 #else Gcallstipend < SCHED > #fi ... - - rule Cselfdestruct(SCHED, ISEMPTY:Bool, BAL) - => Gselfdestruct < SCHED > +Int Cnew(SCHED, ISEMPTY andBool Gselfdestructnewaccount << SCHED >>, BAL) ... - - syntax BExp ::= Bool - syntax KResult ::= Bool - syntax BExp ::= #accountNonexistent ( Int ) - // ------------------------------------------- - rule #accountNonexistent(ACCT) => #accountEmpty(CODE, NONCE, BAL) andBool Gemptyisnonexistent << SCHED >> ... - SCHED - - ACCT - BAL - NONCE - CODE - ... - - - rule #accountNonexistent(_) => true ... [owise] -``` - -EVM Program Representations -=========================== - -EVM programs are represented algebraically in K, but programs can load and manipulate program data directly. -The opcodes `CODECOPY` and `EXTCODECOPY` rely on the assembled form of the programs being present. -The opcode `CREATE` relies on being able to interperet EVM data as a program. - -This is a program representation dependence, which we might want to avoid. -Perhaps the only program representation dependence we should have is the hash of the program; doing so achieves: - -- Program representation independence (different analysis tools on the language don't have to ensure they have a common representation of programs, just a common interperetation of the data-files holding programs). -- Programming language independence (we wouldn't even have to commit to a particular language or interperetation of the data-file). -- Only depending on the hash allows us to know that we have *exactly* the correct data-file (program), and nothing more. - -Disassembler ------------- - -After interpreting the strings representing programs as a `WordStack`, it should be changed into an `OpCodes` for use by the EVM semantics. - -- `#dasmOpCode` interperets a `Int` as an `OpCode`. - -```k - syntax OpCode ::= #dasmOpCode ( Int , Schedule ) [function, memo, total] - // ------------------------------------------------------------------------ - rule #dasmOpCode( 0, _ ) => STOP - rule #dasmOpCode( 1, _ ) => ADD - rule #dasmOpCode( 2, _ ) => MUL - rule #dasmOpCode( 3, _ ) => SUB - rule #dasmOpCode( 4, _ ) => DIV - rule #dasmOpCode( 5, _ ) => SDIV - rule #dasmOpCode( 6, _ ) => MOD - rule #dasmOpCode( 7, _ ) => SMOD - rule #dasmOpCode( 8, _ ) => ADDMOD - rule #dasmOpCode( 9, _ ) => MULMOD - rule #dasmOpCode( 10, _ ) => EXP - rule #dasmOpCode( 11, _ ) => SIGNEXTEND - rule #dasmOpCode( 16, _ ) => LT - rule #dasmOpCode( 17, _ ) => GT - rule #dasmOpCode( 18, _ ) => SLT - rule #dasmOpCode( 19, _ ) => SGT - rule #dasmOpCode( 20, _ ) => EQ - rule #dasmOpCode( 21, _ ) => ISZERO - rule #dasmOpCode( 22, _ ) => AND - rule #dasmOpCode( 23, _ ) => EVMOR - rule #dasmOpCode( 24, _ ) => XOR - rule #dasmOpCode( 25, _ ) => NOT - rule #dasmOpCode( 26, _ ) => BYTE - rule #dasmOpCode( 27, SCHED ) => SHL requires Ghasshift << SCHED >> - rule #dasmOpCode( 28, SCHED ) => SHR requires Ghasshift << SCHED >> - rule #dasmOpCode( 29, SCHED ) => SAR requires Ghasshift << SCHED >> - rule #dasmOpCode( 32, _ ) => SHA3 - rule #dasmOpCode( 48, _ ) => ADDRESS - rule #dasmOpCode( 49, _ ) => BALANCE - rule #dasmOpCode( 50, _ ) => ORIGIN - rule #dasmOpCode( 51, _ ) => CALLER - rule #dasmOpCode( 52, _ ) => CALLVALUE - rule #dasmOpCode( 53, _ ) => CALLDATALOAD - rule #dasmOpCode( 54, _ ) => CALLDATASIZE - rule #dasmOpCode( 55, _ ) => CALLDATACOPY - rule #dasmOpCode( 56, _ ) => CODESIZE - rule #dasmOpCode( 57, _ ) => CODECOPY - rule #dasmOpCode( 58, _ ) => GASPRICE - rule #dasmOpCode( 59, _ ) => EXTCODESIZE - rule #dasmOpCode( 60, _ ) => EXTCODECOPY - rule #dasmOpCode( 61, SCHED ) => RETURNDATASIZE requires Ghasreturndata << SCHED >> - rule #dasmOpCode( 62, SCHED ) => RETURNDATACOPY requires Ghasreturndata << SCHED >> - rule #dasmOpCode( 63, SCHED ) => EXTCODEHASH requires Ghasextcodehash << SCHED >> - rule #dasmOpCode( 64, _ ) => BLOCKHASH - rule #dasmOpCode( 65, _ ) => COINBASE - rule #dasmOpCode( 66, _ ) => TIMESTAMP - rule #dasmOpCode( 67, _ ) => NUMBER - rule #dasmOpCode( 68, SCHED ) => PREVRANDAO requires Ghasprevrandao << SCHED >> - rule #dasmOpCode( 68, SCHED ) => DIFFICULTY requires notBool Ghasprevrandao << SCHED >> - rule #dasmOpCode( 69, _ ) => GASLIMIT - rule #dasmOpCode( 70, SCHED ) => CHAINID requires Ghaschainid << SCHED >> - rule #dasmOpCode( 71, SCHED ) => SELFBALANCE requires Ghasselfbalance << SCHED >> - rule #dasmOpCode( 72, SCHED ) => BASEFEE requires Ghasbasefee << SCHED >> - rule #dasmOpCode( 80, _ ) => POP - rule #dasmOpCode( 81, _ ) => MLOAD - rule #dasmOpCode( 82, _ ) => MSTORE - rule #dasmOpCode( 83, _ ) => MSTORE8 - rule #dasmOpCode( 84, _ ) => SLOAD - rule #dasmOpCode( 85, _ ) => SSTORE - rule #dasmOpCode( 86, _ ) => JUMP - rule #dasmOpCode( 87, _ ) => JUMPI - rule #dasmOpCode( 88, _ ) => PC - rule #dasmOpCode( 89, _ ) => MSIZE - rule #dasmOpCode( 90, _ ) => GAS - rule #dasmOpCode( 91, _ ) => JUMPDEST - rule #dasmOpCode( 96, _ ) => PUSH(1) - rule #dasmOpCode( 97, _ ) => PUSH(2) - rule #dasmOpCode( 98, _ ) => PUSH(3) - rule #dasmOpCode( 99, _ ) => PUSH(4) - rule #dasmOpCode( 100, _ ) => PUSH(5) - rule #dasmOpCode( 101, _ ) => PUSH(6) - rule #dasmOpCode( 102, _ ) => PUSH(7) - rule #dasmOpCode( 103, _ ) => PUSH(8) - rule #dasmOpCode( 104, _ ) => PUSH(9) - rule #dasmOpCode( 105, _ ) => PUSH(10) - rule #dasmOpCode( 106, _ ) => PUSH(11) - rule #dasmOpCode( 107, _ ) => PUSH(12) - rule #dasmOpCode( 108, _ ) => PUSH(13) - rule #dasmOpCode( 109, _ ) => PUSH(14) - rule #dasmOpCode( 110, _ ) => PUSH(15) - rule #dasmOpCode( 111, _ ) => PUSH(16) - rule #dasmOpCode( 112, _ ) => PUSH(17) - rule #dasmOpCode( 113, _ ) => PUSH(18) - rule #dasmOpCode( 114, _ ) => PUSH(19) - rule #dasmOpCode( 115, _ ) => PUSH(20) - rule #dasmOpCode( 116, _ ) => PUSH(21) - rule #dasmOpCode( 117, _ ) => PUSH(22) - rule #dasmOpCode( 118, _ ) => PUSH(23) - rule #dasmOpCode( 119, _ ) => PUSH(24) - rule #dasmOpCode( 120, _ ) => PUSH(25) - rule #dasmOpCode( 121, _ ) => PUSH(26) - rule #dasmOpCode( 122, _ ) => PUSH(27) - rule #dasmOpCode( 123, _ ) => PUSH(28) - rule #dasmOpCode( 124, _ ) => PUSH(29) - rule #dasmOpCode( 125, _ ) => PUSH(30) - rule #dasmOpCode( 126, _ ) => PUSH(31) - rule #dasmOpCode( 127, _ ) => PUSH(32) - rule #dasmOpCode( 128, _ ) => DUP(1) - rule #dasmOpCode( 129, _ ) => DUP(2) - rule #dasmOpCode( 130, _ ) => DUP(3) - rule #dasmOpCode( 131, _ ) => DUP(4) - rule #dasmOpCode( 132, _ ) => DUP(5) - rule #dasmOpCode( 133, _ ) => DUP(6) - rule #dasmOpCode( 134, _ ) => DUP(7) - rule #dasmOpCode( 135, _ ) => DUP(8) - rule #dasmOpCode( 136, _ ) => DUP(9) - rule #dasmOpCode( 137, _ ) => DUP(10) - rule #dasmOpCode( 138, _ ) => DUP(11) - rule #dasmOpCode( 139, _ ) => DUP(12) - rule #dasmOpCode( 140, _ ) => DUP(13) - rule #dasmOpCode( 141, _ ) => DUP(14) - rule #dasmOpCode( 142, _ ) => DUP(15) - rule #dasmOpCode( 143, _ ) => DUP(16) - rule #dasmOpCode( 144, _ ) => SWAP(1) - rule #dasmOpCode( 145, _ ) => SWAP(2) - rule #dasmOpCode( 146, _ ) => SWAP(3) - rule #dasmOpCode( 147, _ ) => SWAP(4) - rule #dasmOpCode( 148, _ ) => SWAP(5) - rule #dasmOpCode( 149, _ ) => SWAP(6) - rule #dasmOpCode( 150, _ ) => SWAP(7) - rule #dasmOpCode( 151, _ ) => SWAP(8) - rule #dasmOpCode( 152, _ ) => SWAP(9) - rule #dasmOpCode( 153, _ ) => SWAP(10) - rule #dasmOpCode( 154, _ ) => SWAP(11) - rule #dasmOpCode( 155, _ ) => SWAP(12) - rule #dasmOpCode( 156, _ ) => SWAP(13) - rule #dasmOpCode( 157, _ ) => SWAP(14) - rule #dasmOpCode( 158, _ ) => SWAP(15) - rule #dasmOpCode( 159, _ ) => SWAP(16) - rule #dasmOpCode( 160, _ ) => LOG(0) - rule #dasmOpCode( 161, _ ) => LOG(1) - rule #dasmOpCode( 162, _ ) => LOG(2) - rule #dasmOpCode( 163, _ ) => LOG(3) - rule #dasmOpCode( 164, _ ) => LOG(4) - rule #dasmOpCode( 240, _ ) => CREATE - rule #dasmOpCode( 241, _ ) => CALL - rule #dasmOpCode( 242, _ ) => CALLCODE - rule #dasmOpCode( 243, _ ) => RETURN - rule #dasmOpCode( 244, SCHED ) => DELEGATECALL requires SCHED =/=K FRONTIER - rule #dasmOpCode( 245, SCHED ) => CREATE2 requires Ghascreate2 << SCHED >> - rule #dasmOpCode( 250, SCHED ) => STATICCALL requires Ghasstaticcall << SCHED >> - rule #dasmOpCode( 253, SCHED ) => REVERT requires Ghasrevert << SCHED >> - rule #dasmOpCode( 254, _ ) => INVALID - rule #dasmOpCode( 255, _ ) => SELFDESTRUCT - rule #dasmOpCode( W, _ ) => UNDEFINED(W) [owise] -endmodule -``` diff --git a/include/kframework/evm/index.html b/include/kframework/evm/index.html new file mode 100644 index 0000000000..9340727dfa --- /dev/null +++ b/include/kframework/evm/index.html @@ -0,0 +1,2680 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

EVM Execution

+

Overview

+

The EVM is a stack machine over some simple opcodes. +Most of the opcodes are "local" to the execution state of the machine, but some of them must interact with the world state. +This file only defines the local execution operations, the file driver.md will define the interactions with the world state.

+
requires "data.md"
+requires "network.md"
+requires "gas.md"
+
+module EVM
+    imports STRING
+    imports EVM-DATA
+    imports NETWORK
+    imports GAS
+
+

Configuration

+

The configuration has cells for the current account id, the current opcode, the program counter, the current gas, the gas price, the current program, the word stack, and the local memory. +In addition, there are cells for the callstack and execution substate.

+

We've broken up the configuration into two components; those parts of the state that mutate during execution of a single transaction and those that are static throughout. +In the comments next to each cell, we've marked which component of the YellowPaper state corresponds to each cell.

+
    configuration
+      <kevm>
+        <k> $PGM:EthereumSimulation </k>
+        <exit-code exit=""> 1 </exit-code>
+        <mode> $MODE:Mode </mode>
+        <schedule> $SCHEDULE:Schedule </schedule>
+
+        <ethereum>
+
+          // EVM Specific
+          // ============
+
+          <evm>
+
+            // Mutable during a single transaction
+            // -----------------------------------
+
+            <output>          .Bytes      </output>           // H_RETURN
+            <statusCode>      .StatusCode </statusCode>
+            <callStack>       .List       </callStack>
+            <interimStates>   .List       </interimStates>
+            <touchedAccounts> .Set        </touchedAccounts>
+
+            <callState>
+              <program>   .Bytes </program>
+              <jumpDests> .Set   </jumpDests>
+
+              // I_*
+              <id>        .Account </id>                    // I_a
+              <caller>    .Account </caller>                // I_s
+              <callData>  .Bytes   </callData>              // I_d
+              <callValue> 0        </callValue>             // I_v
+
+              // \mu_*
+              <wordStack>   .WordStack </wordStack>           // \mu_s
+              <localMem>    .Bytes     </localMem>            // \mu_m
+              <pc>          0          </pc>                  // \mu_pc
+              <gas>         0:Gas      </gas>                 // \mau_g
+              <memoryUsed>  0          </memoryUsed>          // \mu_i
+              <callGas>     0:Gas      </callGas>
+
+              <static>    false </static>
+              <callDepth> 0     </callDepth>
+            </callState>
+
+            // A_* (execution substate)
+            <substate>
+              <selfDestruct>     .Set  </selfDestruct>            // A_s
+              <log>              .List </log>                     // A_l
+              <refund>           0     </refund>                  // A_r
+              <accessedAccounts> .Set  </accessedAccounts>
+              <accessedStorage>  .Map  </accessedStorage>
+            </substate>
+
+            // Immutable during a single transaction
+            // -------------------------------------
+
+            <gasPrice> 0        </gasPrice>                   // I_p
+            <origin>   .Account </origin>                     // I_o
+
+            // I_H* (block information)
+            <blockhashes> .List </blockhashes>
+            <block>
+              <previousHash>     0      </previousHash>     // I_Hp
+              <ommersHash>       0      </ommersHash>       // I_Ho
+              <coinbase>         0      </coinbase>         // I_Hc
+              <stateRoot>        0      </stateRoot>        // I_Hr
+              <transactionsRoot> 0      </transactionsRoot> // I_Ht
+              <receiptsRoot>     0      </receiptsRoot>     // I_He
+              <logsBloom>        .Bytes </logsBloom>        // I_Hb
+              <difficulty>       0      </difficulty>       // I_Hd
+              <number>           0      </number>           // I_Hi
+              <gasLimit>         0      </gasLimit>         // I_Hl
+              <gasUsed>          0:Gas  </gasUsed>          // I_Hg
+              <timestamp>        0      </timestamp>        // I_Hs
+              <extraData>        .Bytes </extraData>        // I_Hx
+              <mixHash>          0      </mixHash>          // I_Hm
+              <blockNonce>       0      </blockNonce>       // I_Hn
+              <baseFee>          0      </baseFee>
+
+              <ommerBlockHeaders> [ .JSONs ] </ommerBlockHeaders>
+            </block>
+
+          </evm>
+
+          // Ethereum Network
+          // ================
+
+          <network>
+
+            // Chain identifier
+            // ----------------
+            <chainID> $CHAINID:Int </chainID>
+
+            // Accounts Record
+            // ---------------
+
+            <accounts>
+              <account multiplicity="*" type="Map">
+                <acctID>      0                  </acctID>
+                <balance>     0                  </balance>
+                <code>        .Bytes:AccountCode </code>
+                <storage>     .Map               </storage>
+                <origStorage> .Map               </origStorage>
+                <nonce>       0                  </nonce>
+              </account>
+            </accounts>
+
+            // Transactions Record
+            // -------------------
+
+            <txOrder>   .List </txOrder>
+            <txPending> .List </txPending>
+
+            <messages>
+              <message multiplicity="*" type="Map">
+                <msgID>         0          </msgID>
+                <txNonce>       0          </txNonce>       // T_n
+                <txGasPrice>    0          </txGasPrice>    // T_p
+                <txGasLimit>    0          </txGasLimit>    // T_g
+                <to>            .Account   </to>            // T_t
+                <value>         0          </value>         // T_v
+                <sigV>          0          </sigV>          // T_w
+                <sigR>          .Bytes     </sigR>          // T_r
+                <sigS>          .Bytes     </sigS>          // T_s
+                <data>          .Bytes     </data>          // T_i/T_e
+                <txAccess>      [ .JSONs ] </txAccess>      // T_a
+                <txChainID>     0          </txChainID>     // T_c
+                <txPriorityFee> 0          </txPriorityFee>
+                <txMaxFee>      0          </txMaxFee>
+                <txType>        .TxType    </txType>
+              </message>
+            </messages>
+
+          </network>
+
+        </ethereum>
+      </kevm>
+
+    syntax EthereumSimulation
+ // ----------------------------
+
+ +

Our semantics is modal, with the initial mode being set on the command line via -cMODE=EXECMODE.

+
    +
  • NORMAL executes as a client on the network would.
  • +
  • VMTESTS skips CALL* and CREATE operations.
  • +
+
    syntax Mode ::= "NORMAL"  [klabel(NORMAL), symbol]
+                  | "VMTESTS" [klabel(VMTESTS), symbol]
+ // ---------------------------------------------------
+
+

State Stacks

+

The CallStack

+

The callStack cell stores a list of previous VM execution states.

+
    +
  • #pushCallStack saves a copy of VM execution state on the callStack.
  • +
  • #popCallStack restores the top element of the callStack.
  • +
  • #dropCallStack removes the top element of the callStack.
  • +
+
    syntax InternalOp ::= "#pushCallStack"
+ // --------------------------------------
+    rule <k> #pushCallStack => . ... </k>
+         <callStack> STACK => ListItem(CALLSTATE) STACK </callStack>
+         <callState> CALLSTATE </callState>
+
+    syntax InternalOp ::= "#popCallStack"
+ // -------------------------------------
+    rule <k> #popCallStack => . ... </k>
+         <callStack> ListItem(CALLSTATE) REST => REST </callStack>
+         <callState> _ => CALLSTATE </callState>
+
+    syntax InternalOp ::= "#dropCallStack"
+ // --------------------------------------
+    rule <k> #dropCallStack => . ... </k>
+         <callStack> ListItem(_) REST => REST </callStack>
+
+

The StateStack

+

The interimStates cell stores a list of previous world states.

+
    +
  • #pushWorldState stores a copy of the current accounts and the substate at the top of the interimStates cell.
  • +
  • #popWorldState restores the top element of the interimStates.
  • +
  • #dropWorldState removes the top element of the interimStates.
  • +
+
    syntax Accounts ::= "{" AccountsCellFragment "|" SubstateCellFragment "}"
+ // -------------------------------------------------------------------------
+
+    syntax InternalOp ::= "#pushWorldState"
+ // ---------------------------------------
+    rule <k> #pushWorldState => .K ... </k>
+         <interimStates> STATES => ListItem({ ACCTDATA | SUBSTATE }) STATES </interimStates>
+         <accounts>       ACCTDATA </accounts>
+         <substate>       SUBSTATE </substate>
+
+    syntax InternalOp ::= "#popWorldState"
+ // --------------------------------------
+    rule <k> #popWorldState => .K ... </k>
+         <interimStates> ListItem({ ACCTDATA | SUBSTATE }) REST => REST </interimStates>
+         <accounts>       _ => ACCTDATA </accounts>
+         <substate>       _ => SUBSTATE </substate>
+
+    syntax InternalOp ::= "#dropWorldState"
+ // ---------------------------------------
+    rule <k> #dropWorldState => . ... </k> <interimStates> ListItem(_) REST => REST </interimStates>
+
+

Control Flow

+

Exception Based

+
    +
  • #halt indicates end of execution. +It will consume anything related to the current computation behind it on the <k> cell.
  • +
  • #end_ sets the statusCode and the program counter of the last executed opcode, then halts execution.
  • +
+
    syntax KItem ::= "#halt" | "#end" StatusCode
+ // --------------------------------------------
+    rule [end]:
+         <k> #end SC => #halt ... </k>
+         <statusCode> _ => SC </statusCode>
+
+    rule <k> #halt ~> (_:Int    => .) ... </k>
+    rule <k> #halt ~> (_:OpCode => .) ... </k>
+
+

OpCode Execution

+

Execution Macros

+
    +
  • #lookupOpCode reads an OpCode from the program Bytes if the program-counter is within the bounds of the program, meaning that it points to an actual opcode. +It will return .NoOpCode otherwise.
  • +
+
    syntax MaybeOpCode ::= ".NoOpCode" | OpCode
+
+    syntax MaybeOpCode ::= "#lookupOpCode" "(" Bytes "," Int "," Schedule ")" [function, total]
+ // -----------------------------------------------------------------------------------------------
+    rule #lookupOpCode(BA, I, SCHED) => #dasmOpCode(BA[I], SCHED) requires 0 <=Int I andBool I <Int lengthBytes(BA)
+    rule #lookupOpCode(_, _, _)  => .NoOpCode [owise]
+
+
    +
  • #execute loads the next opcode.
  • +
+
    syntax KItem ::= "#execute"
+ // ---------------------------
+    rule [halt]:
+         <k> #halt ~> (#execute => .) ... </k>
+
+    rule [step]:
+         <k> (. => #next [ #lookupOpCode(PGM, PCOUNT, SCHED) ]) ~> #execute ... </k>
+         <program> PGM </program>
+         <pc> PCOUNT </pc>
+         <schedule> SCHED </schedule>
+
+

Single Step

+

If the program-counter points to an actual opcode, it's loaded into the #next [_] operator. +If .NoOpCode is loaded into #next [_], then it means that there is no next opcode and the execution will halt with an EVMC_SUCCESS status code. +The #next [_] operator initiates execution by:

+
    +
  1. checking if there will be a stack over/underflow, or a static mode violation,
  2. +
  3. calculate any address conversions needed for items on the wordstack,
  4. +
  5. executing the opcode (which includes any gas deduction needed), and
  6. +
  7. adjusting the program counter.
  8. +
+
    syntax InternalOp ::= "#next" "[" MaybeOpCode "]"
+ // -------------------------------------------------
+    rule <k> #next [ .NoOpCode ] => #end EVMC_SUCCESS ... </k>
+         <output> _ => .Bytes </output>
+
+    rule <k> #next [ OP:OpCode ]
+          => #addr [ OP ]
+          ~> #exec [ OP ]
+          ~> #pc   [ OP ]
+         ...
+         </k>
+         <wordStack> WS </wordStack>
+         <static> STATIC:Bool </static>
+      requires notBool ( #stackUnderflow(WS, OP) orBool #stackOverflow(WS, OP) )
+       andBool notBool ( STATIC andBool #changesState(OP, WS) )
+
+    rule <k> #next [ OP ] => #end EVMC_STACK_UNDERFLOW ... </k>
+         <wordStack> WS </wordStack>
+      requires #stackUnderflow(WS, OP)
+
+    rule <k> #next [ OP ] => #end EVMC_STACK_OVERFLOW ... </k>
+         <wordStack> WS </wordStack>
+      requires #stackOverflow(WS, OP)
+
+    rule <k> #next [ OP ] => #end EVMC_STATIC_MODE_VIOLATION ... </k>
+         <wordStack> WS </wordStack>
+         <static> STATIC:Bool </static>
+      requires STATIC andBool #changesState(OP, WS)
+       andBool notBool ( #stackUnderflow(WS, OP) orBool #stackOverflow(WS, OP) )
+
+

Exceptional Checks

+
    +
  • #stackNeeded is how many arguments that opcode will need off the top of the stack.
  • +
  • #stackAdded is how many arguments that opcode will push onto the top of the stack.
  • +
  • #stackDelta is the delta the stack will have after the opcode executes.
  • +
+
    syntax Bool ::= #stackUnderflow ( WordStack , OpCode ) [macro]
+                  | #stackOverflow  ( WordStack , OpCode ) [macro]
+ // --------------------------------------------------------------
+    rule #stackUnderflow(WS, OP:OpCode) => #sizeWordStack(WS) <Int #stackNeeded(OP)
+    rule #stackOverflow (WS, OP) => #sizeWordStack(WS) +Int #stackDelta(OP) >Int 1024
+
+    syntax Int ::= #stackNeeded ( OpCode ) [function]
+ // -------------------------------------------------
+    rule #stackNeeded(PUSH(_))          => 0
+    rule #stackNeeded(_IOP:InvalidOp)   => 0
+    rule #stackNeeded(_NOP:NullStackOp) => 0
+    rule #stackNeeded(_UOP:UnStackOp)   => 1
+    rule #stackNeeded(BOP:BinStackOp)   => 2 requires notBool isLogOp(BOP)
+    rule #stackNeeded(_TOP:TernStackOp) => 3
+    rule #stackNeeded(_QOP:QuadStackOp) => 4
+    rule #stackNeeded(DUP(N))           => N
+    rule #stackNeeded(SWAP(N))          => N +Int 1
+    rule #stackNeeded(LOG(N))           => N +Int 2
+    rule #stackNeeded(_CSOP:CallSixOp)  => 6
+    rule #stackNeeded(COP:CallOp)       => 7 requires notBool isCallSixOp(COP)
+
+    syntax Int ::= #stackAdded ( OpCode ) [function]
+ // ------------------------------------------------
+    rule #stackAdded(CALLDATACOPY)   => 0
+    rule #stackAdded(RETURNDATACOPY) => 0
+    rule #stackAdded(CODECOPY)       => 0
+    rule #stackAdded(EXTCODECOPY)    => 0
+    rule #stackAdded(POP)            => 0
+    rule #stackAdded(MSTORE)         => 0
+    rule #stackAdded(MSTORE8)        => 0
+    rule #stackAdded(SSTORE)         => 0
+    rule #stackAdded(JUMP)           => 0
+    rule #stackAdded(JUMPI)          => 0
+    rule #stackAdded(JUMPDEST)       => 0
+    rule #stackAdded(STOP)           => 0
+    rule #stackAdded(RETURN)         => 0
+    rule #stackAdded(REVERT)         => 0
+    rule #stackAdded(SELFDESTRUCT)   => 0
+    rule #stackAdded(PUSH(_))        => 1
+    rule #stackAdded(LOG(_))         => 0
+    rule #stackAdded(SWAP(N))        => N +Int 1
+    rule #stackAdded(DUP(N))         => N +Int 1
+    rule #stackAdded(_IOP:InvalidOp) => 0
+    rule #stackAdded(_OP)            => 1 [owise]
+
+    syntax Int ::= #stackDelta ( OpCode ) [function]
+ // ------------------------------------------------
+    rule #stackDelta(OP) => #stackAdded(OP) -Int #stackNeeded(OP)
+
+
    +
  • #changesState is true if the given opcode will change <network> state given the arguments.
  • +
+
    syntax Bool ::= #changesState ( OpCode , WordStack ) [function]
+ // ---------------------------------------------------------------
+
+
    rule #changesState(CALL         , _ : _ : VALUE : _) => true  requires VALUE =/=Int 0
+    rule #changesState(LOG(_)       , _)                 => true
+    rule #changesState(SSTORE       , _)                 => true
+    rule #changesState(CREATE       , _)                 => true
+    rule #changesState(CREATE2      , _)                 => true
+    rule #changesState(SELFDESTRUCT , _)                 => true
+    rule #changesState(_            , _)                 => false [owise]
+
+

Execution Step

+
    +
  • #exec will load the arguments of the opcode (it assumes #stackNeeded? is accurate and has been called) and trigger the subsequent operations.
  • +
+
    syntax InternalOp ::= "#exec" "[" OpCode "]"
+ // --------------------------------------------
+    rule <k> #exec [ IOP:InvalidOp ] => IOP ... </k>
+
+    rule <k> #exec [ OP ] => #gas [ OP , OP ] ~> OP ... </k> requires isNullStackOp(OP) orBool isPushOp(OP)
+
+

Here we load the correct number of arguments from the wordStack based on the sort of the opcode.

+
    syntax KItem  ::= OpCode
+    syntax OpCode ::= NullStackOp | UnStackOp | BinStackOp | TernStackOp | QuadStackOp
+                    | InvalidOp | StackOp | InternalOp | CallOp | CallSixOp | PushOp
+ // --------------------------------------------------------------------------------
+
+    syntax InternalOp ::= UnStackOp   Int
+                        | BinStackOp  Int Int
+                        | TernStackOp Int Int Int
+                        | QuadStackOp Int Int Int Int
+ // -------------------------------------------------
+    rule <k> #exec [ UOP:UnStackOp   ] => #gas [ UOP , UOP W0          ] ~> UOP W0          ... </k> <wordStack> W0 : WS                => WS </wordStack>
+    rule <k> #exec [ BOP:BinStackOp  ] => #gas [ BOP , BOP W0 W1       ] ~> BOP W0 W1       ... </k> <wordStack> W0 : W1 : WS           => WS </wordStack>
+    rule <k> #exec [ TOP:TernStackOp ] => #gas [ TOP , TOP W0 W1 W2    ] ~> TOP W0 W1 W2    ... </k> <wordStack> W0 : W1 : W2 : WS      => WS </wordStack>
+    rule <k> #exec [ QOP:QuadStackOp ] => #gas [ QOP , QOP W0 W1 W2 W3 ] ~> QOP W0 W1 W2 W3 ... </k> <wordStack> W0 : W1 : W2 : W3 : WS => WS </wordStack>
+
+

StackOp is used for opcodes which require a large portion of the stack.

+
    syntax InternalOp ::= StackOp WordStack
+ // ---------------------------------------
+    rule <k> #exec [ SO:StackOp ] => #gas [ SO , SO WS ] ~> SO WS ... </k> <wordStack> WS </wordStack>
+
+

The CallOp opcodes all interperet their second argument as an address.

+
    syntax InternalOp ::= CallSixOp Int Int     Int Int Int Int
+                        | CallOp    Int Int Int Int Int Int Int
+ // -----------------------------------------------------------
+    rule <k> #exec [ CSO:CallSixOp ] => #gas [ CSO , CSO W0 W1    W2 W3 W4 W5 ] ~> CSO W0 W1    W2 W3 W4 W5 ... </k> <wordStack> W0 : W1 : W2 : W3 : W4 : W5 : WS      => WS </wordStack>
+    rule <k> #exec [ CO:CallOp     ] => #gas [ CO  , CO  W0 W1 W2 W3 W4 W5 W6 ] ~> CO  W0 W1 W2 W3 W4 W5 W6 ... </k> <wordStack> W0 : W1 : W2 : W3 : W4 : W5 : W6 : WS => WS </wordStack>
+
+

Address Conversion

+

Some opcodes require accessing elements of the state at different addresses. +We make sure the given arguments (to be interpreted as addresses) are with 160 bits ahead of time.

+
    syntax InternalOp ::= "#addr" "[" OpCode "]"
+ // --------------------------------------------
+    rule <k> #addr [ OP:OpCode ] => . ... </k>
+         <wordStack> (W0 => #addr(W0)) : _WS </wordStack>
+      requires isAddr1Op(OP)
+
+    rule <k> #addr [ OP:OpCode ] => . ... </k>
+         <wordStack> _W0 : (W1 => #addr(W1)) : _WS </wordStack>
+      requires isAddr2Op(OP)
+
+    rule <k> #addr [ OP:OpCode ] => . ... </k>
+      requires notBool ( isAddr1Op(OP) orBool isAddr2Op(OP) )
+
+    syntax Bool ::= isAddr1Op ( OpCode ) [function, total]
+                  | isAddr2Op ( OpCode ) [function, total]
+ // ------------------------------------------------------
+    rule isAddr1Op(BALANCE)      => true
+    rule isAddr1Op(SELFDESTRUCT) => true
+    rule isAddr1Op(EXTCODEHASH)  => true
+    rule isAddr1Op(EXTCODESIZE)  => true
+    rule isAddr1Op(EXTCODECOPY)  => true
+    rule isAddr1Op(_)            => false [owise]
+
+    rule isAddr2Op(_:CallOp)    => true
+    rule isAddr2Op(_:CallSixOp) => true
+    rule isAddr2Op(_)           => false [owise]
+
+

Program Counter

+

All operators except for PUSH and JUMP* increment the program counter by 1. +The arguments to PUSH must be skipped over (as they are inline), and the opcode JUMP already affects the program counter in the correct way.

+
    +
  • #pc calculates the next program counter of the given operator.
  • +
+
    syntax InternalOp ::= "#pc" "[" OpCode "]"
+ // ------------------------------------------
+    rule <k> #pc [ OP ] => . ... </k>
+         <pc> PCOUNT => PCOUNT +Int #widthOp(OP) </pc>
+
+    syntax Int ::= #widthOp ( OpCode ) [function, total]
+ // ----------------------------------------------------
+    rule #widthOp(PUSH(N)) => 1 +Int N
+    rule #widthOp(_)       => 1        [owise]
+
+

After executing a transaction, it's necessary to have the effect of the substate log recorded.

+
    +
  • #finalizeStorage updates the origStorage cell with the new values of storage.
  • +
  • #finalizeTx makes the substate log actually have an effect on the state.
  • +
  • #deleteAccounts deletes the accounts specified by the self destruct list.
  • +
+
    syntax InternalOp ::= #finalizeStorage ( List )
+ // -----------------------------------------------
+    rule <k> #finalizeStorage(ListItem(ACCT) REST => REST) ... </k>
+         <account>
+           <acctID> ACCT </acctID>
+           <storage> STORAGE </storage>
+           <origStorage> _ => STORAGE </origStorage>
+           ...
+         </account>
+
+    rule <k> #finalizeStorage(.List) => . ... </k>
+
+    rule <k> (.K => #newAccount ACCT) ~> #finalizeStorage(ListItem(ACCT) _ACCTS) ... </k> [owise]
+
+    syntax InternalOp ::= #finalizeTx ( Bool )
+                        | #deleteAccounts ( List )
+ // ----------------------------------------------
+    rule <k> #finalizeTx(true) => #finalizeStorage(Set2List(SetItem(MINER) |Set ACCTS)) ... </k>
+         <selfDestruct> .Set </selfDestruct>
+         <coinbase> MINER </coinbase>
+         <touchedAccounts> ACCTS </touchedAccounts>
+         <accessedAccounts> _ => .Set </accessedAccounts>
+         <accessedStorage> _ => .Map </accessedStorage>
+
+    rule <k> #finalizeTx(false) ... </k>
+         <schedule> SCHED </schedule>
+         <gas> GAVAIL => G*(GAVAIL, GLIMIT, REFUND, SCHED) </gas>
+         <refund> REFUND => 0 </refund>
+         <txPending> ListItem(MSGID:Int) ... </txPending>
+         <message>
+            <msgID> MSGID </msgID>
+            <txGasLimit> GLIMIT </txGasLimit>
+            ...
+         </message>
+      requires REFUND =/=Int 0
+
+    rule <k> #finalizeTx(false => true) ... </k>
+         <baseFee> BFEE </baseFee>
+         <origin> ORG </origin>
+         <coinbase> MINER </coinbase>
+         <gas> GAVAIL </gas>
+         <gasUsed> GUSED => GUSED +Gas GLIMIT -Gas GAVAIL </gasUsed>
+         <gasPrice> GPRICE </gasPrice>
+         <refund> 0 </refund>
+         <account>
+           <acctID> ORG </acctID>
+           <balance> ORGBAL => ORGBAL +Int GAVAIL *Int GPRICE </balance>
+           ...
+         </account>
+         <account>
+           <acctID> MINER </acctID>
+           <balance> MINBAL => MINBAL +Int (GLIMIT -Int GAVAIL) *Int (GPRICE -Int BFEE) </balance>
+           ...
+         </account>
+         <txPending> ListItem(TXID:Int) REST => REST </txPending>
+         <message>
+           <msgID> TXID </msgID>
+           <txGasLimit> GLIMIT </txGasLimit>
+           ...
+         </message>
+      requires ORG =/=Int MINER
+
+    rule <k> #finalizeTx(false => true) ... </k>
+         <baseFee> BFEE </baseFee>
+         <origin> ACCT </origin>
+         <coinbase> ACCT </coinbase>
+         <gas> GAVAIL </gas>
+         <gasUsed> GUSED => GUSED +Gas GLIMIT -Gas GAVAIL </gasUsed>
+         <gasPrice> GPRICE </gasPrice>
+         <refund> 0 </refund>
+         <account>
+           <acctID> ACCT </acctID>
+           <balance> BAL => BAL +Int GLIMIT *Int (GPRICE -Int BFEE) </balance>
+           ...
+         </account>
+         <txPending> ListItem(MsgId:Int) REST => REST </txPending>
+         <message>
+           <msgID> MsgId </msgID>
+           <txGasLimit> GLIMIT </txGasLimit>
+           ...
+         </message>
+
+    rule <k> (. => #deleteAccounts(Set2List(ACCTS))) ~> #finalizeTx(true) ... </k>
+         <selfDestruct> ACCTS => .Set </selfDestruct>
+      requires size(ACCTS) >Int 0
+
+    rule <k> (. => #newAccount MINER) ~> #finalizeTx(_) ... </k>
+         <coinbase> MINER </coinbase> [owise]
+
+    rule <k> #deleteAccounts(ListItem(ACCT) ACCTS) => #deleteAccounts(ACCTS) ... </k>
+         <accounts>
+           ( <account>
+               <acctID> ACCT </acctID>
+               ...
+             </account>
+          => .Bag
+           )
+           ...
+         </accounts>
+
+    rule <k> #deleteAccounts(.List) => . ... </k>
+
+

Block processing

+
    +
  • #startBlock is used to signal that we are about to start mining a block and block initialization should take place (before transactions are executed).
  • +
  • #finalizeBlock is used to signal that block finalization procedures should take place (after transactions have executed).
  • +
  • #rewardOmmers(_) pays out the reward to uncle blocks so that blocks are orphaned less often in Ethereum.
  • +
+
    syntax EthereumCommand ::= "#startBlock"
+ // ----------------------------------------
+    rule <k> #startBlock => . ... </k>
+         <gasUsed> _ => 0 </gasUsed>
+         <log> _ => .List </log>
+         <logsBloom> _ => #padToWidth(256, .Bytes) </logsBloom>
+
+    syntax EthereumCommand ::= "#finalizeBlock" | #rewardOmmers ( JSONs )
+ // ---------------------------------------------------------------------
+    rule <k> #finalizeBlock => #rewardOmmers(OMMERS) ... </k>
+         <schedule> SCHED </schedule>
+         <ommerBlockHeaders> [ OMMERS ] </ommerBlockHeaders>
+         <coinbase> MINER </coinbase>
+         <account>
+           <acctID> MINER </acctID>
+           <balance> MINBAL => MINBAL +Int Rb < SCHED > </balance>
+           ...
+         </account>
+         <log> LOGS </log>
+         <logsBloom> _ => #bloomFilter(LOGS) </logsBloom>
+
+    rule <k> (.K => #newAccount MINER) ~> #finalizeBlock ... </k>
+         <coinbase> MINER </coinbase> [owise]
+
+    rule <k> #rewardOmmers(.JSONs) => . ... </k>
+    rule <k> #rewardOmmers([ _ , _ , OMMER , _ , _ , _ , _ , _ , OMMNUM , _ ] , REST) => #rewardOmmers(REST) ... </k>
+         <schedule> SCHED </schedule>
+         <coinbase> MINER </coinbase>
+         <number> CURNUM </number>
+         <account>
+           <acctID> MINER </acctID>
+           <balance> MINBAL => MINBAL +Int Rb < SCHED > /Int 32 </balance>
+          ...
+         </account>
+         <account>
+           <acctID> OMMER </acctID>
+           <balance> OMMBAL => OMMBAL +Int Rb < SCHED > +Int (OMMNUM -Int CURNUM) *Int (Rb < SCHED > /Int 8) </balance>
+          ...
+         </account>
+
+    syntax Bytes ::= #bloomFilter(List)      [function]
+                   | #bloomFilter(List, Int) [function, klabel(#bloomFilterAux)]
+ // ----------------------------------------------------------------------------
+    rule #bloomFilter(L) => #bloomFilter(L, 0)
+
+    rule #bloomFilter(.List, B) => #padToWidth(256, #asByteStack(B))
+    rule #bloomFilter(ListItem({ ACCT | TOPICS | _ }) L, B) => #bloomFilter(ListItem(#padToWidth(20, #asByteStack(ACCT))) listAsBytes(TOPICS) L, B)
+
+    syntax List ::= listAsBytes(List) [function]
+ // --------------------------------------------
+    rule listAsBytes(.List) => .List
+    rule listAsBytes(ListItem(TOPIC) L) => ListItem(#padToWidth(32, #asByteStack(TOPIC))) listAsBytes(L)
+
+    rule #bloomFilter(ListItem(WS:Bytes) L, B) => #bloomFilter(L, B |Int M3:2048(WS))
+
+
    +
  • M3:2048 computes the 2048-bit hash of a log entry in which exactly 3 bits are set. This is used to compute the Bloom filter of a log entry.
  • +
+
    syntax Int ::= "M3:2048" "(" Bytes ")" [function]
+ // -------------------------------------------------
+    rule M3:2048(WS) => setBloomFilterBits(#parseByteStack(Keccak256(#unparseByteStack(WS))))
+
+    syntax Int ::= setBloomFilterBits(Bytes) [function]
+ // ---------------------------------------------------
+    rule setBloomFilterBits(HASH) => (1 <<Int getBloomFilterBit(HASH, 0)) |Int (1 <<Int getBloomFilterBit(HASH, 2)) |Int (1 <<Int getBloomFilterBit(HASH, 4))
+
+    syntax Int ::= getBloomFilterBit(Bytes, Int) [function]
+ // -------------------------------------------------------
+    rule getBloomFilterBit(X, I) => #asInteger(#range(X, I, 2)) %Int 2048
+
+

EVM Programs

+

EVM OpCodes

+

Internal Operations

+

These are just used by the other operators for shuffling local execution state around on the EVM.

+
    +
  • #push will push an element to the wordStack without any checks.
  • +
  • #setStack_ will set the current stack to the given one.
  • +
+
    syntax InternalOp ::= "#push" | "#setStack" WordStack
+ // -----------------------------------------------------
+    rule <k> W0:Int ~> #push => . ... </k> <wordStack> WS => W0 : WS </wordStack>
+    rule <k> #setStack WS    => . ... </k> <wordStack> _  => WS      </wordStack>
+
+
    +
  • #newAccount_ allows declaring a new empty account with the given address (and assumes the rounding to 160 bits has already occured). +If the account already exists with non-zero nonce or non-empty code, an exception is thrown. +Otherwise, if the account already exists, the storage is cleared.
  • +
+
    syntax InternalOp ::= "#newAccount" Int
+                        | "#newExistingAccount" Int
+                        | "#newFreshAccount" Int
+ // --------------------------------------------
+    rule <k> #newAccount ACCT => #newExistingAccount ACCT ... </k> <account> <acctID> ACCT </acctID> ... </account>
+    rule <k> #newAccount ACCT => #newFreshAccount ACCT    ... </k> [owise]
+
+    rule <k> #newExistingAccount ACCT => #end EVMC_ACCOUNT_ALREADY_EXISTS ... </k>
+         <account>
+           <acctID> ACCT  </acctID>
+           <code>   CODE  </code>
+           <nonce>  NONCE </nonce>
+           ...
+         </account>
+      requires CODE =/=K .Bytes orBool NONCE =/=Int 0
+
+    rule <k> #newExistingAccount ACCT => . ... </k>
+         <account>
+           <acctID>      ACCT      </acctID>
+           <code>        CODE      </code>
+           <nonce>       0         </nonce>
+           <storage>     _ => .Map </storage>
+           <origStorage> _ => .Map </origStorage>
+           ...
+         </account>
+      requires lengthBytes(CODE) ==Int 0
+
+    rule <k> #newFreshAccount ACCT => . ... </k>
+         <accounts>
+           ( .Bag
+          => <account>
+               <acctID> ACCT </acctID>
+               ...
+             </account>
+           )
+           ...
+         </accounts>
+
+
    +
  • #transferFunds moves money from one account into another, creating the destination account if it doesn't exist.
  • +
+
    syntax InternalOp ::= "#transferFunds" Int Int Int
+                        | "#transferFundsToNonExistent" Int Int Int
+ // ---------------------------------------------------------------
+    rule <k> #transferFunds ACCT ACCT VALUE => . ... </k>
+         <account>
+           <acctID> ACCT </acctID>
+           <balance> ORIGFROM </balance>
+           ...
+         </account>
+      requires VALUE <=Int ORIGFROM
+
+    rule <k> #transferFunds ACCTFROM ACCTTO VALUE => . ... </k>
+         <account>
+           <acctID> ACCTFROM </acctID>
+           <balance> ORIGFROM => ORIGFROM -Word VALUE </balance>
+           ...
+         </account>
+         <account>
+           <acctID> ACCTTO </acctID>
+           <balance> ORIGTO => ORIGTO +Word VALUE </balance>
+           ...
+         </account>
+      requires ACCTFROM =/=K ACCTTO andBool VALUE <=Int ORIGFROM
+
+    rule <k> #transferFunds ACCTFROM _ACCTTO VALUE => #end EVMC_BALANCE_UNDERFLOW ... </k>
+         <account>
+           <acctID> ACCTFROM </acctID>
+           <balance> ORIGFROM </balance>
+           ...
+         </account>
+      requires VALUE >Int ORIGFROM
+
+    rule <k> #transferFunds ACCTFROM ACCTTO VALUE => #transferFundsToNonExistent ACCTFROM ACCTTO VALUE ... </k> [owise]
+
+    rule <k> #transferFundsToNonExistent ACCTFROM ACCTTO VALUE => #newAccount ACCTTO ~> #transferFunds ACCTFROM ACCTTO VALUE ... </k>
+         <schedule> SCHED </schedule>
+      requires ACCTFROM =/=K ACCTTO
+       andBool (VALUE >Int 0 orBool notBool Gemptyisnonexistent << SCHED >>)
+
+    rule <k> #transferFundsToNonExistent ACCTFROM ACCTTO 0 => . ... </k>
+         <schedule> SCHED </schedule>
+      requires ACCTFROM =/=K ACCTTO
+       andBool Gemptyisnonexistent << SCHED >>
+
+

Invalid Operator

+

We use INVALID both for marking the designated invalid operator, and UNDEFINED(_) for garbage bytes in the input program.

+
    syntax InvalidOp ::= "INVALID" | "UNDEFINED" "(" Int ")"
+ // --------------------------------------------------------
+    rule <k> INVALID      => #end EVMC_INVALID_INSTRUCTION   ... </k>
+    rule <k> UNDEFINED(_) => #end EVMC_UNDEFINED_INSTRUCTION ... </k>
+
+

Stack Manipulations

+

Some operators don't calculate anything, they just push the stack around a bit.

+
    syntax UnStackOp ::= "POP"
+ // --------------------------
+    rule <k> POP _ => . ... </k>
+
+    syntax StackOp ::= DUP ( Int ) | SWAP ( Int )
+ // ---------------------------------------------
+    rule <k> DUP(N)  WS:WordStack => #setStack ((WS [ N -Int 1 ]) : WS)                      ... </k>
+    rule <k> SWAP(N) (W0 : WS)    => #setStack ((WS [ N -Int 1 ]) : (WS [ N -Int 1 := W0 ])) ... </k>
+
+    syntax PushOp ::= PUSH ( Int )
+ // ------------------------------
+    rule <k> PUSH(N) => #asWord(#range(PGM, PCOUNT +Int 1, N)) ~> #push ... </k>
+         <pc> PCOUNT </pc>
+         <program> PGM </program>
+
+

Local Memory

+

These operations are getters/setters of the local execution memory.

+
    syntax UnStackOp ::= "MLOAD"
+ // ----------------------------
+    rule <k> MLOAD INDEX => #asWord(#range(LM, INDEX, 32)) ~> #push ... </k>
+         <localMem> LM </localMem>
+
+    syntax BinStackOp ::= "MSTORE" | "MSTORE8"
+ // ------------------------------------------
+    rule <k> MSTORE INDEX VALUE => . ... </k>
+         <localMem> LM => LM [ INDEX := #padToWidth(32, #asByteStack(VALUE)) ] </localMem>
+
+    rule <k> MSTORE8 INDEX VALUE => . ... </k>
+         <localMem> LM => #write(LM, INDEX, (VALUE modInt 256)) </localMem>
+
+

Expressions

+

Expression calculations are simple and don't require anything but the arguments from the wordStack to operate.

+

NOTE: We have to call the opcode OR by EVMOR instead, because K has trouble parsing it/compiling the definition otherwise.

+
    syntax UnStackOp ::= "ISZERO" | "NOT"
+ // -------------------------------------
+    rule <k> ISZERO W => W ==Word 0 ~> #push ... </k>
+    rule <k> NOT    W => ~Word W    ~> #push ... </k>
+
+    syntax BinStackOp ::= "ADD" | "MUL" | "SUB" | "DIV" | "EXP" | "MOD"
+ // -------------------------------------------------------------------
+    rule <k> ADD W0 W1 => W0 +Word W1 ~> #push ... </k>
+    rule <k> MUL W0 W1 => W0 *Word W1 ~> #push ... </k>
+    rule <k> SUB W0 W1 => W0 -Word W1 ~> #push ... </k>
+    rule <k> DIV W0 W1 => W0 /Word W1 ~> #push ... </k>
+    rule <k> EXP W0 W1 => W0 ^Word W1 ~> #push ... </k>
+    rule <k> MOD W0 W1 => W0 %Word W1 ~> #push ... </k>
+
+    syntax BinStackOp ::= "SDIV" | "SMOD"
+ // -------------------------------------
+    rule <k> SDIV W0 W1 => W0 /sWord W1 ~> #push ... </k>
+    rule <k> SMOD W0 W1 => W0 %sWord W1 ~> #push ... </k>
+
+    syntax TernStackOp ::= "ADDMOD" | "MULMOD"
+ // ------------------------------------------
+    rule <k> ADDMOD W0 W1 W2 => (W0 +Int W1) %Word W2 ~> #push ... </k>
+    rule <k> MULMOD W0 W1 W2 => (W0 *Int W1) %Word W2 ~> #push ... </k>
+
+    syntax BinStackOp ::= "BYTE" | "SIGNEXTEND"
+ // -------------------------------------------
+    rule <k> BYTE INDEX W     => byte(INDEX, W)     ~> #push ... </k>
+    rule <k> SIGNEXTEND W0 W1 => signextend(W0, W1) ~> #push ... </k>
+
+    syntax BinStackOp ::= "SHL" | "SHR" | "SAR"
+ // -------------------------------------------
+    rule <k> SHL W0 W1 => W1 <<Word  W0 ~> #push ... </k>
+    rule <k> SHR W0 W1 => W1 >>Word  W0 ~> #push ... </k>
+    rule <k> SAR W0 W1 => W1 >>sWord W0 ~> #push ... </k>
+
+    syntax BinStackOp ::= "AND" | "EVMOR" | "XOR"
+ // ---------------------------------------------
+    rule <k> AND   W0 W1 => W0 &Word W1   ~> #push ... </k>
+    rule <k> EVMOR W0 W1 => W0 |Word W1   ~> #push ... </k>
+    rule <k> XOR   W0 W1 => W0 xorWord W1 ~> #push ... </k>
+
+    syntax BinStackOp ::= "LT" | "GT" | "EQ"
+ // ----------------------------------------
+    rule <k> LT W0 W1 => W0 <Word  W1 ~> #push ... </k>
+    rule <k> GT W0 W1 => W0 >Word  W1 ~> #push ... </k>
+    rule <k> EQ W0 W1 => W0 ==Word W1 ~> #push ... </k>
+
+    syntax BinStackOp ::= "SLT" | "SGT"
+ // -----------------------------------
+    rule <k> SLT W0 W1 => W0 s<Word W1 ~> #push ... </k>
+    rule <k> SGT W0 W1 => W1 s<Word W0 ~> #push ... </k>
+
+    syntax BinStackOp ::= "SHA3"
+ // ----------------------------
+    rule <k> SHA3 MEMSTART MEMWIDTH => keccak(#range(LM, MEMSTART, MEMWIDTH)) ~> #push ... </k>
+         <localMem> LM </localMem>
+
+

Local State

+

These operators make queries about the current execution state.

+
    syntax NullStackOp ::= "PC" | "GAS" | "GASPRICE" | "GASLIMIT" | "BASEFEE"
+ // -------------------------------------------------------------------------
+    rule <k> PC       => PCOUNT          ~> #push ... </k> <pc> PCOUNT </pc>
+    rule <k> GAS      => gas2Int(GAVAIL) ~> #push ... </k> <gas> GAVAIL </gas>
+    rule <k> GASPRICE => GPRICE          ~> #push ... </k> <gasPrice> GPRICE </gasPrice>
+    rule <k> GASLIMIT => GLIMIT          ~> #push ... </k> <gasLimit> GLIMIT </gasLimit>
+    rule <k> BASEFEE  => BFEE            ~> #push ... </k> <baseFee> BFEE </baseFee>
+
+    syntax NullStackOp ::= "COINBASE" | "TIMESTAMP" | "NUMBER" | "DIFFICULTY" | "PREVRANDAO"
+ // ----------------------------------------------------------------------------------------
+    rule <k> COINBASE   => CB   ~> #push ... </k> <coinbase> CB </coinbase>
+    rule <k> TIMESTAMP  => TS   ~> #push ... </k> <timestamp> TS </timestamp>
+    rule <k> NUMBER     => NUMB ~> #push ... </k> <number> NUMB </number>
+    rule <k> DIFFICULTY => DIFF ~> #push ... </k> <difficulty> DIFF </difficulty>
+    rule <k> PREVRANDAO => RDAO ~> #push ... </k> <mixHash> RDAO </mixHash>
+
+    syntax NullStackOp ::= "ADDRESS" | "ORIGIN" | "CALLER" | "CALLVALUE" | "CHAINID" | "SELFBALANCE"
+ // ------------------------------------------------------------------------------------------------
+    rule <k> ADDRESS     => ACCT ~> #push ... </k> <id> ACCT </id>
+    rule <k> ORIGIN      => ORG  ~> #push ... </k> <origin> ORG </origin>
+    rule <k> CALLER      => CL   ~> #push ... </k> <caller> CL </caller>
+    rule <k> CALLVALUE   => CV   ~> #push ... </k> <callValue> CV </callValue>
+    rule <k> CHAINID     => CID  ~> #push ... </k> <chainID> CID </chainID>
+    rule <k> SELFBALANCE => BAL  ~> #push ... </k>
+         <id> ACCT </id>
+         <account>
+            <acctID> ACCT </acctID>
+            <balance> BAL </balance>
+            ...
+         </account>
+
+    syntax NullStackOp ::= "MSIZE" | "CODESIZE"
+ // -------------------------------------------
+    rule <k> MSIZE    => 32 *Word MU         ~> #push ... </k> <memoryUsed> MU </memoryUsed>
+    rule <k> CODESIZE => lengthBytes(PGM) ~> #push ... </k> <program> PGM </program>
+
+    syntax TernStackOp ::= "CODECOPY"
+ // ---------------------------------
+    rule <k> CODECOPY MEMSTART PGMSTART WIDTH => . ... </k>
+         <program> PGM </program>
+         <localMem> LM =>  LM [ MEMSTART := #range(PGM, PGMSTART, WIDTH) ] </localMem>
+
+    syntax UnStackOp ::= "BLOCKHASH"
+ // --------------------------------
+
+

When running as a node, the blockhash will be retrieved from the running client. +Otherwise, it is calculated here using the "shortcut" formula used for running tests.

+
    rule <k> BLOCKHASH N => #blockhash(HASHES, N, HI -Int 1, 0) ~> #push ... </k>
+         <number>      HI     </number>
+         <blockhashes> HASHES </blockhashes>
+
+    syntax Int ::= #blockhash ( List , Int , Int , Int ) [function]
+ // ---------------------------------------------------------------
+    rule #blockhash(_, N, HI, _) => 0 requires N >Int HI
+    rule #blockhash(_, _, _, 256) => 0
+    rule #blockhash(ListItem(0) _, _, _, _) => 0
+    rule #blockhash(ListItem(H) _, N, N, _) => H
+    rule #blockhash(ListItem(_) L, N, HI, A) => #blockhash(L, N, HI -Int 1, A +Int 1) [owise]
+
+

EVM OpCodes

+

EVM Control Flow

+

The JUMP* family of operations affect the current program counter.

+
    syntax NullStackOp ::= "JUMPDEST"
+ // ---------------------------------
+    rule <k> JUMPDEST => . ... </k>
+
+    syntax UnStackOp ::= "JUMP"
+ // ---------------------------
+    rule <k> JUMP DEST => #endBasicBlock... </k>
+         <pc> _ => DEST </pc>
+         <jumpDests> DESTS </jumpDests>
+      requires DEST in DESTS
+
+    rule <k> JUMP DEST => #end EVMC_BAD_JUMP_DESTINATION ... </k>
+         <jumpDests> DESTS </jumpDests>
+      requires notBool DEST in DESTS
+
+    syntax BinStackOp ::= "JUMPI"
+ // -----------------------------
+    rule [jumpi.false]: <k> JUMPI _DEST I => .         ... </k> requires I  ==Int 0
+    rule [jumpi.true]:  <k> JUMPI  DEST I => JUMP DEST ... </k> requires I =/=Int 0
+
+    syntax InternalOp ::= "#endBasicBlock"
+ // --------------------------------------
+    rule <k> #endBasicBlock ~> (_:OpCode => .) ... </k>
+    rule <k> (#endBasicBlock => .) ~> #execute ... </k>
+
+

STOP, REVERT, and RETURN

+
    syntax NullStackOp ::= "STOP"
+ // -----------------------------
+    rule <k> STOP => #end EVMC_SUCCESS ... </k>
+         <output> _ => .Bytes </output>
+
+    syntax BinStackOp ::= "RETURN"
+ // ------------------------------
+    rule <k> RETURN RETSTART RETWIDTH => #end EVMC_SUCCESS ... </k>
+         <output> _ => #range(LM, RETSTART, RETWIDTH) </output>
+         <localMem> LM </localMem>
+
+    syntax BinStackOp ::= "REVERT"
+ // ------------------------------
+    rule <k> REVERT RETSTART RETWIDTH => #end EVMC_REVERT ... </k>
+         <output> _ => #range(LM, RETSTART, RETWIDTH) </output>
+         <localMem> LM </localMem>
+
+

Call Data

+

These operators query about the current CALL* state.

+
    syntax NullStackOp ::= "CALLDATASIZE"
+ // -------------------------------------
+    rule <k> CALLDATASIZE => lengthBytes(CD) ~> #push ... </k>
+         <callData> CD </callData>
+
+    syntax UnStackOp ::= "CALLDATALOAD"
+ // -----------------------------------
+    rule <k> CALLDATALOAD DATASTART => #asWord(#range(CD, DATASTART, 32)) ~> #push ... </k>
+         <callData> CD </callData>
+
+    syntax TernStackOp ::= "CALLDATACOPY"
+ // -------------------------------------
+    rule <k> CALLDATACOPY MEMSTART DATASTART DATAWIDTH => . ... </k>
+         <localMem> LM => LM [ MEMSTART := #range(CD, DATASTART, DATAWIDTH) ] </localMem>
+         <callData> CD </callData>
+
+

Return Data

+

These operators query about the current return data buffer.

+
    syntax NullStackOp ::= "RETURNDATASIZE"
+ // ---------------------------------------
+    rule <k> RETURNDATASIZE => lengthBytes(RD) ~> #push ... </k>
+         <output> RD </output>
+
+    syntax TernStackOp ::= "RETURNDATACOPY"
+ // ----------------------------------------
+    rule <k> RETURNDATACOPY MEMSTART DATASTART DATAWIDTH => . ... </k>
+         <localMem> LM => LM [ MEMSTART := #range(RD, DATASTART, DATAWIDTH) ] </localMem>
+         <output> RD </output>
+      requires DATASTART +Int DATAWIDTH <=Int lengthBytes(RD)
+
+    rule <k> RETURNDATACOPY _MEMSTART DATASTART DATAWIDTH => #end EVMC_INVALID_MEMORY_ACCESS ... </k>
+         <output> RD </output>
+      requires DATASTART +Int DATAWIDTH >Int lengthBytes(RD)
+
+

Log Operations

+
    syntax BinStackOp ::= LogOp
+    syntax LogOp ::= LOG ( Int )
+ // ----------------------------
+    rule <k> LOG(N) MEMSTART MEMWIDTH => . ... </k>
+         <id> ACCT </id>
+         <wordStack> WS => #drop(N, WS) </wordStack>
+         <localMem> LM </localMem>
+         <log> L => L ListItem({ ACCT | WordStack2List(#take(N, WS)) | #range(LM, MEMSTART, MEMWIDTH) }) </log>
+      requires #sizeWordStack(WS) >=Int N
+
+

Ethereum Network OpCodes

+

Operators that require access to the rest of the Ethereum network world-state can be taken as a first draft of a "blockchain generic" language.

+

Account Queries

+
    syntax UnStackOp ::= "BALANCE"
+ // ------------------------------
+    rule <k> BALANCE ACCT => BAL ~> #push ... </k>
+         <account>
+           <acctID> ACCT </acctID>
+           <balance> BAL </balance>
+           ...
+         </account>
+
+    rule <k> BALANCE _ => 0 ~> #push ... </k> [owise]
+
+    syntax UnStackOp ::= "EXTCODESIZE"
+ // ----------------------------------
+    rule <k> EXTCODESIZE ACCT => lengthBytes(CODE) ~> #push ... </k>
+         <account>
+           <acctID> ACCT </acctID>
+           <code> CODE </code>
+           ...
+         </account>
+
+    rule <k> EXTCODESIZE _ => 0 ~> #push ... </k> [owise]
+
+    syntax UnStackOp ::= "EXTCODEHASH"
+ // ----------------------------------
+    rule <k> EXTCODEHASH ACCT => keccak(CODE) ~> #push ... </k>
+         <account>
+           <acctID> ACCT </acctID>
+           <code> CODE:Bytes </code>
+           <nonce> NONCE </nonce>
+           <balance> BAL </balance>
+           ...
+         </account>
+      requires notBool #accountEmpty(CODE, NONCE, BAL)
+
+    rule <k> EXTCODEHASH _ => 0 ~> #push ... </k> [owise]
+
+    syntax QuadStackOp ::= "EXTCODECOPY"
+ // ------------------------------------
+    rule <k> EXTCODECOPY ACCT MEMSTART PGMSTART WIDTH => . ... </k>
+         <localMem> LM => LM [ MEMSTART := #range(PGM, PGMSTART, WIDTH) ] </localMem>
+         <account>
+           <acctID> ACCT </acctID>
+           <code> PGM </code>
+           ...
+         </account>
+
+    rule <k> EXTCODECOPY _ MEMSTART _ WIDTH => . ... </k>
+         <localMem> LM => LM [ MEMSTART := #padToWidth(WIDTH, .Bytes) ] </localMem> [owise]
+
+

Account Storage Operations

+

These rules reach into the network state and load/store from account storage:

+
    syntax UnStackOp ::= "SLOAD"
+ // ----------------------------
+    rule <k> SLOAD INDEX => #lookup(STORAGE, INDEX) ~> #push ... </k>
+         <id> ACCT </id>
+         <account>
+           <acctID> ACCT </acctID>
+           <storage> STORAGE </storage>
+           ...
+         </account>
+
+    syntax BinStackOp ::= "SSTORE"
+ // ------------------------------
+    rule <k> SSTORE INDEX NEW => . ... </k>
+         <id> ACCT </id>
+         <account>
+           <acctID> ACCT </acctID>
+           <storage> STORAGE => STORAGE [ INDEX <- NEW ] </storage>
+           ...
+         </account>
+
+

Call Operations

+

The various CALL* (and other inter-contract control flow) operations will be desugared into these InternalOps.

+
    +
  • +

    The callLog is used to store the CALL*/CREATE operations so that we can compare them against the test-set.

    +
  • +
  • +

    #call_____ takes the calling account, the account to execute as, the account whose code should execute, the gas limit, the amount to transfer, the arguments, and the static flag.

    +
  • +
  • +

    #callWithCode______ takes the calling account, the accout to execute as, the code to execute (as a Bytes), the gas limit, the amount to transfer, the arguments, and the static flag.

    +
  • +
  • +

    #return__ is a placeholder for the calling program, specifying where to place the returned data in memory.

    +
  • +
+
    syntax InternalOp ::= "#checkCall" Int Int
+                        | "#call"         Int Int Int Int Int Bytes Bool
+                        | "#callWithCode" Int Int Int Bytes Int Int Bytes Bool
+                        | "#mkCall"       Int Int Int Bytes     Int Bytes Bool
+ // --------------------------------------------------------------------------
+    rule <k> #checkCall ACCT VALUE
+          => #refund GCALL ~> #pushCallStack ~> #pushWorldState
+          ~> #end #if VALUE >Int BAL #then EVMC_BALANCE_UNDERFLOW #else #if CD >=Int 1024 #then EVMC_CALL_DEPTH_EXCEEDED #else EVMC_NONCE_EXCEEDED #fi #fi
+         ...
+         </k>
+         <callDepth> CD </callDepth>
+         <output> _ => .Bytes </output>
+         <account>
+           <acctID> ACCT </acctID>
+           <balance> BAL </balance>
+           <nonce> NONCE </nonce>
+           ...
+         </account>
+         <callGas> GCALL </callGas>
+      requires VALUE >Int BAL orBool CD >=Int 1024 orBool notBool #rangeNonce(NONCE)
+
+     rule <k> #checkCall ACCT VALUE => . ... </k>
+         <callDepth> CD </callDepth>
+         <account>
+           <acctID> ACCT </acctID>
+           <balance> BAL </balance>
+           <nonce> NONCE </nonce>
+           ...
+         </account>
+      requires notBool (VALUE >Int BAL orBool CD >=Int 1024 orBool notBool #rangeNonce(NONCE))
+
+    rule <k> #call ACCTFROM ACCTTO ACCTCODE VALUE APPVALUE ARGS STATIC
+          => #callWithCode ACCTFROM ACCTTO ACCTCODE CODE VALUE APPVALUE ARGS STATIC
+         ...
+         </k>
+         <account>
+           <acctID> ACCTCODE </acctID>
+           <code> CODE </code>
+           ...
+         </account>
+
+    rule <k> #call ACCTFROM ACCTTO ACCTCODE VALUE APPVALUE ARGS STATIC
+          => #callWithCode ACCTFROM ACCTTO ACCTCODE .Bytes VALUE APPVALUE ARGS STATIC
+         ...
+         </k> [owise]
+
+    rule <k> #callWithCode ACCTFROM ACCTTO ACCTCODE BYTES VALUE APPVALUE ARGS STATIC
+          => #pushCallStack ~> #pushWorldState
+          ~> #transferFunds ACCTFROM ACCTTO VALUE
+          ~> #mkCall ACCTFROM ACCTTO ACCTCODE BYTES APPVALUE ARGS STATIC
+         ...
+         </k>
+
+    rule <k> #mkCall ACCTFROM ACCTTO ACCTCODE BYTES APPVALUE ARGS STATIC:Bool
+          => #touchAccounts ACCTFROM ACCTTO ~> #accessAccounts ACCTFROM ACCTTO ~> #loadProgram BYTES ~> #initVM ~> #precompiled?(ACCTCODE, SCHED) ~> #execute
+         ...
+         </k>
+         <callDepth> CD => CD +Int 1 </callDepth>
+         <callData> _ => ARGS </callData>
+         <callValue> _ => APPVALUE </callValue>
+         <id> _ => ACCTTO </id>
+         <gas> _ => GCALL </gas>
+         <callGas> GCALL => 0 </callGas>
+         <caller> _ => ACCTFROM </caller>
+         <static> OLDSTATIC:Bool => OLDSTATIC orBool STATIC </static>
+         <schedule> SCHED </schedule>
+
+    syntax InternalOp ::= "#precompiled?" "(" Int "," Schedule ")"
+ // --------------------------------------------------------------
+    rule <k> #precompiled?(ACCTCODE, SCHED) => #next [ #precompiled(ACCTCODE) ] ... </k> requires         #isPrecompiledAccount(ACCTCODE, SCHED)
+      [preserves-definedness]
+    rule <k> #precompiled?(ACCTCODE, SCHED) => .                                ... </k> requires notBool #isPrecompiledAccount(ACCTCODE, SCHED)
+
+    syntax Bool ::= #isPrecompiledAccount ( Int , Schedule ) [function, total, smtlib(isPrecompiledAccount)]
+ // --------------------------------------------------------------------------------------------------------
+    rule [isPrecompiledAccount.true]:  #isPrecompiledAccount(ACCTCODE, SCHED) => true  requires         ACCTCODE in #precompiledAccounts(SCHED)
+    rule [isPrecompiledAccount.false]: #isPrecompiledAccount(ACCTCODE, SCHED) => false requires notBool ACCTCODE in #precompiledAccounts(SCHED)
+
+    syntax KItem ::= "#initVM"
+ // --------------------------
+    rule <k> #initVM      => . ...      </k>
+         <pc>           _ => 0          </pc>
+         <memoryUsed>   _ => 0          </memoryUsed>
+         <output>       _ => .Bytes     </output>
+         <wordStack>    _ => .WordStack </wordStack>
+         <localMem>     _ => .Bytes     </localMem>
+
+    syntax KItem ::= "#loadProgram" Bytes
+ // -------------------------------------
+    rule <k> #loadProgram BYTES => . ... </k>
+         <program> _ => BYTES </program>
+         <jumpDests> _ => #computeValidJumpDests(BYTES) </jumpDests>
+
+    syntax KItem ::= "#touchAccounts" Account | "#touchAccounts" Account Account
+ // ----------------------------------------------------------------------------
+    rule <k> #touchAccounts ADDR1 ADDR2 => #touchAccounts ADDR1 ~> #touchAccounts ADDR2 ... </k>
+
+    rule <k> #touchAccounts ADDR => . ... </k>
+         <touchedAccounts> TOUCHED_ACCOUNTS => TOUCHED_ACCOUNTS |Set SetItem(ADDR) </touchedAccounts>
+
+    syntax KItem ::= "#accessStorage" Account Int
+ // --------------------------------------------
+    rule <k> #accessStorage ACCT INDEX => . ... </k>
+         <accessedStorage> ... ACCT |-> (TS:Set => TS |Set SetItem(INDEX)) ... </accessedStorage>
+    rule <k> #accessStorage ACCT INDEX => . ... </k>
+         <accessedStorage> TS => TS[ACCT <- SetItem(INDEX)] </accessedStorage>
+      requires notBool ACCT in_keys(TS)
+
+    syntax KItem ::= "#accessAccounts" Account
+                   | "#accessAccounts" Set
+                   | "#accessAccounts" Account Account
+                   | "#accessAccounts" Account Account Set
+ // -----------------------------------------------------
+    rule <k> #accessAccounts ADDR1:Account ADDR2:Account ADDRSET:Set => #accessAccounts ADDR1 ~> #accessAccounts ADDR2 ~> #accessAccounts ADDRSET ... </k>
+
+    rule <k> #accessAccounts ADDR1:Account ADDR2:Account => #accessAccounts ADDR1 ~> #accessAccounts ADDR2 ... </k>
+
+    rule <k> #accessAccounts ADDR:Account => . ... </k>
+         <accessedAccounts> TOUCHED_ACCOUNTS => TOUCHED_ACCOUNTS |Set SetItem(ADDR) </accessedAccounts>
+
+    rule <k> #accessAccounts ADDRSET:Set => . ... </k>
+         <accessedAccounts> TOUCHED_ACCOUNTS => TOUCHED_ACCOUNTS |Set ADDRSET </accessedAccounts>
+
+    syntax Set ::= #computeValidJumpDests(Bytes)            [function, memo, total]
+                 | #computeValidJumpDests(Bytes, Int, List) [function, klabel(#computeValidJumpDestsAux)]
+ // -----------------------------------------------------------------------------------------------------
+    rule #computeValidJumpDests(PGM) => #computeValidJumpDests(PGM, 0, .List)
+
+    syntax Set ::= #computeValidJumpDestsWithinBound(Bytes, Int, List) [function]
+ // -----------------------------------------------------------------------------
+    rule #computeValidJumpDests(PGM, I, RESULT) => List2Set(RESULT) requires I >=Int lengthBytes(PGM)
+    rule #computeValidJumpDests(PGM, I, RESULT) => #computeValidJumpDestsWithinBound(PGM, I, RESULT) requires I <Int lengthBytes(PGM)
+
+    rule #computeValidJumpDestsWithinBound(PGM, I, RESULT) => #computeValidJumpDests(PGM, I +Int 1, RESULT ListItem(I)) requires PGM [ I ] ==Int 91
+    rule #computeValidJumpDestsWithinBound(PGM, I, RESULT) => #computeValidJumpDests(PGM, I +Int #widthOpCode(PGM [ I ]), RESULT) requires notBool PGM [ I ] ==Int 91
+
+
    syntax Int ::= #widthOpCode(Int) [function]
+ // -------------------------------------------
+    rule #widthOpCode(W) => W -Int 94 requires W >=Int 96 andBool W <=Int 127
+    rule #widthOpCode(_) => 1 [owise]
+
+    syntax KItem ::= "#return" Int Int
+ // ----------------------------------
+    rule [return.exception]:
+         <statusCode> _:ExceptionalStatusCode </statusCode>
+         <k> #halt ~> #return _ _
+          => #popCallStack ~> #popWorldState ~> 0 ~> #push
+         ...
+         </k>
+         <output> _ => .Bytes </output>
+
+    rule [return.revert]:
+         <statusCode> EVMC_REVERT </statusCode>
+         <k> #halt ~> #return RETSTART RETWIDTH
+          => #popCallStack ~> #popWorldState
+          ~> 0 ~> #push ~> #refund GAVAIL ~> #setLocalMem RETSTART RETWIDTH OUT
+         ...
+         </k>
+         <output> OUT </output>
+         <gas> GAVAIL </gas>
+
+    rule [return.success]:
+         <statusCode> EVMC_SUCCESS </statusCode>
+         <k> #halt ~> #return RETSTART RETWIDTH
+          => #popCallStack ~> #dropWorldState
+          ~> 1 ~> #push ~> #refund GAVAIL ~> #setLocalMem RETSTART RETWIDTH OUT
+         ...
+         </k>
+         <output> OUT </output>
+         <gas> GAVAIL </gas>
+
+    syntax InternalOp ::= "#refund" Gas
+                        | "#setLocalMem" Int Int Bytes
+ // --------------------------------------------------
+    rule [refund]: <k> #refund G:Gas => . ... </k> <gas> GAVAIL => GAVAIL +Gas G </gas>
+
+    rule <k> #setLocalMem START WIDTH WS => . ... </k>
+         <localMem> LM => LM [ START := #range(WS, 0, minInt(WIDTH, lengthBytes(WS))) ] </localMem>
+
+

Ethereum Network OpCodes

+

Call Operations

+

For each CALL* operation, we make a corresponding call to #call and a state-change to setup the custom parts of the calling environment.

+
    syntax CallOp ::= "CALL"
+ // ------------------------
+    rule [call]:
+         <k> CALL _GCAP ACCTTO VALUE ARGSTART ARGWIDTH RETSTART RETWIDTH
+          => #checkCall ACCTFROM VALUE
+          ~> #call ACCTFROM ACCTTO ACCTTO VALUE VALUE #range(LM, ARGSTART, ARGWIDTH) false
+          ~> #return RETSTART RETWIDTH
+         ...
+         </k>
+         <id> ACCTFROM </id>
+         <localMem> LM </localMem>
+
+    syntax CallOp ::= "CALLCODE"
+ // ----------------------------
+    rule [callcode]:
+         <k> CALLCODE _GCAP ACCTTO VALUE ARGSTART ARGWIDTH RETSTART RETWIDTH
+          => #checkCall ACCTFROM VALUE
+          ~> #call ACCTFROM ACCTFROM ACCTTO VALUE VALUE #range(LM, ARGSTART, ARGWIDTH) false
+          ~> #return RETSTART RETWIDTH
+         ...
+         </k>
+         <id> ACCTFROM </id>
+         <localMem> LM </localMem>
+
+    syntax CallSixOp ::= "DELEGATECALL"
+ // -----------------------------------
+    rule [delegatecall]:
+         <k> DELEGATECALL _GCAP ACCTTO ARGSTART ARGWIDTH RETSTART RETWIDTH
+          => #checkCall ACCTFROM 0
+          ~> #call ACCTAPPFROM ACCTFROM ACCTTO 0 VALUE #range(LM, ARGSTART, ARGWIDTH) false
+          ~> #return RETSTART RETWIDTH
+         ...
+         </k>
+         <id> ACCTFROM </id>
+         <caller> ACCTAPPFROM </caller>
+         <callValue> VALUE </callValue>
+         <localMem> LM </localMem>
+
+    syntax CallSixOp ::= "STATICCALL"
+ // ---------------------------------
+    rule [staticcall]:
+         <k> STATICCALL _GCAP ACCTTO ARGSTART ARGWIDTH RETSTART RETWIDTH
+          => #checkCall ACCTFROM 0
+          ~> #call ACCTFROM ACCTTO ACCTTO 0 0 #range(LM, ARGSTART, ARGWIDTH) true
+          ~> #return RETSTART RETWIDTH
+         ...
+         </k>
+         <id> ACCTFROM </id>
+         <localMem> LM </localMem>
+
+

Account Creation/Deletion

+
    +
  • #create____ transfers the endowment to the new account and triggers the execution of the initialization code.
  • +
  • #codeDeposit_ checks the result of initialization code and whether the code deposit can be paid, indicating an error if not.
  • +
  • #isValidCode_ checks if the code returned by the execution of the initialization code begins with a reserved byte. [EIP-3541]
  • +
+
    syntax InternalOp ::= "#create"   Int Int Int Bytes
+                        | "#mkCreate" Int Int Int Bytes
+                        | "#incrementNonce" Int
+ // -------------------------------------------
+    rule <k> #create ACCTFROM ACCTTO VALUE INITCODE
+          => #incrementNonce ACCTFROM
+          ~> #pushCallStack ~> #pushWorldState
+          ~> #newAccount ACCTTO
+          ~> #transferFunds ACCTFROM ACCTTO VALUE
+          ~> #mkCreate ACCTFROM ACCTTO VALUE INITCODE
+         ...
+         </k>
+
+    rule <k> #mkCreate ACCTFROM ACCTTO VALUE INITCODE
+          => #touchAccounts ACCTFROM ACCTTO ~> #accessAccounts ACCTFROM ACCTTO ~> #loadProgram INITCODE ~> #initVM ~> #execute
+         ...
+         </k>
+         <schedule> SCHED </schedule>
+         <id> _ => ACCTTO </id>
+         <gas> _ => GCALL </gas>
+         <callGas> GCALL => 0 </callGas>
+         <caller> _ => ACCTFROM </caller>
+         <callDepth> CD => CD +Int 1 </callDepth>
+         <callData> _ => .Bytes </callData>
+         <callValue> _ => VALUE </callValue>
+         <account>
+           <acctID> ACCTTO </acctID>
+           <nonce> NONCE => #if Gemptyisnonexistent << SCHED >> #then NONCE +Int 1 #else NONCE #fi </nonce>
+           ...
+         </account>
+
+    rule <k> #incrementNonce ACCT => . ... </k>
+         <account>
+           <acctID> ACCT </acctID>
+           <nonce> NONCE => NONCE +Int 1 </nonce>
+           ...
+         </account>
+
+    syntax Bool ::= #isValidCode ( Bytes , Schedule ) [function]
+ // ------------------------------------------------------------
+    rule #isValidCode( OUT ,  SCHED) => Ghasrejectedfirstbyte << SCHED >> impliesBool OUT[0] =/=Int 239 requires lengthBytes(OUT) >Int 0
+    rule #isValidCode(_OUT , _SCHED) => true                                                            [owise]
+
+    syntax KItem ::= "#codeDeposit" Int
+                   | "#mkCodeDeposit" Int
+                   | "#finishCodeDeposit" Int Bytes
+ // -----------------------------------------------
+    rule <statusCode> _:ExceptionalStatusCode </statusCode>
+         <k> #halt ~> #codeDeposit _ => #popCallStack ~> #popWorldState ~> 0 ~> #push ... </k> <output> _ => .Bytes </output>
+
+    rule <statusCode> EVMC_REVERT </statusCode>
+         <k> #halt ~> #codeDeposit _ => #popCallStack ~> #popWorldState ~> #refund GAVAIL ~> 0 ~> #push ... </k>
+         <gas> GAVAIL </gas>
+
+    rule <statusCode> EVMC_SUCCESS </statusCode>
+         <k> #halt ~> #codeDeposit ACCT => #mkCodeDeposit ACCT ... </k>
+
+    rule <k> #mkCodeDeposit ACCT
+          => Gcodedeposit < SCHED > *Int lengthBytes(OUT) ~> #deductGas
+          ~> #finishCodeDeposit ACCT OUT
+         ...
+         </k>
+         <schedule> SCHED </schedule>
+         <output> OUT => .Bytes </output>
+      requires lengthBytes(OUT) <=Int maxCodeSize < SCHED > andBool #isValidCode(OUT, SCHED)
+
+    rule <k> #mkCodeDeposit _ACCT => #popCallStack ~> #popWorldState ~> 0 ~> #push ... </k>
+         <schedule> SCHED </schedule>
+         <output> OUT => .Bytes </output>
+      requires notBool ( lengthBytes(OUT) <=Int maxCodeSize < SCHED > andBool #isValidCode(OUT, SCHED) )
+
+    rule <k> #finishCodeDeposit ACCT OUT
+          => #popCallStack ~> #dropWorldState
+          ~> #refund GAVAIL ~> ACCT ~> #push
+         ...
+         </k>
+         <gas> GAVAIL </gas>
+         <account>
+           <acctID> ACCT </acctID>
+           <code> _ => OUT </code>
+           ...
+         </account>
+
+    rule <statusCode> _:ExceptionalStatusCode </statusCode>
+         <k> #halt ~> #finishCodeDeposit ACCT _
+          => #popCallStack ~> #dropWorldState
+          ~> #refund GAVAIL ~> ACCT ~> #push
+         ...
+         </k>
+         <gas> GAVAIL </gas>
+         <schedule> FRONTIER </schedule>
+
+    rule <statusCode> _:ExceptionalStatusCode </statusCode>
+         <k> #halt ~> #finishCodeDeposit _ _ => #popCallStack ~> #popWorldState ~> 0 ~> #push ... </k>
+         <schedule> SCHED </schedule>
+      requires SCHED =/=K FRONTIER
+
+

CREATE will attempt to #create the account using the initialization code and cleans up the result with #codeDeposit.

+
    syntax TernStackOp ::= "CREATE"
+ // -------------------------------
+    rule [create]:
+         <k> CREATE VALUE MEMSTART MEMWIDTH
+          => #accessAccounts #newAddr(ACCT, NONCE)
+          ~> #checkCall ACCT VALUE
+          ~> #create ACCT #newAddr(ACCT, NONCE) VALUE #range(LM, MEMSTART, MEMWIDTH)
+          ~> #codeDeposit #newAddr(ACCT, NONCE)
+         ...
+         </k>
+         <id> ACCT </id>
+         <localMem> LM </localMem>
+         <account>
+           <acctID> ACCT </acctID>
+           <nonce> NONCE </nonce>
+           ...
+         </account>
+
+

CREATE2 will attempt to #create the account, but with the new scheme for choosing the account address.

+
    syntax QuadStackOp ::= "CREATE2"
+ // --------------------------------
+    rule [create2]:
+         <k> CREATE2 VALUE MEMSTART MEMWIDTH SALT
+          => #accessAccounts #newAddr(ACCT, SALT, #range(LM, MEMSTART, MEMWIDTH))
+          ~> #checkCall ACCT VALUE
+          ~> #create ACCT #newAddr(ACCT, SALT, #range(LM, MEMSTART, MEMWIDTH)) VALUE #range(LM, MEMSTART, MEMWIDTH)
+          ~> #codeDeposit #newAddr(ACCT, SALT, #range(LM, MEMSTART, MEMWIDTH))
+         ...
+         </k>
+         <id> ACCT </id>
+         <localMem> LM </localMem>
+
+

SELFDESTRUCT marks the current account for deletion and transfers funds out of the current account. +Self destructing to yourself, unlike a regular transfer, destroys the balance in the account, irreparably losing it.

+
    syntax UnStackOp ::= "SELFDESTRUCT"
+ // -----------------------------------
+    rule <k> SELFDESTRUCT ACCTTO => #touchAccounts ACCT ACCTTO ~> #transferFunds ACCT ACCTTO BALFROM ~> #end EVMC_SUCCESS ... </k>
+         <id> ACCT </id>
+         <selfDestruct> SDS => SDS |Set SetItem(ACCT) </selfDestruct>
+         <account>
+           <acctID> ACCT </acctID>
+           <balance> BALFROM </balance>
+           ...
+         </account>
+         <output> _ => .Bytes </output>
+      requires ACCT =/=Int ACCTTO
+
+    rule <k> SELFDESTRUCT ACCT => #touchAccounts ACCT ~> #end EVMC_SUCCESS ... </k>
+         <id> ACCT </id>
+         <selfDestruct> SDS => SDS |Set SetItem(ACCT) </selfDestruct>
+         <account>
+           <acctID> ACCT </acctID>
+           <balance> _ => 0 </balance>
+           ...
+         </account>
+         <output> _ => .Bytes </output>
+
+

Precompiled Contracts

+
    +
  • #precompiled is a placeholder for the 9 pre-compiled contracts at addresses 1 through 9.
  • +
+
    syntax NullStackOp   ::= PrecompiledOp
+    syntax PrecompiledOp ::= #precompiled ( Int ) [function]
+ // --------------------------------------------------------
+    rule #precompiled(1) => ECREC
+    rule #precompiled(2) => SHA256
+    rule #precompiled(3) => RIP160
+    rule #precompiled(4) => ID
+    rule #precompiled(5) => MODEXP
+    rule #precompiled(6) => ECADD
+    rule #precompiled(7) => ECMUL
+    rule #precompiled(8) => ECPAIRING
+    rule #precompiled(9) => BLAKE2F
+
+    syntax Set ::= #precompiledAccounts ( Schedule ) [function, total]
+ // ------------------------------------------------------------------
+    rule #precompiledAccounts(DEFAULT)           => SetItem(1) SetItem(2) SetItem(3) SetItem(4)
+    rule #precompiledAccounts(FRONTIER)          => #precompiledAccounts(DEFAULT)
+    rule #precompiledAccounts(HOMESTEAD)         => #precompiledAccounts(FRONTIER)
+    rule #precompiledAccounts(TANGERINE_WHISTLE) => #precompiledAccounts(HOMESTEAD)
+    rule #precompiledAccounts(SPURIOUS_DRAGON)   => #precompiledAccounts(TANGERINE_WHISTLE)
+    rule #precompiledAccounts(BYZANTIUM)         => #precompiledAccounts(SPURIOUS_DRAGON) SetItem(5) SetItem(6) SetItem(7) SetItem(8)
+    rule #precompiledAccounts(CONSTANTINOPLE)    => #precompiledAccounts(BYZANTIUM)
+    rule #precompiledAccounts(PETERSBURG)        => #precompiledAccounts(CONSTANTINOPLE)
+    rule #precompiledAccounts(ISTANBUL)          => #precompiledAccounts(PETERSBURG) SetItem(9)
+    rule #precompiledAccounts(BERLIN)            => #precompiledAccounts(ISTANBUL)
+    rule #precompiledAccounts(LONDON)            => #precompiledAccounts(BERLIN)
+    rule #precompiledAccounts(MERGE)             => #precompiledAccounts(LONDON)
+
+
    +
  • ECREC performs ECDSA public key recovery.
  • +
  • SHA256 performs the SHA2-257 hash function.
  • +
  • RIP160 performs the RIPEMD-160 hash function.
  • +
  • ID is the identity function (copies input to output).
  • +
+
    syntax PrecompiledOp ::= "ECREC"
+ // --------------------------------
+    rule <k> ECREC => #end EVMC_SUCCESS ... </k>
+         <callData> DATA </callData>
+         <output> _ => #ecrec(#range(DATA, 0, 32), #range(DATA, 32, 32), #range(DATA, 64, 32), #range(DATA, 96, 32)) </output>
+
+    syntax Bytes ::= #ecrec ( Bytes , Bytes , Bytes , Bytes ) [function, smtlib(ecrec)]
+                   | #ecrec ( Account )                       [function]
+ // --------------------------------------------------------------------
+    rule [ecrec]: #ecrec(HASH, SIGV, SIGR, SIGS) => #ecrec(#sender(#unparseByteStack(HASH), #asWord(SIGV), #unparseByteStack(SIGR), #unparseByteStack(SIGS))) [concrete]
+
+    rule #ecrec(.Account) => .Bytes
+    rule #ecrec(N:Int)    => #padToWidth(32, #asByteStack(N))
+
+    syntax PrecompiledOp ::= "SHA256"
+ // ---------------------------------
+    rule <k> SHA256 => #end EVMC_SUCCESS ... </k>
+         <callData> DATA </callData>
+         <output> _ => #parseHexBytes(Sha256(#unparseByteStack(DATA))) </output>
+
+    syntax PrecompiledOp ::= "RIP160"
+ // ---------------------------------
+    rule <k> RIP160 => #end EVMC_SUCCESS ... </k>
+         <callData> DATA </callData>
+         <output> _ => #padToWidth(32, #parseHexBytes(RipEmd160(#unparseByteStack(DATA)))) </output>
+
+    syntax PrecompiledOp ::= "ID"
+ // -----------------------------
+    rule <k> ID => #end EVMC_SUCCESS ... </k>
+         <callData> DATA </callData>
+         <output> _ => DATA </output>
+
+    syntax PrecompiledOp ::= "MODEXP"
+ // ---------------------------------
+    rule <k> MODEXP => #end EVMC_SUCCESS ... </k>
+         <callData> DATA </callData>
+         <output> _ => #modexp1(#asWord(#range(DATA, 0, 32)), #asWord(#range(DATA, 32, 32)), #asWord(#range(DATA, 64, 32)), #range(DATA, 96, maxInt(0, lengthBytes(DATA) -Int 96))) </output>
+
+    syntax Bytes ::= #modexp1 ( Int , Int , Int , Bytes ) [function]
+                   | #modexp2 ( Int , Int , Int , Bytes ) [function]
+                   | #modexp3 ( Int , Int , Int , Bytes ) [function]
+                   | #modexp4 ( Int , Int , Int )         [function]
+ // ----------------------------------------------------------------
+    rule #modexp1(BASELEN, EXPLEN,   MODLEN, DATA) => #modexp2(#asInteger(#range(DATA, 0, BASELEN)), EXPLEN, MODLEN, #range(DATA, BASELEN, maxInt(0, lengthBytes(DATA) -Int BASELEN))) requires MODLEN =/=Int 0
+    rule #modexp1(_,       _,        0,      _)    => .Bytes
+    rule #modexp2(BASE,    EXPLEN,   MODLEN, DATA) => #modexp3(BASE, #asInteger(#range(DATA, 0, EXPLEN)), MODLEN, #range(DATA, EXPLEN, maxInt(0, lengthBytes(DATA) -Int EXPLEN)))
+    rule #modexp3(BASE,    EXPONENT, MODLEN, DATA) => #padToWidth(MODLEN, #modexp4(BASE, EXPONENT, #asInteger(#range(DATA, 0, MODLEN))))
+    rule #modexp4(BASE,    EXPONENT, MODULUS)      => #asByteStack(powmod(BASE, EXPONENT, MODULUS))
+
+    syntax PrecompiledOp ::= "ECADD"
+ // --------------------------------
+    rule <k> ECADD => #ecadd((#asWord(#range(DATA, 0, 32)), #asWord(#range(DATA, 32, 32))), (#asWord(#range(DATA, 64, 32)), #asWord(#range(DATA, 96, 32)))) ... </k>
+         <callData> DATA </callData>
+
+    syntax InternalOp ::= #ecadd(G1Point, G1Point)
+ // ----------------------------------------------
+    rule <k> #ecadd(P1, P2) => #end EVMC_PRECOMPILE_FAILURE ... </k>
+      requires notBool isValidPoint(P1) orBool notBool isValidPoint(P2)
+    rule <k> #ecadd(P1, P2) => #end EVMC_SUCCESS ... </k> <output> _ => #point(BN128Add(P1, P2)) </output>
+      requires isValidPoint(P1) andBool isValidPoint(P2)
+
+    syntax PrecompiledOp ::= "ECMUL"
+ // --------------------------------
+    rule <k> ECMUL => #ecmul((#asWord(#range(DATA, 0, 32)), #asWord(#range(DATA, 32, 32))), #asWord(#range(DATA, 64, 32))) ... </k>
+         <callData> DATA </callData>
+
+    syntax InternalOp ::= #ecmul(G1Point, Int)
+ // ------------------------------------------
+    rule <k> #ecmul(P, _S) => #end EVMC_PRECOMPILE_FAILURE ... </k>
+      requires notBool isValidPoint(P)
+    rule <k> #ecmul(P,  S) => #end EVMC_SUCCESS ... </k> <output> _ => #point(BN128Mul(P, S)) </output>
+      requires isValidPoint(P)
+
+    syntax Bytes ::= #point ( G1Point ) [function]
+ // ----------------------------------------------
+    rule #point((X, Y)) => #padToWidth(32, #asByteStack(X)) +Bytes #padToWidth(32, #asByteStack(Y))
+
+    syntax PrecompiledOp ::= "ECPAIRING"
+ // ------------------------------------
+    rule <k> ECPAIRING => #ecpairing(.List, .List, 0, DATA, lengthBytes(DATA)) ... </k>
+         <callData> DATA </callData>
+      requires lengthBytes(DATA) modInt 192 ==Int 0
+    rule <k> ECPAIRING => #end EVMC_PRECOMPILE_FAILURE ... </k>
+         <callData> DATA </callData>
+      requires lengthBytes(DATA) modInt 192 =/=Int 0
+
+    syntax InternalOp ::= #ecpairing(List, List, Int, Bytes, Int)
+ // -------------------------------------------------------------
+    rule <k> (.K => #checkPoint) ~> #ecpairing((.List => ListItem((#asWord(#range(DATA, I, 32)), #asWord(#range(DATA, I +Int 32, 32))))) _, (.List => ListItem((#asWord(#range(DATA, I +Int 96, 32)) x #asWord(#range(DATA, I +Int 64, 32)) , #asWord(#range(DATA, I +Int 160, 32)) x #asWord(#range(DATA, I +Int 128, 32))))) _, I => I +Int 192, DATA, LEN) ... </k>
+      requires I =/=Int LEN
+    rule <k> #ecpairing(A, B, LEN, _, LEN) => #end EVMC_SUCCESS ... </k>
+         <output> _ => #padToWidth(32, #asByteStack(bool2Word(BN128AtePairing(A, B)))) </output>
+
+    syntax InternalOp ::= "#checkPoint"
+ // -----------------------------------
+    rule <k> (#checkPoint => .) ~> #ecpairing(ListItem(AK::G1Point) _, ListItem(BK::G2Point) _, _, _, _) ... </k>
+      requires isValidPoint(AK) andBool isValidPoint(BK)
+    rule <k> #checkPoint ~> #ecpairing(ListItem(AK::G1Point) _, ListItem(BK::G2Point) _, _, _, _) => #end EVMC_PRECOMPILE_FAILURE ... </k>
+      requires notBool isValidPoint(AK) orBool notBool isValidPoint(BK)
+
+    syntax PrecompiledOp ::= "BLAKE2F"
+ // ----------------------------------
+    rule <k> BLAKE2F => #end EVMC_SUCCESS ... </k>
+         <output> _ => #parseByteStack( Blake2Compress( #unparseByteStack( DATA ) ) ) </output>
+         <callData> DATA </callData>
+      requires lengthBytes( DATA ) ==Int 213
+       andBool DATA[212] <=Int 1
+
+    rule <k> BLAKE2F => #end EVMC_PRECOMPILE_FAILURE ... </k>
+         <callData> DATA </callData>
+      requires lengthBytes( DATA ) ==Int 213
+       andBool DATA[212] >Int 1
+
+    rule <k> BLAKE2F => #end EVMC_PRECOMPILE_FAILURE ... </k>
+         <callData> DATA </callData>
+      requires lengthBytes( DATA ) =/=Int 213
+
+

Ethereum Gas Calculation

+

Overall Gas

+
    +
  • #gas calculates how much gas this operation costs, and takes into account the memory consumed.
  • +
  • #deductGas is used to check that there won't be a gas underflow (throwing EVMC_OUT_OF_GAS if so), and deducts the gas if not.
  • +
  • #deductMemory checks that access to memory stay within sensible bounds (and deducts the correct amount of gas for it), throwing EVMC_INVALID_MEMORY_ACCESS if bad access happens.
  • +
+
    syntax InternalOp ::= "#gas" "[" OpCode "," OpCode "]"
+ // ------------------------------------------------------
+    rule <k> #gas [ OP , AOP ]
+          => #memory [ OP , AOP ]
+          ~> #gas [ AOP ]
+          ~> #access [ OP , AOP ]
+         ...
+        </k>
+
+    rule <k> #gas [ OP ] => #gasExec(SCHED, OP) ~> #deductGas ... </k>
+         <schedule> SCHED </schedule>
+
+    rule <k> #memory [ OP , AOP ] => #memory(AOP, MU) ~> #deductMemory ... </k>
+         <memoryUsed> MU </memoryUsed>
+      requires #usesMemory(OP)
+
+   rule <k> #memory [ _ , _ ] => . ... </k> [owise]
+
+    syntax InternalOp ::= "#gas"    "[" OpCode "]" | "#deductGas" | "#deductMemoryGas"
+                        | "#memory" "[" OpCode "," OpCode "]" | "#deductMemory"
+ // ---------------------------------------------------------------------------
+    rule <k> MU':Int ~> #deductMemory => (Cmem(SCHED, MU') -Int Cmem(SCHED, MU)) ~> #deductMemoryGas ... </k>
+         <memoryUsed> MU => MU' </memoryUsed> <schedule> SCHED </schedule>
+
+    rule <k> _G:Gas ~> (#deductMemoryGas => #deductGas)   ... </k> //Required for verification
+    rule <k>  G:Gas ~> #deductGas => #end EVMC_OUT_OF_GAS ... </k> <gas> GAVAIL:Gas                  </gas> requires GAVAIL <Gas G
+    rule <k>  G:Gas ~> #deductGas => .                    ... </k> <gas> GAVAIL:Gas => GAVAIL -Gas G </gas> requires G <=Gas GAVAIL
+
+    syntax Bool ::= #inStorage     ( Map   , Account , Int ) [function, total]
+                  | #inStorageAux1 ( KItem ,           Int ) [function, total]
+                  | #inStorageAux2 ( Set   ,           Int ) [function, total]
+ // --------------------------------------------------------------------------
+    rule #inStorage(TS, ACCT, KEY) => #inStorageAux1(TS[ACCT], KEY) requires ACCT in_keys(TS)
+    rule #inStorage(_, _, _)       => false                         [owise]
+
+    rule #inStorageAux1(KEYS:Set, KEY) => #inStorageAux2(KEYS, KEY)
+    rule #inStorageAux1(_, _)          => false                     [owise]
+
+    rule #inStorageAux2(KEYS, KEY) => true  requires KEY in KEYS
+    rule #inStorageAux2(_, _)      => false [owise]
+
+

Memory Consumption

+

Memory consumed is tracked to determine the appropriate amount of gas to charge for each operation. +In the YellowPaper, each opcode is defined to consume zero gas unless specified otherwise next to the semantics of the opcode (appendix H).

+
    +
  • #memory computes the new memory size given the old size and next operator (with its arguments).
  • +
  • #memoryUsageUpdate is the function M in appendix H of the YellowPaper which helps track the memory used.
  • +
+
    syntax Int ::= #memory ( OpCode , Int ) [function, total]
+ // ---------------------------------------------------------
+    rule #memory ( MLOAD INDEX     , MU ) => #memoryUsageUpdate(MU, INDEX, 32)
+    rule #memory ( MSTORE INDEX _  , MU ) => #memoryUsageUpdate(MU, INDEX, 32)
+    rule #memory ( MSTORE8 INDEX _ , MU ) => #memoryUsageUpdate(MU, INDEX, 1)
+
+    rule #memory ( SHA3 START WIDTH   , MU ) => #memoryUsageUpdate(MU, START, WIDTH)
+    rule #memory ( LOG(_) START WIDTH , MU ) => #memoryUsageUpdate(MU, START, WIDTH)
+
+    rule #memory ( CODECOPY START _ WIDTH       , MU ) => #memoryUsageUpdate(MU, START, WIDTH)
+    rule #memory ( EXTCODECOPY _ START _ WIDTH  , MU ) => #memoryUsageUpdate(MU, START, WIDTH)
+    rule #memory ( CALLDATACOPY START _ WIDTH   , MU ) => #memoryUsageUpdate(MU, START, WIDTH)
+    rule #memory ( RETURNDATACOPY START _ WIDTH , MU ) => #memoryUsageUpdate(MU, START, WIDTH)
+
+    rule #memory ( CREATE  _ START WIDTH   , MU ) => #memoryUsageUpdate(MU, START, WIDTH)
+    rule #memory ( CREATE2 _ START WIDTH _ , MU ) => #memoryUsageUpdate(MU, START, WIDTH)
+    rule #memory ( RETURN START WIDTH      , MU ) => #memoryUsageUpdate(MU, START, WIDTH)
+    rule #memory ( REVERT START WIDTH      , MU ) => #memoryUsageUpdate(MU, START, WIDTH)
+
+    rule #memory ( _COP:CallOp     _ _ _ ARGSTART ARGWIDTH RETSTART RETWIDTH , MU ) => #memoryUsageUpdate(#memoryUsageUpdate(MU, ARGSTART, ARGWIDTH), RETSTART, RETWIDTH)
+    rule #memory ( _CSOP:CallSixOp _ _   ARGSTART ARGWIDTH RETSTART RETWIDTH , MU ) => #memoryUsageUpdate(#memoryUsageUpdate(MU, ARGSTART, ARGWIDTH), RETSTART, RETWIDTH)
+
+    rule #memory ( _ , MU ) => MU [owise]
+
+    syntax Bool ::= #usesMemory ( OpCode ) [function, total]
+ // --------------------------------------------------------
+    rule #usesMemory(_:LogOp)        => true
+    rule #usesMemory(_:CallOp)       => true
+    rule #usesMemory(_:CallSixOp)    => true
+    rule #usesMemory(MLOAD)          => true
+    rule #usesMemory(MSTORE)         => true
+    rule #usesMemory(MSTORE8)        => true
+    rule #usesMemory(SHA3)           => true
+    rule #usesMemory(CODECOPY)       => true
+    rule #usesMemory(EXTCODECOPY)    => true
+    rule #usesMemory(CALLDATACOPY)   => true
+    rule #usesMemory(RETURNDATACOPY) => true
+    rule #usesMemory(CREATE)         => true
+    rule #usesMemory(CREATE2)        => true
+    rule #usesMemory(RETURN)         => true
+    rule #usesMemory(REVERT)         => true
+    rule #usesMemory(_)              => false [owise]
+
+    syntax Int ::= #memoryUsageUpdate ( Int , Int , Int ) [function, total]
+ // -----------------------------------------------------------------------
+    rule #memoryUsageUpdate(MU,     _, WIDTH) => MU                                       requires notBool 0 <Int WIDTH [concrete]
+    rule #memoryUsageUpdate(MU, START, WIDTH) => maxInt(MU, (START +Int WIDTH) up/Int 32) requires         0 <Int WIDTH [concrete]
+
+

Access List Gas

+
    syntax Bool ::= #usesAccessList ( OpCode ) [function, total]
+ // ------------------------------------------------------------
+    rule #usesAccessList(OP)     => true  requires isAddr1Op(OP)
+    rule #usesAccessList(OP)     => true  requires isAddr2Op(OP)
+    rule #usesAccessList(SLOAD)  => true
+    rule #usesAccessList(SSTORE) => true
+    rule #usesAccessList(_)      => false [owise]
+
+    syntax InternalOp ::= "#access" "[" OpCode "," OpCode "]"
+ // ---------------------------------------------------------
+    rule <k> #access [ OP , AOP ] => #gasAccess(SCHED, AOP) ~> #deductGas ... </k>
+         <schedule> SCHED </schedule>
+      requires Ghasaccesslist << SCHED >> andBool #usesAccessList(OP)
+
+    rule <k> #access [ _ , _ ] => . ... </k> <schedule> _ </schedule> [owise]
+
+    syntax InternalOp ::= #gasAccess ( Schedule, OpCode )
+ // -----------------------------------------------------
+    rule <k> #gasAccess(SCHED, EXTCODESIZE ACCT)            => #accessAccounts ACCT ~> Caddraccess(SCHED, ACCT in ACCTS)                                           ... </k> <accessedAccounts> ACCTS </accessedAccounts>
+    rule <k> #gasAccess(SCHED, EXTCODECOPY ACCT _ _ _)      => #accessAccounts ACCT ~> Caddraccess(SCHED, ACCT in ACCTS)                                           ... </k> <accessedAccounts> ACCTS </accessedAccounts>
+    rule <k> #gasAccess(SCHED, EXTCODEHASH ACCT)            => #accessAccounts ACCT ~> Caddraccess(SCHED, ACCT in ACCTS)                                           ... </k> <accessedAccounts> ACCTS </accessedAccounts>
+    rule <k> #gasAccess(SCHED, BALANCE ACCT)                => #accessAccounts ACCT ~> Caddraccess(SCHED, ACCT in ACCTS)                                           ... </k> <accessedAccounts> ACCTS </accessedAccounts>
+    rule <k> #gasAccess(SCHED, SELFDESTRUCT ACCT)           => #accessAccounts ACCT ~> #if ACCT in ACCTS #then 0 #else Gcoldaccountaccess < SCHED > #fi            ... </k> <accessedAccounts> ACCTS </accessedAccounts>
+    rule <k> #gasAccess(_    , CALL _ ACCT _ _ _ _ _)       => #accessAccounts ACCT ~> 0                                                                           ... </k>
+    rule <k> #gasAccess(_    , CALLCODE _ ACCT _ _ _ _ _)   => #accessAccounts ACCT ~> 0                                                                           ... </k>
+    rule <k> #gasAccess(_    , DELEGATECALL _ ACCT _ _ _ _) => #accessAccounts ACCT ~> 0                                                                           ... </k>
+    rule <k> #gasAccess(_    , STATICCALL _ ACCT _ _ _ _)   => #accessAccounts ACCT ~> 0                                                                           ... </k>
+    rule <k> #gasAccess(_    , SLOAD INDEX )                => #accessStorage ACCT INDEX ~> 0                                                                      ... </k> <id> ACCT </id>
+    rule <k> #gasAccess(SCHED, SSTORE INDEX _)              => #accessStorage ACCT INDEX ~> #if #inStorage(TS, ACCT, INDEX) #then 0 #else Gcoldsload < SCHED > #fi ... </k> <id> ACCT </id> <accessedStorage> TS </accessedStorage>
+    rule <k> #gasAccess(_    , _ )                          => 0                                                                                                  ... </k> [owise]
+
+
+

Execution Gas

+

The intrinsic gas calculation mirrors the style of the YellowPaper (appendix H).

+
    +
  • #gasExec loads all the relevant surronding state and uses that to compute the intrinsic execution gas of each opcode.
  • +
+
    syntax InternalOp ::= #gasExec ( Schedule , OpCode )
+ // ----------------------------------------------------
+    rule <k> #gasExec(SCHED, SSTORE INDEX NEW) => Csstore(SCHED, NEW, #lookup(STORAGE, INDEX), #lookup(ORIGSTORAGE, INDEX)) ... </k>
+         <id> ACCT </id>
+         <gas> GAVAIL </gas>
+         <account>
+           <acctID> ACCT </acctID>
+           <storage> STORAGE </storage>
+           <origStorage> ORIGSTORAGE </origStorage>
+           ...
+         </account>
+         <refund> R => R +Int Rsstore(SCHED, NEW, #lookup(STORAGE, INDEX), #lookup(ORIGSTORAGE, INDEX)) </refund>
+      requires notBool Ghassstorestipend << SCHED >>
+        orBool notBool GAVAIL <=Gas Gcallstipend < SCHED >
+
+    rule <k> #gasExec(SCHED, SSTORE _ _ ) => #end EVMC_OUT_OF_GAS ... </k>
+         <gas> GAVAIL </gas>
+      requires Ghassstorestipend << SCHED >>
+       andBool GAVAIL <=Gas Gcallstipend < SCHED >
+
+    rule <k> #gasExec(SCHED, EXP _ 0)  => Gexp < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, EXP _ W1) => Gexp < SCHED > +Int (Gexpbyte < SCHED > *Int (1 +Int (log256Int(W1)))) ... </k> requires W1 =/=Int 0
+
+    rule <k> #gasExec(SCHED, CALLDATACOPY    _ _ WIDTH) => Gverylow < SCHED > +Int (Gcopy < SCHED > *Int (WIDTH up/Int 32)) ... </k>
+    rule <k> #gasExec(SCHED, RETURNDATACOPY  _ _ WIDTH) => Gverylow < SCHED > +Int (Gcopy < SCHED > *Int (WIDTH up/Int 32)) ... </k>
+    rule <k> #gasExec(SCHED, CODECOPY        _ _ WIDTH) => Gverylow < SCHED > +Int (Gcopy < SCHED > *Int (WIDTH up/Int 32)) ... </k>
+
+    rule <k> #gasExec(SCHED, LOG(N) _ WIDTH) => (Glog < SCHED > +Int (Glogdata < SCHED > *Int WIDTH) +Int (N *Int Glogtopic < SCHED >)) ... </k>
+
+    rule <k> #gasExec(SCHED, CALL GCAP ACCTTO VALUE _ _ _ _)
+          => Ccallgas(SCHED, #accountNonexistent(ACCTTO), GCAP, GAVAIL, VALUE, ACCTTO in ACCTS) ~> #allocateCallGas
+          ~> Ccall(SCHED, #accountNonexistent(ACCTTO), GCAP, GAVAIL, VALUE, ACCTTO in ACCTS)
+         ...
+         </k>
+         <gas> GAVAIL </gas>
+         <accessedAccounts> ACCTS </accessedAccounts>
+
+    rule <k> #gasExec(SCHED, CALLCODE GCAP ACCTTO VALUE _ _ _ _)
+          => Ccallgas(SCHED, #accountNonexistent(ACCTFROM), GCAP, GAVAIL, VALUE, ACCTTO in ACCTS) ~> #allocateCallGas
+          ~> Ccall(SCHED, #accountNonexistent(ACCTFROM), GCAP, GAVAIL, VALUE, ACCTTO in ACCTS)
+         ...
+         </k>
+         <id> ACCTFROM </id>
+         <gas> GAVAIL </gas>
+         <accessedAccounts> ACCTS </accessedAccounts>
+
+    rule <k> #gasExec(SCHED, DELEGATECALL GCAP ACCTTO _ _ _ _)
+          => Ccallgas(SCHED, #accountNonexistent(ACCTFROM), GCAP, GAVAIL, 0, ACCTTO in ACCTS) ~> #allocateCallGas
+          ~> Ccall(SCHED, #accountNonexistent(ACCTFROM), GCAP, GAVAIL, 0, ACCTTO in ACCTS)
+         ...
+         </k>
+         <id> ACCTFROM </id>
+         <gas> GAVAIL </gas>
+         <accessedAccounts> ACCTS </accessedAccounts>
+
+    rule <k> #gasExec(SCHED, STATICCALL GCAP ACCTTO _ _ _ _)
+          => Ccallgas(SCHED, #accountNonexistent(ACCTTO), GCAP, GAVAIL, 0, ACCTTO in ACCTS) ~> #allocateCallGas
+          ~> Ccall(SCHED, #accountNonexistent(ACCTTO), GCAP, GAVAIL, 0, ACCTTO in ACCTS)
+         ...
+         </k>
+         <gas> GAVAIL </gas>
+         <accessedAccounts> ACCTS </accessedAccounts>
+
+    rule <k> #gasExec(SCHED, SELFDESTRUCT ACCTTO) => Cselfdestruct(SCHED, #accountNonexistent(ACCTTO), BAL) ... </k>
+         <id> ACCTFROM </id>
+         <selfDestruct> SDS </selfDestruct>
+         <refund> RF => #if ACCTFROM in SDS #then RF #else RF +Word Rselfdestruct < SCHED > #fi </refund>
+         <account>
+           <acctID> ACCTFROM </acctID>
+           <balance> BAL </balance>
+           ...
+         </account>
+
+    rule <k> #gasExec(SCHED, CREATE _ _ _)
+          => Gcreate < SCHED > ~> #deductGas
+          ~> #allocateCreateGas ~> 0
+         ...
+         </k>
+
+    rule <k> #gasExec(SCHED, CREATE2 _ _ WIDTH _)
+          => Gcreate < SCHED > +Int Gsha3word < SCHED > *Int (WIDTH up/Int 32) ~> #deductGas
+          ~> #allocateCreateGas ~> 0
+         ...
+         </k>
+
+    rule <k> #gasExec(SCHED, SHA3 _ WIDTH) => Gsha3 < SCHED > +Int (Gsha3word < SCHED > *Int (WIDTH up/Int 32)) ... </k>
+
+    rule <k> #gasExec(SCHED, JUMPDEST)    => Gjumpdest < SCHED >                        ... </k>
+    rule <k> #gasExec(SCHED, SLOAD INDEX) => Csload(SCHED, #inStorage(TS, ACCT, INDEX)) ... </k>
+         <id> ACCT </id>
+         <accessedStorage> TS </accessedStorage>
+
+    // Wzero
+    rule <k> #gasExec(SCHED, STOP)       => Gzero < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, RETURN _ _) => Gzero < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, REVERT _ _) => Gzero < SCHED > ... </k>
+
+    // Wbase
+    rule <k> #gasExec(SCHED, ADDRESS)        => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, ORIGIN)         => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, CALLER)         => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, CALLVALUE)      => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, CALLDATASIZE)   => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, RETURNDATASIZE) => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, CODESIZE)       => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, GASPRICE)       => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, COINBASE)       => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, TIMESTAMP)      => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, NUMBER)         => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, DIFFICULTY)     => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, PREVRANDAO)     => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, GASLIMIT)       => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, BASEFEE)        => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, POP _)          => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, PC)             => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, MSIZE)          => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, GAS)            => Gbase < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, CHAINID)        => Gbase < SCHED > ... </k>
+
+    // Wverylow
+    rule <k> #gasExec(SCHED, ADD _ _)        => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, SUB _ _)        => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, NOT _)          => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, LT _ _)         => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, GT _ _)         => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, SLT _ _)        => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, SGT _ _)        => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, EQ _ _)         => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, ISZERO _)       => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, AND _ _)        => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, EVMOR _ _)      => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, XOR _ _)        => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, BYTE _ _)       => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, SHL _ _)        => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, SHR _ _)        => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, SAR _ _)        => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, CALLDATALOAD _) => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, MLOAD _)        => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, MSTORE _ _)     => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, MSTORE8 _ _)    => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, PUSH(_))        => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, DUP(_) _)       => Gverylow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, SWAP(_) _)      => Gverylow < SCHED > ... </k>
+
+    // Wlow
+    rule <k> #gasExec(SCHED, MUL _ _)        => Glow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, DIV _ _)        => Glow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, SDIV _ _)       => Glow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, MOD _ _)        => Glow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, SMOD _ _)       => Glow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, SIGNEXTEND _ _) => Glow < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, SELFBALANCE)    => Glow < SCHED > ... </k>
+
+    // Wmid
+    rule <k> #gasExec(SCHED, ADDMOD _ _ _) => Gmid < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, MULMOD _ _ _) => Gmid < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, JUMP _) => Gmid < SCHED > ... </k>
+
+    // Whigh
+    rule <k> #gasExec(SCHED, JUMPI _ _) => Ghigh < SCHED > ... </k>
+
+    rule <k> #gasExec(SCHED, EXTCODECOPY _ _ _ WIDTH) => Cextcodecopy(SCHED, WIDTH) ... </k>
+    rule <k> #gasExec(SCHED, EXTCODESIZE _)           => Cextcodesize(SCHED)        ... </k>
+    rule <k> #gasExec(SCHED, BALANCE _)               => Cbalance(SCHED)            ... </k>
+    rule <k> #gasExec(SCHED, EXTCODEHASH _)           => Cextcodehash(SCHED)        ... </k>
+    rule <k> #gasExec(SCHED, BLOCKHASH _)             => Gblockhash < SCHED >       ... </k>
+
+    // Precompiled
+    rule <k> #gasExec(_, ECREC)  => 3000 ... </k>
+    rule <k> #gasExec(_, SHA256) =>  60 +Int  12 *Int (lengthBytes(DATA) up/Int 32) ... </k> <callData> DATA </callData>
+    rule <k> #gasExec(_, RIP160) => 600 +Int 120 *Int (lengthBytes(DATA) up/Int 32) ... </k> <callData> DATA </callData>
+    rule <k> #gasExec(_, ID)     =>  15 +Int   3 *Int (lengthBytes(DATA) up/Int 32) ... </k> <callData> DATA </callData>
+
+    rule <k> #gasExec(SCHED, MODEXP) => Cmodexp(SCHED, DATA, #asWord(#range(DATA, 0, 32) ), #asWord(#range(DATA, 32, 32)), #asWord(#range(DATA, 64, 32))) ... </k>
+         <callData> DATA </callData>
+
+    rule <k> #gasExec(SCHED, ECADD)     => Gecadd < SCHED>  ... </k>
+    rule <k> #gasExec(SCHED, ECMUL)     => Gecmul < SCHED > ... </k>
+    rule <k> #gasExec(SCHED, ECPAIRING) => Gecpairconst < SCHED > +Int (lengthBytes(DATA) /Int 192) *Int Gecpaircoeff < SCHED > ... </k> <callData> DATA </callData>
+    rule <k> #gasExec(SCHED, BLAKE2F)   => Gfround < SCHED > *Int #asWord(#range(DATA, 0, 4) ) ... </k> <callData> DATA </callData>
+
+    syntax InternalOp ::= "#allocateCallGas"
+ // ----------------------------------------
+    rule <k> GCALL:Gas ~> #allocateCallGas => . ... </k>
+         <callGas> _ => GCALL </callGas>
+
+    syntax InternalOp ::= "#allocateCreateGas"
+ // ------------------------------------------
+    rule <schedule> SCHED </schedule>
+         <k> #allocateCreateGas => . ... </k>
+         <gas>     GAVAIL => #if Gstaticcalldepth << SCHED >> #then 0      #else GAVAIL /Gas 64      #fi </gas>
+         <callGas> _      => #if Gstaticcalldepth << SCHED >> #then GAVAIL #else #allBut64th(GAVAIL) #fi </callGas>
+      [preserves-definedness]
+
+

There are several helpers for calculating gas (most of them also specified in the YellowPaper).

+
    syntax Exp     ::= Int | Gas
+    syntax KResult ::= Int
+    syntax Exp ::= Ccall         ( Schedule , BExp , Gas , Gas , Int , Bool ) [strict(2)]
+                 | Ccallgas      ( Schedule , BExp , Gas , Gas , Int , Bool ) [strict(2)]
+                 | Cselfdestruct ( Schedule , BExp , Int )                    [strict(2)]
+ // -------------------------------------------------------------------------------------
+    rule <k> Ccall(SCHED, ISEMPTY:Bool, GCAP, GAVAIL, VALUE, ISWARM)
+          => Cextra(SCHED, ISEMPTY, VALUE, ISWARM) +Gas Cgascap(SCHED, GCAP, GAVAIL, Cextra(SCHED, ISEMPTY, VALUE, ISWARM)) ... </k>
+
+    rule <k> Ccallgas(SCHED, ISEMPTY:Bool, GCAP, GAVAIL, VALUE, ISWARM)
+          => Cgascap(SCHED, GCAP, GAVAIL, Cextra(SCHED, ISEMPTY, VALUE, ISWARM)) +Gas #if VALUE ==Int 0 #then 0 #else Gcallstipend < SCHED > #fi ... </k>
+
+    rule <k> Cselfdestruct(SCHED, ISEMPTY:Bool, BAL)
+          => Gselfdestruct < SCHED > +Int Cnew(SCHED, ISEMPTY andBool Gselfdestructnewaccount << SCHED >>, BAL) ... </k>
+
+    syntax BExp    ::= Bool
+    syntax KResult ::= Bool
+    syntax BExp ::= #accountNonexistent ( Int )
+ // -------------------------------------------
+    rule <k> #accountNonexistent(ACCT) => #accountEmpty(CODE, NONCE, BAL) andBool Gemptyisnonexistent << SCHED >> ... </k>
+         <schedule> SCHED </schedule>
+         <account>
+           <acctID>  ACCT  </acctID>
+           <balance> BAL   </balance>
+           <nonce>   NONCE </nonce>
+           <code>    CODE  </code>
+           ...
+         </account>
+
+   rule <k> #accountNonexistent(_) => true ... </k> [owise]
+
+

EVM Program Representations

+

EVM programs are represented algebraically in K, but programs can load and manipulate program data directly. +The opcodes CODECOPY and EXTCODECOPY rely on the assembled form of the programs being present. +The opcode CREATE relies on being able to interperet EVM data as a program.

+

This is a program representation dependence, which we might want to avoid. +Perhaps the only program representation dependence we should have is the hash of the program; doing so achieves:

+
    +
  • Program representation independence (different analysis tools on the language don't have to ensure they have a common representation of programs, just a common interperetation of the data-files holding programs).
  • +
  • Programming language independence (we wouldn't even have to commit to a particular language or interperetation of the data-file).
  • +
  • Only depending on the hash allows us to know that we have exactly the correct data-file (program), and nothing more.
  • +
+

Disassembler

+

After interpreting the strings representing programs as a WordStack, it should be changed into an OpCodes for use by the EVM semantics.

+
    +
  • #dasmOpCode interperets a Int as an OpCode.
  • +
+
    syntax OpCode ::= #dasmOpCode ( Int , Schedule ) [function, memo, total]
+ // ------------------------------------------------------------------------
+    rule #dasmOpCode(   0,     _ ) => STOP
+    rule #dasmOpCode(   1,     _ ) => ADD
+    rule #dasmOpCode(   2,     _ ) => MUL
+    rule #dasmOpCode(   3,     _ ) => SUB
+    rule #dasmOpCode(   4,     _ ) => DIV
+    rule #dasmOpCode(   5,     _ ) => SDIV
+    rule #dasmOpCode(   6,     _ ) => MOD
+    rule #dasmOpCode(   7,     _ ) => SMOD
+    rule #dasmOpCode(   8,     _ ) => ADDMOD
+    rule #dasmOpCode(   9,     _ ) => MULMOD
+    rule #dasmOpCode(  10,     _ ) => EXP
+    rule #dasmOpCode(  11,     _ ) => SIGNEXTEND
+    rule #dasmOpCode(  16,     _ ) => LT
+    rule #dasmOpCode(  17,     _ ) => GT
+    rule #dasmOpCode(  18,     _ ) => SLT
+    rule #dasmOpCode(  19,     _ ) => SGT
+    rule #dasmOpCode(  20,     _ ) => EQ
+    rule #dasmOpCode(  21,     _ ) => ISZERO
+    rule #dasmOpCode(  22,     _ ) => AND
+    rule #dasmOpCode(  23,     _ ) => EVMOR
+    rule #dasmOpCode(  24,     _ ) => XOR
+    rule #dasmOpCode(  25,     _ ) => NOT
+    rule #dasmOpCode(  26,     _ ) => BYTE
+    rule #dasmOpCode(  27, SCHED ) => SHL requires Ghasshift << SCHED >>
+    rule #dasmOpCode(  28, SCHED ) => SHR requires Ghasshift << SCHED >>
+    rule #dasmOpCode(  29, SCHED ) => SAR requires Ghasshift << SCHED >>
+    rule #dasmOpCode(  32,     _ ) => SHA3
+    rule #dasmOpCode(  48,     _ ) => ADDRESS
+    rule #dasmOpCode(  49,     _ ) => BALANCE
+    rule #dasmOpCode(  50,     _ ) => ORIGIN
+    rule #dasmOpCode(  51,     _ ) => CALLER
+    rule #dasmOpCode(  52,     _ ) => CALLVALUE
+    rule #dasmOpCode(  53,     _ ) => CALLDATALOAD
+    rule #dasmOpCode(  54,     _ ) => CALLDATASIZE
+    rule #dasmOpCode(  55,     _ ) => CALLDATACOPY
+    rule #dasmOpCode(  56,     _ ) => CODESIZE
+    rule #dasmOpCode(  57,     _ ) => CODECOPY
+    rule #dasmOpCode(  58,     _ ) => GASPRICE
+    rule #dasmOpCode(  59,     _ ) => EXTCODESIZE
+    rule #dasmOpCode(  60,     _ ) => EXTCODECOPY
+    rule #dasmOpCode(  61, SCHED ) => RETURNDATASIZE requires Ghasreturndata  << SCHED >>
+    rule #dasmOpCode(  62, SCHED ) => RETURNDATACOPY requires Ghasreturndata  << SCHED >>
+    rule #dasmOpCode(  63, SCHED ) => EXTCODEHASH    requires Ghasextcodehash << SCHED >>
+    rule #dasmOpCode(  64,     _ ) => BLOCKHASH
+    rule #dasmOpCode(  65,     _ ) => COINBASE
+    rule #dasmOpCode(  66,     _ ) => TIMESTAMP
+    rule #dasmOpCode(  67,     _ ) => NUMBER
+    rule #dasmOpCode(  68, SCHED ) => PREVRANDAO  requires         Ghasprevrandao << SCHED >>
+    rule #dasmOpCode(  68, SCHED ) => DIFFICULTY  requires notBool Ghasprevrandao << SCHED >>
+    rule #dasmOpCode(  69,     _ ) => GASLIMIT
+    rule #dasmOpCode(  70, SCHED ) => CHAINID     requires Ghaschainid     << SCHED >>
+    rule #dasmOpCode(  71, SCHED ) => SELFBALANCE requires Ghasselfbalance << SCHED >>
+    rule #dasmOpCode(  72, SCHED ) => BASEFEE     requires Ghasbasefee     << SCHED >>
+    rule #dasmOpCode(  80,     _ ) => POP
+    rule #dasmOpCode(  81,     _ ) => MLOAD
+    rule #dasmOpCode(  82,     _ ) => MSTORE
+    rule #dasmOpCode(  83,     _ ) => MSTORE8
+    rule #dasmOpCode(  84,     _ ) => SLOAD
+    rule #dasmOpCode(  85,     _ ) => SSTORE
+    rule #dasmOpCode(  86,     _ ) => JUMP
+    rule #dasmOpCode(  87,     _ ) => JUMPI
+    rule #dasmOpCode(  88,     _ ) => PC
+    rule #dasmOpCode(  89,     _ ) => MSIZE
+    rule #dasmOpCode(  90,     _ ) => GAS
+    rule #dasmOpCode(  91,     _ ) => JUMPDEST
+    rule #dasmOpCode(  96,     _ ) => PUSH(1)
+    rule #dasmOpCode(  97,     _ ) => PUSH(2)
+    rule #dasmOpCode(  98,     _ ) => PUSH(3)
+    rule #dasmOpCode(  99,     _ ) => PUSH(4)
+    rule #dasmOpCode( 100,     _ ) => PUSH(5)
+    rule #dasmOpCode( 101,     _ ) => PUSH(6)
+    rule #dasmOpCode( 102,     _ ) => PUSH(7)
+    rule #dasmOpCode( 103,     _ ) => PUSH(8)
+    rule #dasmOpCode( 104,     _ ) => PUSH(9)
+    rule #dasmOpCode( 105,     _ ) => PUSH(10)
+    rule #dasmOpCode( 106,     _ ) => PUSH(11)
+    rule #dasmOpCode( 107,     _ ) => PUSH(12)
+    rule #dasmOpCode( 108,     _ ) => PUSH(13)
+    rule #dasmOpCode( 109,     _ ) => PUSH(14)
+    rule #dasmOpCode( 110,     _ ) => PUSH(15)
+    rule #dasmOpCode( 111,     _ ) => PUSH(16)
+    rule #dasmOpCode( 112,     _ ) => PUSH(17)
+    rule #dasmOpCode( 113,     _ ) => PUSH(18)
+    rule #dasmOpCode( 114,     _ ) => PUSH(19)
+    rule #dasmOpCode( 115,     _ ) => PUSH(20)
+    rule #dasmOpCode( 116,     _ ) => PUSH(21)
+    rule #dasmOpCode( 117,     _ ) => PUSH(22)
+    rule #dasmOpCode( 118,     _ ) => PUSH(23)
+    rule #dasmOpCode( 119,     _ ) => PUSH(24)
+    rule #dasmOpCode( 120,     _ ) => PUSH(25)
+    rule #dasmOpCode( 121,     _ ) => PUSH(26)
+    rule #dasmOpCode( 122,     _ ) => PUSH(27)
+    rule #dasmOpCode( 123,     _ ) => PUSH(28)
+    rule #dasmOpCode( 124,     _ ) => PUSH(29)
+    rule #dasmOpCode( 125,     _ ) => PUSH(30)
+    rule #dasmOpCode( 126,     _ ) => PUSH(31)
+    rule #dasmOpCode( 127,     _ ) => PUSH(32)
+    rule #dasmOpCode( 128,     _ ) => DUP(1)
+    rule #dasmOpCode( 129,     _ ) => DUP(2)
+    rule #dasmOpCode( 130,     _ ) => DUP(3)
+    rule #dasmOpCode( 131,     _ ) => DUP(4)
+    rule #dasmOpCode( 132,     _ ) => DUP(5)
+    rule #dasmOpCode( 133,     _ ) => DUP(6)
+    rule #dasmOpCode( 134,     _ ) => DUP(7)
+    rule #dasmOpCode( 135,     _ ) => DUP(8)
+    rule #dasmOpCode( 136,     _ ) => DUP(9)
+    rule #dasmOpCode( 137,     _ ) => DUP(10)
+    rule #dasmOpCode( 138,     _ ) => DUP(11)
+    rule #dasmOpCode( 139,     _ ) => DUP(12)
+    rule #dasmOpCode( 140,     _ ) => DUP(13)
+    rule #dasmOpCode( 141,     _ ) => DUP(14)
+    rule #dasmOpCode( 142,     _ ) => DUP(15)
+    rule #dasmOpCode( 143,     _ ) => DUP(16)
+    rule #dasmOpCode( 144,     _ ) => SWAP(1)
+    rule #dasmOpCode( 145,     _ ) => SWAP(2)
+    rule #dasmOpCode( 146,     _ ) => SWAP(3)
+    rule #dasmOpCode( 147,     _ ) => SWAP(4)
+    rule #dasmOpCode( 148,     _ ) => SWAP(5)
+    rule #dasmOpCode( 149,     _ ) => SWAP(6)
+    rule #dasmOpCode( 150,     _ ) => SWAP(7)
+    rule #dasmOpCode( 151,     _ ) => SWAP(8)
+    rule #dasmOpCode( 152,     _ ) => SWAP(9)
+    rule #dasmOpCode( 153,     _ ) => SWAP(10)
+    rule #dasmOpCode( 154,     _ ) => SWAP(11)
+    rule #dasmOpCode( 155,     _ ) => SWAP(12)
+    rule #dasmOpCode( 156,     _ ) => SWAP(13)
+    rule #dasmOpCode( 157,     _ ) => SWAP(14)
+    rule #dasmOpCode( 158,     _ ) => SWAP(15)
+    rule #dasmOpCode( 159,     _ ) => SWAP(16)
+    rule #dasmOpCode( 160,     _ ) => LOG(0)
+    rule #dasmOpCode( 161,     _ ) => LOG(1)
+    rule #dasmOpCode( 162,     _ ) => LOG(2)
+    rule #dasmOpCode( 163,     _ ) => LOG(3)
+    rule #dasmOpCode( 164,     _ ) => LOG(4)
+    rule #dasmOpCode( 240,     _ ) => CREATE
+    rule #dasmOpCode( 241,     _ ) => CALL
+    rule #dasmOpCode( 242,     _ ) => CALLCODE
+    rule #dasmOpCode( 243,     _ ) => RETURN
+    rule #dasmOpCode( 244, SCHED ) => DELEGATECALL requires SCHED =/=K FRONTIER
+    rule #dasmOpCode( 245, SCHED ) => CREATE2      requires Ghascreate2    << SCHED >>
+    rule #dasmOpCode( 250, SCHED ) => STATICCALL   requires Ghasstaticcall << SCHED >>
+    rule #dasmOpCode( 253, SCHED ) => REVERT       requires Ghasrevert     << SCHED >>
+    rule #dasmOpCode( 254,     _ ) => INVALID
+    rule #dasmOpCode( 255,     _ ) => SELFDESTRUCT
+    rule #dasmOpCode(   W,     _ ) => UNDEFINED(W) [owise]
+endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/foundry.md b/include/kframework/foundry.md deleted file mode 100644 index 633ddb62f5..0000000000 --- a/include/kframework/foundry.md +++ /dev/null @@ -1,1536 +0,0 @@ -Foundry Specifications -====================== - -**ACTIVE DEVELOPMENT** - -The Foundry integration allows users to take Solidity property tests and generate K specifications which can be executed using the Haskell symbolic backend. - -Before executing any of the KEVM instructions, make sure that you have the following: - 1. Successfully built or installed KEVM, - 2. The`kevm` binary is on your PATH, - 3. Activated the virtual environment (*applicable only for builds from source*). - -Below we are providing an example usage and a description of all the commands you can use with KEVM to improve your experience. - -Available Commands ------------------- - -Basic commands are (and each can be passed `--help`): - -- `kevm foundry-kompile`: Kompile a definition, generating claims for each Foundry test. - The best options are: - - `--regen` - needed if Solidity sources change, - - `--rekompile` - needed if K lemmas change, or K definition changes, - - `--require` - for adding an extra K file with lemmas, - - `--module-import` - importing an extra K module in one of the added K files with lemmas. - -- `kevm foundry-prove`: Run a given proof using the KCFG-based prover (not supporting loops yet, need to fall back to typical K for that). - The best options are: - - `--reinit` - want to start over from scratch, - - `--no-simplify-init` - do not want to invoke simplification on all the original nodes, can be faster, - - `--max-depth` - increase the space between saved nodes; bigger is faster, - - `--max-iterations` - maximum number of nodes to store in KCFG before giving on attempting proof for that run, - - `--break-every-step` - save a state every opcode, slow, good for debugging, - - `--break-on-calls` - save a state every time a call is made, good to turn on. - - `--verbose` - output what the prover is doing to make sure it's making progress. - -- `kevm foundry-show`: Display the given KCFG so far as text. - Options are: - - `--no-minimize` - do not omit all the gory details, - - `--node` - can be a repeated option, display more information about a given node hash, - - `--node-delta` - displays the delta between two given nodes in the KCFG. - -- `kevm foundry-view-kcfg`: Launch the more interactive exploration of the KCFG (can be done while exploration is running, must Ctrl-C + relaunch to view updates to KCFG). - - The interactive KCFG puts your terminal in *application mode*. To select text in this mode, hold the modifier key provided by your terminal emulator (typically SHIFT or OPTION) while clicking and dragging. Refer to the [Textualize documentation](https://github.com/Textualize/textual/blob/main/FAQ.md#how-can-i-select-and-copy-text-in-a-textual-app) for more information. - -- `kevm foundry-section-edge`: Given an edge in the graph, cut it into sections to get intermediate nodes. - -- `kevm foundry-step-node`: Step from a given node, adding it to the CFG. - -- `kevm foundry-simplify-node`: Simplify a given node, and potentially replace it. - -Example Usage -------------- - -The first step is to ensure the Solidity codebase is compiled and the `out/` directory is generated. - -For example, in the root of this repository, you can run: - -*Build Foundry Project:* - -```sh -$ cd tests/foundry -$ forge build -``` - -*Kompile to generate K specifications:* - -```sh -$ kevm foundry-kompile -``` - -*And discharge some specific test as a proof obligation (inside virtual environment):* - -```sh -$ kevm foundry-prove --test AssertTest.test_assert_true -``` - -Foundry Module for KEVM ------------------------ - -Foundry's testing framework provides a series of cheatcodes so that developers can specify what situation they want to test. -This file describes the KEVM specification of the Foundry testing framework, which includes the definition of said cheatcodes and what does it mean for a test to pass. - -```k -requires "evm.md" -requires "hashed-locations.md" -requires "abi.md" -requires "edsl.md" -requires "lemmas/lemmas.k" - -module FOUNDRY - imports FOUNDRY-SUCCESS - imports FOUNDRY-CHEAT-CODES - imports FOUNDRY-ACCOUNTS - imports EDSL - imports LEMMAS - - configuration - - - - -endmodule -``` - -### Foundry Success Predicate - -Foundry has several baked-in convenience accounts for helping to define the "cheat-codes". -Here we define their addresses, and important storage-locations. - -```k -module FOUNDRY-ACCOUNTS - imports SOLIDITY-FIELDS - - syntax Int ::= #address ( Contract ) [macro] - syntax Contract ::= FoundryContract - syntax Field ::= FoundryField - syntax FoundryContract ::= "FoundryTest" [klabel(contract_FoundryTest)] - | "FoundryCheat" [klabel(contract_FoundryCheat)] - // ------------------------------------------------------------------------- - rule #address(FoundryTest) => 728815563385977040452943777879061427756277306518 // 0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496 - rule #address(FoundryCheat) => 645326474426547203313410069153905908525362434349 // 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D - - syntax FoundryField ::= "Failed" [klabel(slot_failed)] - // ------------------------------------------------------ - rule #loc(FoundryCheat . Failed) => 46308022326495007027972728677917914892729792999299745830475596687180801507328 // 0x6661696c65640000000000000000000000000000000000000000000000000000 - -endmodule -``` - -The Foundry success predicate performs the same checks as [the `is_success` function from Foundry in `evm/src/executor/mod.rs`](https://github.com/foundry-rs/foundry/blob/e530c7325816e4256f62f4426bd9985dc54da831/evm/src/executor/mod.rs#L490). - -These checks are: - -- The call to the test contract has not reverted, and -- `DSTest.assert*` have not failed. - -The last condition is implemented in the [`fail()` function from `DSTest`](https://github.com/dapphub/ds-test/blob/9310e879db8ba3ea6d5c6489a579118fd264a3f5/src/test.sol#L65). -If a DSTest assertion should fail, the `fail()` function stores `bytes32(uint256(0x01))` at the storage slot `bytes32("failed")`. -Hence, checking if a `DSTest.assert*` has failed amounts to reading as a boolean the data from that particular storage slot. - -**TODO**: It should also be checked if the code present in the `FoundryCheat` account is non-empty, and return false if it is. - -```k -module FOUNDRY-SUCCESS - imports EVM - - syntax Bool ::= - "foundry_success" "(" - statusCode: StatusCode "," - failed: Int "," - revertExpected: Bool "," - opcodeExpected: Bool "," - recordEventExpected: Bool "," - eventExpected: Bool - ")" [function, klabel(foundry_success), symbol] - // ------------------------------------------------- - rule foundry_success(EVMC_SUCCESS, 0, false, false, false, false) => true - rule foundry_success(_, _, _, _, _, _) => false [owise] - -endmodule -``` - -### Foundry Cheat Codes - -The configuration of the Foundry Cheat Codes is defined as follwing: -1. The `` subconfiguration stores values which are used during the execution of any kind of `prank` cheat code: - - `` keeps the current address of the contract that initiated the prank. - - `` keeps the current address of the `tx.origin` value. - - `` and `` are addresses to be assigned after the prank call to `msg.sender` and `tx.origin`. - - `` signals if a prank is active or not. - - `` records the current call depth at which the prank was invoked. - - `` tells whether the prank stops by itself after the next call or when a `stopPrank` cheat code is invoked. -2. The `` subconfiguration stores values used for the `expectRevert` cheat code. - - `` flags if the next call is expected to revert or not. - - `` records the depth at which the call is expected to revert. - - `` keeps the expected revert message as a `Bytes`. -3. The `` subconfiguration stores values used for `expect*OPCODE*` cheat codes. - - `` flags if a call opcode is expected. - - `` keeps the expected caller. - - `` keeps expected `msg.value`. - - `` keeps expected `calldata`. - - `` keeps track of what `CALL*` Opcode is expected. -4. The `` subconfiguration stores values used for the `expectEmit` cheat code. - - `` flags if the next emitted Event should be recorded and held for future matches. - - `` flags if an Event is expected to match the one recorded previously. - - `` will store a list of `bool` values that flag if a topic should be checked or not. - - `` flags if the data field should be checked or not. - - `` stores the emitter of an expected Event. -5. The `` subconfiguration stores addresses that can be called and storage slots that can be accessed/modified during the execution. - - `` flags if the whitelist mode is enabled for calls. - - `` flags if the whitelist mode is enabled for storage changes. - - `` - stores the address whitelist. - - `` - stores the storage whitelist containing pairs of addresses and storage indexes. - -```k -module FOUNDRY-CHEAT-CODES - imports EVM - imports EVM-ABI - imports FOUNDRY-ACCOUNTS - imports INFINITE-GAS - - configuration - - - .Account - .Account - .Account - .Account - false - 0 - false - - - false - .Bytes - 0 - - - false - .Account - 0 - .Bytes - .OpcodeType - - - false - false - .List - false - .Account - - - false - false - .Set - .Set - - -``` - -First we have some helpers in K which can: - -- Inject a given boolean condition into's this execution's path condition -- Set the `FoundryCheat . Failed` location to `True`. -```k - syntax KItem ::= #assume ( Bool ) [klabel(foundry_assume), symbol] - // ------------------------------------------------------------------ - rule #assume(B) => . ... ensures B - - syntax KItem ::= "#markAsFailed" [klabel(foundry_markAsFailed)] - // --------------------------------------------------------------- - rule #markAsFailed => . ... - - #address(FoundryCheat) - STORAGE => STORAGE [ #loc(FoundryCheat . Failed) <- 1 ] - ... - -``` - -#### Structure of execution - -The `foundry.call` rule is used to inject specific behaviour for each cheat code. -The rule has a higher priority than any other `#call` rule and will match every call made to the [Foundry cheatcode address](https://book.getfoundry.sh/cheatcodes/#cheatcodes-reference). -The function selector, represented as `#asWord(#range(ARGS, 0, 4))` and the call data `#range(ARGS, 4, lengthBytes(ARGS) -Int 4)` are passed to the `#call_foundry` production, which will further rewrite using rules defined for implemented cheat codes. -Finally, the rule for `#return_foundry` is used to end the execution of the `CALL` OpCode. - -```k - rule [foundry.call]: - (#checkCall _ _ - ~> #call _ CHEAT_ADDR _ _ _ ARGS _ - ~> #return RETSTART RETWIDTH ) - => #call_foundry #asWord(#range(ARGS, 0, 4)) #range(ARGS, 4, lengthBytes(ARGS) -Int 4) - ~> #return_foundry RETSTART RETWIDTH - ... - - _ => .Bytes - requires CHEAT_ADDR ==Int #address(FoundryCheat) - [priority(40)] -``` - -We define two productions named `#return_foundry` and `#call_foundry`, which will be used by each cheat code. -The rule `foundry.return` will rewrite the `#return_foundry` production into other productions that will place the output of the execution into the local memory, refund the gas value of the call and push the value `1` on the call stack. - -```k - syntax KItem ::= "#return_foundry" Int Int [klabel(foundry_return)] - | "#call_foundry" Int Bytes [klabel(foundry_call)] - | "#error_foundry" Int Bytes [klabel(foundry_error)] - // ------------------------------------------------------------------- - rule [foundry.return]: - #return_foundry RETSTART RETWIDTH - => #setLocalMem RETSTART RETWIDTH OUT - ~> #refund GCALL - ~> 1 ~> #push - ... - OUT - GCALL -``` - -We define a new status codes: - - `FOUNDRY_UNIMPLEMENTED`, which signals that the execution ran into an unimplemented cheat code. - - `FOUNDRY_WHITELISTCALL`, which signals that an address outside the whitelist has been called during the execution. - - `FOUNDRY_WHITELISTSTORAGE`, which signals that a storage index of an address outside the whitelist has been changed during the execution. - -```k - syntax ExceptionalStatusCode ::= "FOUNDRY_UNIMPLEMENTED" - | "FOUNDRY_WHITELISTCALL" - | "FOUNDRY_WHITELISTSTORAGE" - // ----------------------------------------------------------- -``` - -Below, we define rules for the `#call_foundry` production, handling the cheat codes. - -#### `assume` - Insert a condition - -``` -function assume(bool) external; -``` - -`foundry.call.assume` will match when the `assume` cheat code function is called. -This rule then takes a `bool` condition from the function call data, represented using the `ARGS` variable, and injects it into the execution path using the `#assume` production. -`==K #bufStrict(32, 1)` is used to mark that the condition should hold. - -```k - rule [foundry.call.assume]: - #call_foundry SELECTOR ARGS => #assume(ARGS ==K #bufStrict(32, 1)) ... - requires SELECTOR ==Int selector ( "assume(bool)" ) - [preserves-definedness] -``` - -#### `deal` - Set a given balance to a given account. - -``` -function deal(address who, uint256 newBalance) external; -``` - -`foundry.call.deal` will match when the `deal` cheat code function is called. -The rule then takes from the function call data the target account, using `#asWord(#range(ARGS, 0, 32)`, and the new balance, using `#asWord(#range(ARGS, 32, 32))`, and forwards them to the `#setBalance` production which updates the account accordingly. - -```k - rule [foundry.call.deal]: - #call_foundry SELECTOR ARGS => #loadAccount #asWord(#range(ARGS, 0, 32)) ~> #setBalance #asWord(#range(ARGS, 0, 32)) #asWord(#range(ARGS, 32, 32)) ... - requires SELECTOR ==Int selector ( "deal(address,uint256)" ) -``` - -#### `etch` - Sets the code of an account. - -``` -function etch(address who, bytes calldata code) external; -``` - -`foundry.call.etch` will match when the `etch` cheat code function is called. -This rule then takes from the function call data the target account, using `#asWord(#range(ARGS, 0, 32)`, and the new bytecode, using `#range(ARGS, CODE_START, CODE_LENGTH)`, where `#asWord(#range(ARGS, 64, 32))` is used to determine the length of the second argument. -The values are forwarded to the `#setCode` production which updates the account accordingly. - -```k - rule [foundry.call.etch]: - #call_foundry SELECTOR ARGS - => #loadAccount #asWord(#range(ARGS, 0, 32)) - ~> #setCode #asWord(#range(ARGS, 0, 32)) #range(ARGS, 96, #asWord(#range(ARGS, 64, 32))) - ... - - requires SELECTOR ==Int selector ( "etch(address,bytes)" ) -``` - -#### `warp` - Sets the block timestamp. - -``` -function warp(uint256) external; -``` - -`foundry.call.warp` will match when the `warp` cheat code function is called. -This rule then takes the `uint256` value from the function call data which is represented as `ARGS` and updates the `` cell. - -```k - rule [foundry.call.warp]: - #call_foundry SELECTOR ARGS => . ... - _ => #asWord(ARGS) - requires SELECTOR ==Int selector( "warp(uint256)" ) -``` - -#### `roll` - Sets the block number. - -``` -function roll(uint256) external; -``` - -`foundry.call.roll` will match when the `roll` cheat code function is called. -This rule then takes the `uint256` value from the function call data which is represented as `ARGS` and updates the `` cell. - -```k - rule [foundry.call.roll]: - #call_foundry SELECTOR ARGS => . ... - _ => #asWord(ARGS) - requires SELECTOR ==Int selector ( "roll(uint256)" ) -``` - -#### `fee` - Sets the block base fee. - -``` -function fee(uint256) external; -``` - -`foundry.call.fee` will match when the `fee` cheat code function is called. -This rule then takes the `uint256` value from the function call data which is represented as `ARGS` and updates the `` cell. - -```k - rule [foundry.call.fee]: - #call_foundry SELECTOR ARGS => . ... - _ => #asWord(ARGS) - requires SELECTOR ==Int selector ( "fee(uint256)" ) -``` - -#### `chainId` - Sets the chain ID. - -``` -function chainId(uint256) external; -``` - -`foundry.call.chainId` will match when the `chainId` cheat code function is called. -This rule then takes the `uint256` value from the function call data which is represented as `ARGS` and updates the `` cell. - -```k - rule [foundry.call.chainId]: - #call_foundry SELECTOR ARGS => . ... - _ => #asWord(ARGS) - requires SELECTOR ==Int selector ( "chainId(uint256)" ) -``` - -#### `coinbase` - Sets the block coinbase. - -``` -function coinbase(address) external; -``` - -`foundry.call.coinbase` will match when the `coinbase` cheat code function is called. -This rule then takes the `uint256` value from the function call data which is represented as `ARGS` and updates the `` cell. - -```k - rule [foundry.call.coinbase]: - #call_foundry SELECTOR ARGS => . ... - _ => #asWord(ARGS) - requires SELECTOR ==Int selector ( "coinbase(address)" ) -``` - -#### `label` - Sets a label for a given address. - -``` -function label(address addr, string calldata label) external; -``` - -`foundry.call.label` will match when the `label` cheat code function is called. -If an address is labelled, the label will show up in test traces instead of the address. -However, there is no change on the state and therefore this rule just skips the cheatcode invocation. - -```k - rule [foundry.call.label]: - #call_foundry SELECTOR _ARGS => . ... - requires SELECTOR ==Int selector ( "label(address,string)" ) -``` - -#### `getNonce` - Gets the nonce of the given account. - -``` -function getNonce(address account) external returns (uint64); -``` - -`foundry.call.getNonce` will match when the `getNonce` cheat code function is called. -This rule takes the `address` value from the function call data, which is represented as `ARGS`, and forwards it to the `#returnNonce` production, which will update the `` cell with the `nonce` of the account. - -```k - rule [foundry.call.getNonce]: - #call_foundry SELECTOR ARGS => #loadAccount #asWord(ARGS) ~> #returnNonce #asWord(ARGS) ... - requires SELECTOR ==Int selector ( "getNonce(address)" ) -``` - -#### `setNonce` - Sets the nonce of the given account. - -``` -function setNonce(address account, uint64 nonce) external; -``` - -`foundry.call.setNonce` will match when the `setNonce` function is called. -This rule takes the `address` value and `uint64` value corresponding to new nonce using from the function call data, which is represented as `ARGS` forwards it to the `#setNonce` production, which will update the nonce of the account. - -```k - rule [foundry.call.setNonce]: - #call_foundry SELECTOR ARGS => #loadAccount #asWord(#range(ARGS, 0, 32)) ~> #setNonce #asWord(#range(ARGS, 0, 32)) #asWord(#range(ARGS, 32, 32)) ... - requires SELECTOR ==Int selector ( "setNonce(address,uint64)" ) -``` - -#### `addr` - Computes the address for a given private key. - -``` -function addr(uint256 privateKey) external returns (address); -``` - -`foundry.call.addr` will match when the `addr` cheat code function is called. -This rule takes `uint256` private key from the function call data, which is represented as `ARGS`, and computes the address. -The `` cell will be updated with the value of the address generated from the private key, padded to 32 bytes wide. - -```k - rule [foundry.call.addr]: - #call_foundry SELECTOR ARGS => . ... - _ => #bufStrict(32, #addrFromPrivateKey(#unparseDataBytes(ARGS))) - requires SELECTOR ==Int selector ( "addr(uint256)" ) -``` - -#### `load` - Loads a storage slot from an address. - -``` -function load(address account, bytes32 slot) external returns (bytes32); -``` - -`foundry.call.load` will match when the `load` cheat code function is called. -This rule loads the storage slot identified by `#asWord(#range(ARGS, 32, 32))` (referring to `slot` argument) from account `#asWord(#range(ARGS, 0, 32))` (referring to `account`). -The value of the identified storage slot is placed in the `` cell using the `#returnStorage` production. - -```k - rule [foundry.call.load]: - #call_foundry SELECTOR ARGS => #loadAccount #asWord(#range(ARGS, 0, 32)) ~> #returnStorage #asWord(#range(ARGS, 0, 32)) #asWord(#range(ARGS, 32, 32)) ... - requires SELECTOR ==Int selector ( "load(address,bytes32)" ) -``` - -#### `store` - Stores a value to an address' storage slot. - -``` -function store(address account, bytes32 slot, bytes32 value) external; -``` - -`foundry.call.store` will match when the `store` cheat code function is called. -This rule then takes from the function call data the account using `#asWord(#range(ARGS, 0, 32))` and the new slot value using `#asWord(#range(ARGS, 32, 32))` and updates the slot denoted by `#asWord(#range(ARGS, 64, 32))`. - -```k - rule [foundry.call.store]: - #call_foundry SELECTOR ARGS => #loadAccount #asWord(#range(ARGS, 0, 32)) ~> #setStorage #asWord(#range(ARGS, 0, 32)) #asWord(#range(ARGS, 32, 32)) #asWord(#range(ARGS, 64, 32)) ... - requires SELECTOR ==Int selector ( "store(address,bytes32,bytes32)" ) -``` - -#### `symbolicStorage` - Makes the storage of the given address completely symbolic. - -``` -function symbolicStorage(address) external; -``` - -`foundry.call.symbolicStorage` will match when the `symbolicStorage` cheat code function is called. -This rule then takes the address using `#asWord(#range(ARGS, 0, 32))` and makes its storage completely symbolic. - -```k - rule [foundry.call.symbolicStorage]: - #call_foundry SELECTOR ARGS => #loadAccount #asWord(ARGS) ~> #setSymbolicStorage #asWord(ARGS) ... - requires SELECTOR ==Int selector ( "symbolicStorage(address)" ) -``` - -#### `freshUInt` - Returns a single symbolic unsigned integer. - -``` -function freshUInt(uint8) external returns (uint256); -``` - -`foundry.call.freshUInt` will match when the `freshUInt` cheat code function is called. -This rule returns a symbolic integer of up to the bit width that was sent as an argument. - -```{.k .symbolic} - rule [foundry.call.freshUInt]: - #call_foundry SELECTOR ARGS => . ... - _ => #bufStrict(32, ?WORD) - requires SELECTOR ==Int selector ( "freshUInt(uint8)" ) - andBool 0 #call_foundry SELECTOR _ => . ...
- _ => #bufStrict(32, ?WORD) - requires SELECTOR ==Int selector ( "freshBool()" ) - ensures #rangeBool(?WORD) -``` - -Expecting the next call to revert ---------------------------------- - -``` -function expectRevert() external; -function expectRevert(bytes4 msg) external; -function expectRevert(bytes calldata msg) external; -``` - -All cheat code calls which take place while `expectRevert` is active are ignored. - -```k - rule [foundry.call.ignoreCalls]: - #call_foundry _ _ => . ... - - true - ... - - [priority(35)] -``` - -The `#halt` production is used to examine the end of each call in KEVM. -If the call depth of the current call is lower than the call depth of the `expectRevert` cheat code and the `` is not `EVMC_SUCCESS`, the `#checkRevertReason` will be used to compare the output of the call with the expect reason provided. - -```k - rule [foundry.handleExpectRevert]: - (. => #checkRevertReason ~> #clearExpectRevert) ~> #halt ... - SC - CD - - true - ED - ... - - requires CD <=Int ED - andBool SC =/=K EVMC_SUCCESS - [priority(40)] -``` - -If the call is successful, a revert is triggered and the `FAILED` location of the `Foundry` contract is set to `true` using `#markAsFailed`. - -```k - rule [foundry.handleExpectRevert.error]: - (. => #markAsFailed ~> #clearExpectRevert) ~> #halt ... - EVMC_SUCCESS => EVMC_REVERT - CD - - true - ED - ... - - requires CD <=Int ED - [priority(40)] -``` - -If the `expectRevert()` selector is matched, call the `#setExpectRevert` production to initialize the `` subconfiguration. - -```k - rule [foundry.call.expectRevert]: - #call_foundry SELECTOR ARGS => #setExpectRevert ARGS ... - requires SELECTOR ==Int selector ( "expectRevert()" ) - orBool SELECTOR ==Int selector ( "expectRevert(bytes)" ) -``` - -Expecting a specific CALL/CREATE opcode ---------------------------------------- - -First we define a sort to identify expected opcodes. - -```k - syntax OpcodeType ::= ".OpcodeType" | "Call" | "Static" | "Delegate" | "Create" | "Create2" -``` - -If the `expect*OPCODE*` selector is matched, the rule will load the account into the state and add the `#setExpectOpcode` production to the K cell to initialize the `` subconfiguration with the given parameters. - -```k - rule [foundry.call.expectStaticCall]: - #call_foundry SELECTOR ARGS - => #loadAccount #asWord(#range(ARGS, 0, 32)) - ~> #setExpectOpcode #asWord(#range(ARGS, 0, 32)) #range(ARGS, 96, #asWord(#range(ARGS, 64, 32))) 0 Static - ... - - requires SELECTOR ==Int selector ( "expectStaticCall(address,bytes)" ) - - rule [foundry.call.expectDelegateCall]: - #call_foundry SELECTOR ARGS - => #loadAccount #asWord(#range(ARGS, 0, 32)) - ~> #setExpectOpcode #asWord(#range(ARGS, 0, 32)) #range(ARGS, 96, #asWord(#range(ARGS, 64, 32))) 0 Delegate - ... - - requires SELECTOR ==Int selector ( "expectDelegateCall(address,bytes)" ) - - rule [foundry.call.expectRegularCall]: - #call_foundry SELECTOR ARGS - => #loadAccount #asWord(#range(ARGS, 0, 32)) - ~> #setExpectOpcode #asWord(#range(ARGS, 0, 32)) #range(ARGS, 128, #asWord(#range(ARGS, 96, 32))) #asWord(#range(ARGS, 32, 32)) Call - ... - - requires SELECTOR ==Int selector ( "expectRegularCall(address,uint256,bytes)" ) - - rule [foundry.call.expectCreate]: - #call_foundry SELECTOR ARGS - => #loadAccount #asWord(#range(ARGS, 0, 32)) - ~> #setExpectOpcode #asWord(#range(ARGS, 0, 32)) #range(ARGS, 128, #asWord(#range(ARGS, 96, 32))) #asWord(#range(ARGS, 32, 32)) Create - ... - - requires SELECTOR ==Int selector ( "expectCreate(address,uint256,bytes)" ) - - rule [foundry.call.expectCreate2]: - #call_foundry SELECTOR ARGS - => #loadAccount #asWord(#range(ARGS, 0, 32)) - ~> #setExpectOpcode #asWord(#range(ARGS, 0, 32)) #range(ARGS, 128, #asWord(#range(ARGS, 96, 32))) #asWord(#range(ARGS, 32, 32)) Create2 - ... - - requires SELECTOR ==Int selector ( "expectCreate2(address,uint256,bytes)" ) -``` - -Next, everytime one of the `STATICCALL`, `DELEGATECALL`, `CALL`, `CREATE` or `CREATE2` opcodes is executed, we check if the `sender` address, `msg.value` and `calldata` match the expected values. -`calldata` needs to match only the first byte. - -```k - rule (. => #clearExpectOpcode) ~> STATICCALL _GCAP ACCTTO ARGSTART ARGWIDTH _RETSTART _RETWIDTH ... - LM - - true - ACCTTO - DATA - Static - ... - - requires #range(LM, ARGSTART, ARGWIDTH) ==K #range(DATA, 0, ARGWIDTH) - [priority(40)] - - rule (. => #clearExpectOpcode) ~> DELEGATECALL _GCAP ACCTTO ARGSTART ARGWIDTH _RETSTART _RETWIDTH ... - LM - - true - ACCTTO - DATA - Delegate - ... - - requires #range(LM, ARGSTART, ARGWIDTH) ==K #range(DATA, 0, ARGWIDTH) - [priority(40)] - - rule (. => #clearExpectOpcode) ~> CALL _GCAP ACCTTO VALUE ARGSTART ARGWIDTH _RETSTART _RETWIDTH ... - LM - - true - ACCTTO - DATA - Call - VALUE - - requires #range(LM, ARGSTART, ARGWIDTH) ==K #range(DATA, 0, ARGWIDTH) - [priority(40)] - - rule (. => #clearExpectOpcode) ~> CREATE VALUE MEMSTART MEMWIDTH ... - LM - ACCT - - true - ACCT - DATA - Create - VALUE - - requires #range(LM, MEMSTART, MEMWIDTH) ==K #range(DATA, 0, MEMWIDTH) - [priority(40)] - - rule (. => #clearExpectOpcode) ~> CREATE2 VALUE MEMSTART MEMWIDTH _SALT ... - LM - ACCT - - true - ACCT - DATA - Create2 - VALUE - - requires #range(LM, MEMSTART, MEMWIDTH) ==K #range(DATA, 0, MEMWIDTH) - [priority(40)] -``` - -Pranks ------- - -#### Injecting addresses in a call - -To inject the pranked `msg.sender` and `tx.origin` we add two new rules for the `#call` production, defined in [evm.md](./evm.md). -These rules have a higher priority. -The only difference between these rules is that one will also set the `tx.origin`, if required. -First, will match only if the `` cell has the `true` value, signaling that a prank is active, and if the current depth of the call is at the same level with the depth at which the prank was invoked. -This is needed in order to prevent overwriting the caller for subcalls. -Finally, the original sender of the transaction, `ACCTFROM` is changed to the new caller, `NCL`. - -```k - rule [foundry.prank.injectCaller]: - #call (ACCTFROM => NCL) _ACCTTO _ACCTCODE _VALUE _APPVALUE _ARGS _STATIC ... - CD - - NCL - .Account - true - CD - ... - - requires NCL =/=K .Account - andBool ACCTFROM =/=Int NCL - [priority(40)] - - rule [foundry.prank.injectCallerAndOrigin]: - #call (ACCTFROM => NCL) _ACCTTO _ACCTCODE _VALUE _APPVALUE _ARGS _STATIC ... - CD - _ => NOG - - NCL - NOG - true - CD - ... - - requires NCL =/=K .Account - andBool NOG =/=K .Account - andBool ACCTFROM =/=Int NCL - [priority(40)] -``` - -We define a new rule for the `#halt ~> #return _ _` production that will trigger the `#endPrank` rules if the prank was set only for a single call and if the current call depth is equal to the depth at which `prank` was invoked plus one. - - -```k - rule (. => #endPrank) ~> #halt ~> #return _RETSTART _RETWIDTH ... - CD - - true - PD - ... - - requires CD ==Int PD +Int 1 - [priority(40)] -``` - -#### `startPrank` - Sets `msg.sender` and `tx.origin` for all subsequent calls until `stopPrank` is called. - -``` -function startPrank(address) external; -function startPrank(address sender, address origin) external; -``` - -`foundry.call.startPrank` and `foundry.call.startPrankWithOrigin` will match when either of `startPrank` functions are called. -The addresses which will be used to impersonate future calls are retrieved from the local memory using `#asWord(#range(ARGS, 0, 32)` for the sender, and `#asWord(#range(ARGS, 32, 32)` for the origin (only for the `foundry.call.startPrankWithOrigin` rule). -The `#loadAccount` production is used to load accounts into the state if they are missing. - -```k - rule [foundry.call.startPrank]: - #call_foundry SELECTOR ARGS => #loadAccount #asWord(ARGS) ~> #setPrank #asWord(ARGS) .Account false ... - requires SELECTOR ==Int selector ( "startPrank(address)" ) - - rule [foundry.call.startPrankWithOrigin]: - #call_foundry SELECTOR ARGS => #loadAccount #asWord(#range(ARGS, 0, 32)) ~> #loadAccount #asWord(#range(ARGS, 32, 32)) ~> #setPrank #asWord(#range(ARGS, 0, 32)) #asWord(#range(ARGS, 32, 32)) false ... - requires SELECTOR ==Int selector ( "startPrank(address,address)" ) -``` - -#### `prank` - Impersonate `msg.sender` and `tx.origin` for only for the next call. - -``` -function prank(address) external; -function prank(address sender, address origin) external; -``` - -```k - rule [foundry.call.prank]: - #call_foundry SELECTOR ARGS => #loadAccount #asWord(ARGS) ~> #setPrank #asWord(ARGS) .Account true ... - requires SELECTOR ==Int selector ( "prank(address)" ) - - rule [foundry.call.prankWithOrigin]: - #call_foundry SELECTOR ARGS => #loadAccount #asWord(#range(ARGS, 0, 32)) ~> #loadAccount #asWord(#range(ARGS, 32, 32)) ~> #setPrank #asWord(#range(ARGS, 0, 32)) #asWord(#range(ARGS, 32, 32)) true ... - requires SELECTOR ==Int selector ( "prank(address,address)" ) -``` - -#### `stopPrank` - Stops impersonating `msg.sender` and `tx.origin`. - -``` -function stopPrank() external; -``` - -`foundry.call.stopPrank` will match when `stopPrank` function will be called. This rule will invoke `#endPrank` which will clean up the `` subconfiguration and restore the previous values of the `msg.sender` and `tx.origin`. - -```k - rule [foundry.call.stopPrank]: - #call_foundry SELECTOR _ => #endPrank ... - requires SELECTOR ==Int selector ( "stopPrank()" ) -``` - -Gas Manipulation ----------------- - -``` -function infiniteGas() external; -``` - -Set the remaining gas to an infinite value. -This is useful for running tests without them running out of gas. - -```{.k .bytes .symbolic} - rule [foundry.call.infiniteGas]: - #call_foundry SELECTOR _ARGS => . ... - _ => #gas(?_VGAS) - _ => #gas(?_VCALLGAS) - requires SELECTOR ==Int selector ( "infiniteGas()" ) -``` - -Expecting Events ----------------- -``` -function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData) external; -function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData, address emitter) external; -``` - -Assert a specific log is emitted before the end of the current function. - -Call the cheat code, specifying whether we should check the first, second or third topic, and the log data. -Topic 0 is always checked. -Emit the event we are supposed to see before the end of the current function. -Perform the call. -If the event is not available in the current scope (e.g. if we are using an interface, or an external smart contract), we can define the event ourselves with an identical event signature. - -There are 2 signatures: - -Without checking the emitter address: Asserts the topics match without checking the emitting address. -With address: Asserts the topics match and that the emitting address matches. - -```k - rule [foundry.call.expectEmit]: - #call_foundry SELECTOR ARGS => #setExpectEmit word2Bool(#asWord(#range(ARGS, 0, 32))) word2Bool(#asWord(#range(ARGS, 32, 32))) word2Bool(#asWord(#range(ARGS, 64, 32))) word2Bool(#asWord(#range(ARGS, 96, 32))) .Account ... - requires SELECTOR ==Int selector ( "expectEmit(bool,bool,bool,bool)" ) - - rule [foundry.call.expectEmitAddr]: - #call_foundry SELECTOR ARGS => #setExpectEmit word2Bool(#asWord(#range(ARGS, 0, 32))) word2Bool(#asWord(#range(ARGS, 32, 32))) word2Bool(#asWord(#range(ARGS, 64, 32))) word2Bool(#asWord(#range(ARGS, 96, 32))) #asWord(#range(ARGS, 128, 32)) ... - requires SELECTOR ==Int selector ( "expectEmit(bool,bool,bool,bool,address)" ) -``` - -```k - rule LOG(N) _MEMSTART _MEMWIDTH ... - - true => false - false => true - ... - - WS - requires #sizeWordStack(WS) >=Int N - [priority(40)] - - rule (. => #clearExpectEmit) ~> LOG(N) MEMSTART MEMWIDTH ... - _ ListItem({ _ | TOPICS | DATA }:SubstateLogEntry) - - false - true - CHECKS - CHECKDATA - .Account - - WS - LM - requires #sizeWordStack(WS) >=Int N - andBool #checkTopics(CHECKS, TOPICS, WordStack2List(#take(N, WS))) - andBool ((notBool CHECKDATA) orBool (#asWord(DATA) ==Int #asWord(#range(LM, MEMSTART, MEMWIDTH)))) - [priority(40)] - - rule (. => #clearExpectEmit) ~> LOG(N) MEMSTART MEMWIDTH ... - _ ListItem({ _ | TOPICS | DATA }:SubstateLogEntry) - ACCT - - false - true - CHECKS - CHECKDATA - ACCT - - WS - LM - requires #sizeWordStack(WS) >=Int N - andBool #checkTopics(CHECKS, TOPICS, WordStack2List(#take(N, WS))) - andBool ((notBool CHECKDATA) orBool (#asWord(DATA) ==Int #asWord(#range(LM, MEMSTART, MEMWIDTH)))) - [priority(40)] -``` - - -Restricting the accounts that can be called in KEVM ---------------------------------------------------- - -A `StorageSlot` pair is formed from an address and a storage index. - -```k - syntax StorageSlot ::= "{" Int "|" Int "}" - // ------------------------------------------ -``` - -The `ACCTTO` value is checked for each call while the whitelist restriction is enabled for calls. -If the address is not in the whitelist `WLIST` then `KEVM` goes into an error state providing the `ACCTTO` value. - -```k - rule [foundry.catchNonWhitelistedCalls]: - (#call _ ACCTTO _ _ _ _ false - ~> #popCallStack - ~> #popWorldState) => #end FOUNDRY_WHITELISTCALL ... - - true - WLIST - ... - - requires notBool ACCTTO in WLIST - [priority(40)] -``` - -When the storage whitelist restriction is enabled, the `SSTORE` operation will check if the address and the storage index are in the whitelist. -If the pair is not present in the whitelist `WLIST` then `KEVM` goes into an error state providing the address and the storage index values. - -```k - rule [foundry.catchNonWhitelistedStorageChanges]: - SSTORE INDEX _ => #end FOUNDRY_WHITELISTSTORAGE ... - ACCT - _ => FOUNDRY_WHITELISTSTORAGE - - true - WLIST - ... - - requires notBool {ACCT|INDEX} in WLIST - [priority(40)] -``` - -#### `allowCallsToAddress` - Add an account address to a whitelist. - -``` -function allowCallsToAddress(address) external; -``` - -Adds an account address to the whitelist. The execution of the modified KEVM will stop when a call has been made to an address which is not in the whitelist. - -```k - rule [foundry.allowCallsToAddress]: - #call_foundry SELECTOR ARGS => #loadAccount #asWord(ARGS) ~> #addAddressToWhitelist #asWord(ARGS) ... - requires SELECTOR ==Int selector ( "allowCallsToAddress(address)" ) -``` - -#### `allowChangesToStorage` - Add an account address and a storage slot to a whitelist. - -``` -function allowChangesToStorage(address,uint256) external; -``` - -```k - rule [foundry.allowStorageSlotToAddress]: - #call_foundry SELECTOR ARGS => #loadAccount #asWord(ARGS) ~> #addStorageSlotToWhitelist { #asWord(#range(ARGS, 0, 32)) | #asWord(#range(ARGS, 32, 32)) } ... - requires SELECTOR ==Int selector ( "allowChangesToStorage(address,uint256)" ) -``` - - -#### `sign` - Signs a digest with private key - -``` -function sign(uint256 privateKey, bytes32 digest) external returns (uint8 v, bytes32 r, bytes32 s); -``` - -`foundry.call.sign` will match when the `sign` cheat code function is called. -This rule then takes from the `privateKey` to sign using `#range(ARGS,0,32)` and the `digest` to be signed using `#range(ARGS, 32, 32)`. -To perform the signature we use the `ECDSASign ( String, String )` function (from KEVM). -This function receives as arguments 2 strings: the data to be signed and the private key, therefore we use `#unparseByteStack` to convert the `Bytes` with the `privateKey` and `digest` into strings. -The `ECDSASign` function returns the signed data in [r,s,v] form, which we convert to a `Bytes` using `#parseByteStack`. - -```k - rule [foundry.call.sign]: - #call_foundry SELECTOR ARGS => . ... - _ => #sign(#range(ARGS, 32, 32),#range(ARGS,0,32)) - requires SELECTOR ==Int selector ( "sign(uint256,bytes32)" ) -``` - -Otherwise, throw an error for any other call to the Foundry contract. - -```k - rule [foundry.call.owise]: - #call_foundry SELECTOR ARGS => #error_foundry SELECTOR ARGS ... - _ => FOUNDRY_UNIMPLEMENTED - [owise] -``` - -Utils ------ - -- `#loadAccount ACCT` creates a new, empty account for `ACCT` if it does not already exist. Otherwise, it has no effect. - -```k - syntax KItem ::= "#loadAccount" Int [klabel(foundry_loadAccount)] - // ----------------------------------------------------------------- - rule #loadAccount ACCT => #accessAccounts ACCT ... ACCT ... - rule #loadAccount ACCT => #newAccount ACCT ~> #accessAccounts ACCT ... [owise] -``` - -- `#setBalance ACCTID NEWBAL` sets the balance of a given account. - -```k - syntax KItem ::= "#setBalance" Int Int [klabel(foundry_setBalance)] - // ------------------------------------------------------------------- - rule #setBalance ACCTID NEWBAL => . ... - - ACCTID - _ => NEWBAL - ... - -``` - -- `#setCode ACCTID CODE` sets the code of a given account. - -```k - syntax KItem ::= "#setCode" Int Bytes [klabel(foundry_setCode)] - // --------------------------------------------------------------- - rule #setCode ACCTID CODE => . ... - - ACCTID - _ => #if #asWord(CODE) ==Int 0 #then .Bytes #else CODE #fi - ... - -``` - -- `#returnNonce ACCTID` takes the nonce of a given account and places it on the `` cell. - -```k - syntax KItem ::= "#returnNonce" Int [klabel(foundry_returnNonce)] - // ----------------------------------------------------------------- - rule #returnNonce ACCTID => . ... - _ => #bufStrict(32, NONCE) - - ACCTID - NONCE - ... - -``` - -- `#setNonce ACCTID NONCE` takes a given account and a given nonce and update the account accordingly. - -```k - syntax KItem ::= "#setNonce" Int Int [klabel(foundry_setNonce)] - // ---------------------------------------------------------------- - rule #setNonce ACCTID NONCE => . ... - - ACCTID - _ => NONCE - ... - -``` - -- `#returnStorage ACCTID LOC` takes a storage value from a given account and places it on the `` cell. - -```k - syntax KItem ::= "#returnStorage" Int Int [klabel(foundry_returnStorage)] - // ------------------------------------------------------------------------- - rule #returnStorage ACCTID LOC => . ... - _ => #bufStrict(32, #lookup(STORAGE, LOC)) - - ACCTID - STORAGE - ... - -``` - -- `#setStorage ACCTID LOC VALUE` sets a given value to a given location of an account. - -```k - syntax KItem ::= "#setStorage" Int Int Int [klabel(foundry_setStorage)] - // ----------------------------------------------------------------------- - rule #setStorage ACCTID LOC VALUE => . ... - - ACCTID - STORAGE => STORAGE [ LOC <- VALUE ] - ... - -``` - -`#setSymbolicStorage ACCTID` takes a given account and makes its storage fully symbolic. - -```k - syntax KItem ::= "#setSymbolicStorage" Int [klabel(foundry_setSymbolicStorage)] -``` - -```{.k .symbolic} - rule #setSymbolicStorage ACCTID => . ... - - ACCTID - _ => ?STORAGE - _ => ?STORAGE - ... - -``` - -- `#setExpectRevert` sets the `` subconfiguration with the current call depth and the expected message from `expectRevert`. - -```k - syntax KItem ::= "#setExpectRevert" Bytes [klabel(foundry_setExpectRevert)] - // --------------------------------------------------------------------------- - rule #setExpectRevert EXPECTED => . ... - CD - - false => true - _ => CD +Int 1 - _ => EXPECTED - -``` - -- `#clearExpectRevert` sets the `` subconfiguration to initial values. - -```k - syntax KItem ::= "#clearExpectRevert" [klabel(foundry_clearExpectRevert)] - // ------------------------------------------------------------------------- - rule #clearExpectRevert => . ... - _ => #buf (512, 0) - - _ => false - _ => 0 - _ => .Bytes - -``` - -- `#encodeOutput` - will encode the output `Bytes` to match the encoding of the `Bytes` in `` cell. - - If the `revert` instruction and the `expectRevert` cheat code are used with with a custom error, then `expectRevert` will store the message with the encoding `abi.encode(abi.encodeWithSelector(CustomError.selector, 1, 2))`, while the output cell will contain only the `abi.encodeWithSelector(CustomError.selector, 1, 2)`. - - If the `revert` instruction and the `expectRevert` cheat code are used with with a string, then `expectRevert` will store the only the encoded string, while the `` cell will store the encoded built-in error `Error(string)`. - Since the encoding `abi.encode(abi.encodeWithSelector(CustomError.selector, 1, 2))` cannot be easily decoded when symbolic variables are used, the `` Bytes is encoded again when the default `Error(string)` is not used. - -```k - syntax Bytes ::= "#encodeOutput" "(" Bytes ")" [function, total, klabel(foundry_encodeOutput)] - // ---------------------------------------------------------------------------------------------- - rule #encodeOutput(BA) => #abiCallData("expectRevert", #bytes(BA)) requires notBool #range(BA, 0, 4) ==K Int2Bytes(4, selector("Error(string)"), BE) - rule #encodeOutput(BA) => BA [owise] -``` - -- `#checkRevertReason` will compare the contents of the `` cell with the `Bytes` from ``. - -```k - syntax KItem ::= "#checkRevertReason" [klabel(foundry_checkRevertReason)] - // ------------------------------------------------------------------------- - rule #checkRevertReason => . ... - _ => EVMC_SUCCESS - OUT - - REASON - ... - - requires #matchReason(REASON, #encodeOutput(OUT)) - - rule #checkRevertReason => #markAsFailed ... - OUT - - REASON - ... - - requires notBool #matchReason(REASON, #encodeOutput(OUT)) -``` - -- `#matchReason(REASON,OUT)` will check if the returned message matches the expected reason of the revert. -Will also return true if REASON is `.Bytes`. - -```k - syntax Bool ::= "#matchReason" "(" Bytes "," Bytes ")" [function, klabel(foundry_matchReason)] - // ---------------------------------------------------------------------------------------------- - rule #matchReason(REASON, _) => true requires REASON ==K .Bytes - rule #matchReason(REASON, OUT) => REASON ==K #range(OUT, 4, lengthBytes(OUT) -Int 4) requires REASON =/=K .Bytes -``` - -- `#setExpectOpcode` initializes the `` subconfiguration with an expected `Address`, and `Bytes` to match the calldata. -`CallType` is used to specify what `CALL*` opcode is expected. - -```k - syntax KItem ::= "#setExpectOpcode" Account Bytes Int OpcodeType [klabel(foundry_setExpectOpcode)] - // -------------------------------------------------------------------------------------------------- - rule #setExpectOpcode ACCT DATA VALUE OPTYPE => . ... - - _ => true - _ => ACCT - _ => DATA - _ => VALUE - _ => OPTYPE - -``` - -- `#clearExpectOpcode` restore the `` subconfiguration to its initial values. - -```k - syntax KItem ::= "#clearExpectOpcode" [klabel(foundry_clearExpectOpcode)] - // ------------------------------------------------------------------------- - rule #clearExpectOpcode => . ... - - _ => false - _ => .Account - _ => .Bytes - _ => .OpcodeType - _ => 0 - -``` - -- `#setPrank NEWCALLER NEWORIGIN SINGLEPRANK` will set the `` subconfiguration for the given accounts. - -```k - syntax KItem ::= "#setPrank" Int Account Bool [klabel(foundry_setPrank)] - // ------------------------------------------------------------------------ - rule #setPrank NEWCALLER NEWORIGIN SINGLEPRANK => . ... - CD - CL - OG - - .Account => CL - .Account => OG - _ => NEWCALLER - _ => NEWORIGIN - false => true - _ => CD - _ => SINGLEPRANK - -``` - -- `#endPrank` will end the prank, restoring the previous caller and origin to the `` and `` cells in the configuration. -If the production is matched when no prank is active, it will be ignored. - -```k - syntax KItem ::= "#endPrank" [klabel(foundry_endPrank)] - // ------------------------------------------------------- - rule #endPrank => #clearPrank ... - _ => CL - _ => OG - - CL - OG - true - ... - - - rule #endPrank => . ... - - false - ... - -``` - -- `#clearPrank` will clear the prank subconfiguration. - -```k - syntax KItem ::= "#clearPrank" [klabel(foundry_clearPrank)] - // ----------------------------------------------------------- - rule #clearPrank => . ... - - _ => .Account - _ => .Account - _ => .Account - _ => .Account - _ => false - _ => 0 - _ => false - -``` -```k - syntax Bytes ::= #sign ( Bytes , Bytes ) [function,klabel(foundry_sign)] - // ------------------------------------------------------------------------ - rule #sign(BA1, BA2) => #parseByteStack(ECDSASign(#unparseByteStack(BA1), #unparseByteStack(BA2))) [concrete] -``` - -- `#setExpectEmit` will initialize the `` subconfiguration, based on the arguments provided with the `expectEmit` cheat code. - -```k - syntax KItem ::= "#setExpectEmit" Bool Bool Bool Bool Account [klabel(foundry_setExpectEmit)] - // --------------------------------------------------------------------------------------------- - rule #setExpectEmit T1 T2 T3 CHECKDATA ACCT => . ... - - _ => true - _ => false - _ => ListItem(true) ListItem(T1) ListItem(T2) ListItem(T3) .List - _ => CHECKDATA - _ => ACCT - -``` - -- `#clearExpectEmit` is used to clear the `` subconfiguration and restore initial values. - -```k - syntax KItem ::= "#clearExpectEmit" [klabel(foundry_clearExpectEmit)] - // --------------------------------------------------------------------- - rule #clearExpectEmit => . ... - - _ => false - _ => false - _ => .List - _ => false - _ => .Account - -``` - -- `#checkTopics` and `#checkTopic` are functions that compare the `TOPICS` of the expected `Event` with those of the currently emitted `Event`. - -```k - syntax Bool ::= "#checkTopic" "(" Bool "," Int "," Int ")" [function, klabel(foundry_checkTopic)] - | "#checkTopics" "(" List "," List "," List ")" [function, klabel(foundry_checkTopics)] - // ----------------------------------------------------------------------------------------------------- - rule #checkTopic(CHECK, V1, V2) => (notBool CHECK) orBool (V1 ==Int V2) - - rule #checkTopics(.List, _, _) => true - rule #checkTopics(ListItem(true), L1, L2) => false requires L1 ==K .List orBool L2 ==K .List - rule #checkTopics(ListItem(false), L1, L2) => true requires L1 ==K .List orBool L2 ==K .List - rule #checkTopics(ListItem(CHECK) CHECKS, ListItem(V1) L1, ListItem(V2) L2) => #checkTopic(CHECK, V1, V2) andBool #checkTopics(CHECKS, L1, L2) -``` - -- `#addAddressToWhitelist` enables the whitelist restriction for calls and adds an address to the whitelist. - -```k - syntax KItem ::= "#addAddressToWhitelist" Int [klabel(foundry_addAddressToWhitelist)] - // ------------------------------------------------------------------------------------- - rule #addAddressToWhitelist ACCT => . ... - - _ => true - WLIST => WLIST SetItem(ACCT) - ... - -``` - -- `#addStorageSlotToWhitelist` enables the whitelist restriction for storage chagnes and adds a `StorageSlot` item to the whitelist. - -```k - syntax KItem ::= "#addStorageSlotToWhitelist" StorageSlot [klabel(foundry_addStorageSlotToWhitelist)] - // ----------------------------------------------------------------------------------------------------- - rule #addStorageSlotToWhitelist SLOT => . ... - - _ => true - WLIST => WLIST SetItem(SLOT) - ... - -``` - -- selectors for cheat code functions. - -```k - rule ( selector ( "assume(bool)" ) => 1281615202 ) - rule ( selector ( "deal(address,uint256)" ) => 3364511341 ) - rule ( selector ( "etch(address,bytes)" ) => 3033974658 ) - rule ( selector ( "warp(uint256)" ) => 3856056066 ) - rule ( selector ( "roll(uint256)" ) => 528174896 ) - rule ( selector ( "fee(uint256)" ) => 968063664 ) - rule ( selector ( "chainId(uint256)" ) => 1078582738 ) - rule ( selector ( "coinbase(address)" ) => 4282924116 ) - rule ( selector ( "label(address,string)" ) => 3327641368 ) - rule ( selector ( "getNonce(address)" ) => 755185067 ) - rule ( selector ( "addr(uint256)" ) => 4288775753 ) - rule ( selector ( "load(address,bytes32)" ) => 1719639408 ) - rule ( selector ( "store(address,bytes32,bytes32)" ) => 1892290747 ) - rule ( selector ( "setNonce(address,uint64)" ) => 4175530839 ) - rule ( selector ( "expectRevert()" ) => 4102309908 ) - rule ( selector ( "expectRevert(bytes)" ) => 4069379763 ) - rule ( selector ( "startPrank(address)" ) => 105151830 ) - rule ( selector ( "startPrank(address,address)" ) => 1169514616 ) - rule ( selector ( "stopPrank()" ) => 2428830011 ) - rule ( selector ( "expectStaticCall(address,bytes)" ) => 2232945516 ) - rule ( selector ( "expectDelegateCall(address,bytes)" ) => 1030406631 ) - rule ( selector ( "expectRegularCall(address,uint256,bytes)" ) => 1973496647 ) - rule ( selector ( "expectCreate(address,uint256,bytes)" ) => 658968394 ) - rule ( selector ( "expectCreate2(address,uint256,bytes)" ) => 3854582462 ) - rule ( selector ( "expectEmit(bool,bool,bool,bool)" ) => 1226622914 ) - rule ( selector ( "expectEmit(bool,bool,bool,bool,address)" ) => 2176505587 ) - rule ( selector ( "sign(uint256,bytes32)" ) => 3812747940 ) - rule ( selector ( "symbolicStorage(address)" ) => 769677742 ) - rule ( selector ( "freshUInt(uint8)" ) => 625253732 ) - rule ( selector ( "freshBool()" ) => 2935720297 ) - rule ( selector ( "prank(address)" ) => 3395723175 ) - rule ( selector ( "prank(address,address)" ) => 1206193358 ) - rule ( selector ( "allowCallsToAddress(address)" ) => 1850795572 ) - rule ( selector ( "allowChangesToStorage(address,uint256)" ) => 4207417100 ) - rule ( selector ( "infiniteGas()" ) => 3986649939 ) -``` - -- selectors for unimplemented cheat code functions. - -```k - rule selector ( "expectRegularCall(address,bytes)" ) => 3178868520 - rule selector ( "expectNoCall()" ) => 3861374088 - rule selector ( "ffi(string[])" ) => 2299921511 - rule selector ( "setEnv(string,string)" ) => 1029252078 - rule selector ( "envBool(string)" ) => 2127686781 - rule selector ( "envUint(string)" ) => 3247934751 - rule selector ( "envInt(string)" ) => 2301234273 - rule selector ( "envAddress(string)" ) => 890066623 - rule selector ( "envBytes32(string)" ) => 2543095874 - rule selector ( "envString(string)" ) => 4168600345 - rule selector ( "envBytes(string)" ) => 1299951366 - rule selector ( "envBool(string,string)" ) => 2863521455 - rule selector ( "envUint(string,string)" ) => 4091461785 - rule selector ( "envInt(string,string)" ) => 1108873552 - rule selector ( "envAddress(string,string)" ) => 2905717242 - rule selector ( "envBytes32(string,string)" ) => 1525821889 - rule selector ( "envString(string,string)" ) => 347089865 - rule selector ( "envBytes(string,string)" ) => 3720504603 - rule selector ( "expectRevert(bytes4)" ) => 3273568480 - rule selector ( "record()" ) => 644673801 - rule selector ( "accesses(address)" ) => 1706857601 - rule selector ( "mockCall(address,bytes calldata,bytes)" ) => 378193464 - rule selector ( "mockCall(address,uint256,bytes,bytes)" ) => 2168494993 - rule selector ( "clearMockedCalls()" ) => 1071599125 - rule selector ( "expectCall(address,bytes)" ) => 3177903156 - rule selector ( "expectCall(address,uint256,bytes)" ) => 4077681571 - rule selector ( "getCode(string)" ) => 2367473957 - rule selector ( "broadcast()" ) => 2949218368 - rule selector ( "broadcast(address)" ) => 3868601563 - rule selector ( "startBroadcast()" ) => 2142579071 - rule selector ( "startBroadcast(address)" ) => 2146183821 - rule selector ( "stopBroadcast()" ) => 1995103542 - rule selector ( "readFile(string)" ) => 1626979089 - rule selector ( "readLine(string)" ) => 1895126824 - rule selector ( "writeFile(string,string)" ) => 2306738839 - rule selector ( "writeLine(string,string)" ) => 1637714303 - rule selector ( "closeFile(string)" ) => 1220748319 - rule selector ( "removeFile(string)" ) => 4054835277 - rule selector ( "toString(address)" ) => 1456103998 - rule selector ( "toString(bytes)" ) => 1907020045 - rule selector ( "toString(bytes32)" ) => 2971277800 - rule selector ( "toString(bool)" ) => 1910302682 - rule selector ( "toString(uint256)" ) => 1761649582 - rule selector ( "toString(int256)" ) => 2736964622 - rule selector ( "recordLogs()" ) => 1101999954 - rule selector ( "getRecordedLogs()" ) => 420828068 - rule selector ( "snapshot()" ) => 2534502746 - rule selector ( "revertTo(uint256)" ) => 1155002532 - rule selector ( "createFork(string,uint256)" ) => 1805892139 - rule selector ( "createFork(string)" ) => 834286744 - rule selector ( "createSelectFork(string,uint256)" ) => 1911440973 - rule selector ( "createSelectFork(string)" ) => 2556952628 - rule selector ( "selectFork(uint256)" ) => 2663344167 - rule selector ( "activeFork()" ) => 789593890 - rule selector ( "rollFork(uint256)" ) => 3652973473 - rule selector ( "rollFork(uint256,uint256)" ) => 3612115876 - rule selector ( "rpcUrl(string)" ) => 2539285737 - rule selector ( "rpcUrls()" ) => 2824504344 - rule selector ( "deriveKey(string,uint32)" ) => 1646872971 -``` - -- selector for Solidity built-in Error - -```k - rule ( selector ( "Error(string)" ) => 147028384 ) -``` -```k -endmodule -``` diff --git a/include/kframework/foundry/index.html b/include/kframework/foundry/index.html new file mode 100644 index 0000000000..934a674238 --- /dev/null +++ b/include/kframework/foundry/index.html @@ -0,0 +1,1688 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Foundry Specifications

+

ACTIVE DEVELOPMENT

+

The Foundry integration allows users to take Solidity property tests and generate K specifications which can be executed using the Haskell symbolic backend.

+

Before executing any of the KEVM instructions, make sure that you have the following:

+
    +
  1. Successfully built or installed KEVM,
  2. +
  3. Thekevm binary is on your PATH,
  4. +
  5. Activated the virtual environment (applicable only for builds from source).
  6. +
+

Below we are providing an example usage and a description of all the commands you can use with KEVM to improve your experience.

+

Available Commands

+

Basic commands are (and each can be passed --help):

+
    +
  • +

    kevm foundry-kompile: Kompile a definition, generating claims for each Foundry test. +The best options are:

    +
      +
    • --regen - needed if Solidity sources change,
    • +
    • --rekompile - needed if K lemmas change, or K definition changes,
    • +
    • --require - for adding an extra K file with lemmas,
    • +
    • --module-import - importing an extra K module in one of the added K files with lemmas.
    • +
    +
  • +
  • +

    kevm foundry-prove: Run a given proof using the KCFG-based prover (not supporting loops yet, need to fall back to typical K for that). +The best options are:

    +
      +
    • --reinit - want to start over from scratch,
    • +
    • --no-simplify-init - do not want to invoke simplification on all the original nodes, can be faster,
    • +
    • --max-depth - increase the space between saved nodes; bigger is faster,
    • +
    • --max-iterations - maximum number of nodes to store in KCFG before giving on attempting proof for that run,
    • +
    • --break-every-step - save a state every opcode, slow, good for debugging,
    • +
    • --break-on-calls - save a state every time a call is made, good to turn on.
    • +
    • --verbose - output what the prover is doing to make sure it's making progress.
    • +
    +
  • +
  • +

    kevm foundry-show: Display the given KCFG so far as text. +Options are:

    +
      +
    • --no-minimize - do not omit all the gory details,
    • +
    • --node - can be a repeated option, display more information about a given node hash,
    • +
    • --node-delta - displays the delta between two given nodes in the KCFG.
    • +
    +
  • +
  • +

    kevm foundry-view-kcfg: Launch the more interactive exploration of the KCFG (can be done while exploration is running, must Ctrl-C + relaunch to view updates to KCFG).

    +
      +
    • The interactive KCFG puts your terminal in application mode. To select text in this mode, hold the modifier key provided by your terminal emulator (typically SHIFT or OPTION) while clicking and dragging. Refer to the Textualize documentation for more information.
    • +
    +
  • +
  • +

    kevm foundry-section-edge: Given an edge in the graph, cut it into sections to get intermediate nodes.

    +
  • +
  • +

    kevm foundry-step-node: Step from a given node, adding it to the CFG.

    +
  • +
  • +

    kevm foundry-simplify-node: Simplify a given node, and potentially replace it.

    +
  • +
+

Example Usage

+

The first step is to ensure the Solidity codebase is compiled and the out/ directory is generated.

+

For example, in the root of this repository, you can run:

+

Build Foundry Project:

+
$ cd tests/foundry
+$ forge build
+
+

Kompile to generate K specifications:

+
$ kevm foundry-kompile
+
+

And discharge some specific test as a proof obligation (inside virtual environment):

+
$ kevm foundry-prove --test AssertTest.test_assert_true
+
+

Foundry Module for KEVM

+

Foundry's testing framework provides a series of cheatcodes so that developers can specify what situation they want to test. +This file describes the KEVM specification of the Foundry testing framework, which includes the definition of said cheatcodes and what does it mean for a test to pass.

+
requires "evm.md"
+requires "hashed-locations.md"
+requires "abi.md"
+requires "edsl.md"
+requires "lemmas/lemmas.k"
+
+module FOUNDRY
+    imports FOUNDRY-SUCCESS
+    imports FOUNDRY-CHEAT-CODES
+    imports FOUNDRY-ACCOUNTS
+    imports EDSL
+    imports LEMMAS
+
+    configuration
+      <foundry>
+        <kevm/>
+        <cheatcodes/>
+      </foundry>
+endmodule
+
+

Foundry Success Predicate

+

Foundry has several baked-in convenience accounts for helping to define the "cheat-codes". +Here we define their addresses, and important storage-locations.

+
module FOUNDRY-ACCOUNTS
+    imports SOLIDITY-FIELDS
+
+    syntax Int             ::= #address ( Contract ) [macro]
+    syntax Contract        ::= FoundryContract
+    syntax Field           ::= FoundryField
+    syntax FoundryContract ::= "FoundryTest"  [klabel(contract_FoundryTest)]
+                             | "FoundryCheat" [klabel(contract_FoundryCheat)]
+ // -------------------------------------------------------------------------
+    rule #address(FoundryTest)  => 728815563385977040452943777879061427756277306518  // 0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496
+    rule #address(FoundryCheat) => 645326474426547203313410069153905908525362434349  // 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D
+
+    syntax FoundryField ::= "Failed" [klabel(slot_failed)]
+ // ------------------------------------------------------
+    rule #loc(FoundryCheat . Failed) => 46308022326495007027972728677917914892729792999299745830475596687180801507328 // 0x6661696c65640000000000000000000000000000000000000000000000000000
+
+endmodule
+
+

The Foundry success predicate performs the same checks as the is_success function from Foundry in evm/src/executor/mod.rs.

+

These checks are:

+
    +
  • The call to the test contract has not reverted, and
  • +
  • DSTest.assert* have not failed.
  • +
+

The last condition is implemented in the fail() function from DSTest. +If a DSTest assertion should fail, the fail() function stores bytes32(uint256(0x01)) at the storage slot bytes32("failed"). +Hence, checking if a DSTest.assert* has failed amounts to reading as a boolean the data from that particular storage slot.

+

TODO: It should also be checked if the code present in the FoundryCheat account is non-empty, and return false if it is.

+
module FOUNDRY-SUCCESS
+    imports EVM
+
+    syntax Bool ::= 
+      "foundry_success" "("
+        statusCode: StatusCode "," 
+        failed: Int ","
+        revertExpected: Bool ","
+        opcodeExpected: Bool ","
+        recordEventExpected: Bool ","
+        eventExpected: Bool
+      ")" [function, klabel(foundry_success), symbol]
+ // -------------------------------------------------
+    rule foundry_success(EVMC_SUCCESS, 0, false, false, false, false) => true
+    rule foundry_success(_, _, _, _, _, _)                            => false [owise]
+
+endmodule
+
+

Foundry Cheat Codes

+

The configuration of the Foundry Cheat Codes is defined as follwing:

+
    +
  1. The <prank> subconfiguration stores values which are used during the execution of any kind of prank cheat code: +
      +
    • <prevCaller> keeps the current address of the contract that initiated the prank.
    • +
    • <prevOrigin> keeps the current address of the tx.origin value.
    • +
    • <newCaller> and <newOrigin> are addresses to be assigned after the prank call to msg.sender and tx.origin.
    • +
    • <active> signals if a prank is active or not.
    • +
    • <depth> records the current call depth at which the prank was invoked.
    • +
    • <singleCall> tells whether the prank stops by itself after the next call or when a stopPrank cheat code is invoked.
    • +
    +
  2. +
  3. The <expectedRevert> subconfiguration stores values used for the expectRevert cheat code. +
      +
    • <isRevertExpected> flags if the next call is expected to revert or not.
    • +
    • <expectedDepth> records the depth at which the call is expected to revert.
    • +
    • <expectedReason> keeps the expected revert message as a Bytes.
    • +
    +
  4. +
  5. The <expectOpcode> subconfiguration stores values used for expect*OPCODE* cheat codes. +
      +
    • <isOpcodeExpected> flags if a call opcode is expected.
    • +
    • <expectedAddress> keeps the expected caller.
    • +
    • <expectedValue> keeps expected msg.value.
    • +
    • <expectedData> keeps expected calldata.
    • +
    • <opcodeType> keeps track of what CALL* Opcode is expected.
    • +
    +
  6. +
  7. The <expectEmit> subconfiguration stores values used for the expectEmit cheat code. +
      +
    • <recordEvent> flags if the next emitted Event should be recorded and held for future matches.
    • +
    • <isEventExpected> flags if an Event is expected to match the one recorded previously.
    • +
    • <checkedTopics> will store a list of bool values that flag if a topic should be checked or not.
    • +
    • <checkedData> flags if the data field should be checked or not.
    • +
    • <expectedEventAddress> stores the emitter of an expected Event.
    • +
    +
  8. +
  9. The <whitelist> subconfiguration stores addresses that can be called and storage slots that can be accessed/modified during the execution. +
      +
    • <isCallWhitelistActive> flags if the whitelist mode is enabled for calls.
    • +
    • <isStorageWhitelistActive> flags if the whitelist mode is enabled for storage changes.
    • +
    • <addressSet> - stores the address whitelist.
    • +
    • <storageSlotSet> - stores the storage whitelist containing pairs of addresses and storage indexes.
    • +
    +
  10. +
+
module FOUNDRY-CHEAT-CODES
+    imports EVM
+    imports EVM-ABI
+    imports FOUNDRY-ACCOUNTS
+    imports INFINITE-GAS
+
+    configuration
+      <cheatcodes>
+        <prank>
+          <prevCaller> .Account </prevCaller>
+          <prevOrigin> .Account </prevOrigin>
+          <newCaller> .Account </newCaller>
+          <newOrigin> .Account </newOrigin>
+          <active> false </active>
+          <depth> 0 </depth>
+          <singleCall> false </singleCall>
+        </prank>
+        <expectedRevert>
+          <isRevertExpected> false </isRevertExpected>
+          <expectedReason> .Bytes </expectedReason>
+          <expectedDepth> 0 </expectedDepth>
+        </expectedRevert>
+        <expectedOpcode>
+          <isOpcodeExpected> false </isOpcodeExpected>
+          <expectedAddress> .Account </expectedAddress>
+          <expectedValue> 0 </expectedValue>
+          <expectedData> .Bytes </expectedData>
+          <opcodeType> .OpcodeType </opcodeType>
+        </expectedOpcode>
+        <expectEmit>
+          <recordEvent> false </recordEvent>
+          <isEventExpected> false </isEventExpected>
+          <checkedTopics> .List </checkedTopics>
+          <checkedData> false </checkedData>
+          <expectedEventAddress> .Account </expectedEventAddress>
+        </expectEmit>
+        <whitelist>
+          <isCallWhitelistActive> false </isCallWhitelistActive>
+          <isStorageWhitelistActive> false </isStorageWhitelistActive>
+          <addressSet> .Set </addressSet>
+          <storageSlotSet> .Set </storageSlotSet>
+        </whitelist>
+      </cheatcodes>
+
+

First we have some helpers in K which can:

+
    +
  • Inject a given boolean condition into's this execution's path condition
  • +
  • Set the FoundryCheat . Failed location to True.
  • +
+
    syntax KItem ::= #assume ( Bool ) [klabel(foundry_assume), symbol]
+ // ------------------------------------------------------------------
+    rule <k> #assume(B) => . ... </k> ensures B
+
+     syntax KItem ::= "#markAsFailed" [klabel(foundry_markAsFailed)]
+  // ---------------------------------------------------------------
+     rule <k> #markAsFailed => . ... </k>
+          <account>
+             <acctID> #address(FoundryCheat) </acctID>
+             <storage> STORAGE => STORAGE [ #loc(FoundryCheat . Failed) <- 1 ] </storage>
+             ...
+           </account>
+
+

Structure of execution

+

The foundry.call rule is used to inject specific behaviour for each cheat code. +The rule has a higher priority than any other #call rule and will match every call made to the Foundry cheatcode address. +The function selector, represented as #asWord(#range(ARGS, 0, 4)) and the call data #range(ARGS, 4, lengthBytes(ARGS) -Int 4) are passed to the #call_foundry production, which will further rewrite using rules defined for implemented cheat codes. +Finally, the rule for #return_foundry is used to end the execution of the CALL OpCode.

+
    rule [foundry.call]:
+         <k> (#checkCall _ _
+          ~> #call _ CHEAT_ADDR _ _ _ ARGS _
+          ~> #return RETSTART RETWIDTH )
+          => #call_foundry #asWord(#range(ARGS, 0, 4)) #range(ARGS, 4, lengthBytes(ARGS) -Int 4)
+          ~> #return_foundry RETSTART RETWIDTH
+         ...
+         </k>
+         <output> _ => .Bytes </output>
+    requires CHEAT_ADDR ==Int #address(FoundryCheat)
+    [priority(40)]
+
+

We define two productions named #return_foundry and #call_foundry, which will be used by each cheat code. +The rule foundry.return will rewrite the #return_foundry production into other productions that will place the output of the execution into the local memory, refund the gas value of the call and push the value 1 on the call stack.

+
    syntax KItem ::= "#return_foundry" Int Int  [klabel(foundry_return)]
+                   | "#call_foundry" Int Bytes  [klabel(foundry_call)]
+                   | "#error_foundry" Int Bytes [klabel(foundry_error)]
+ // -------------------------------------------------------------------
+    rule [foundry.return]:
+         <k> #return_foundry RETSTART RETWIDTH
+          => #setLocalMem RETSTART RETWIDTH OUT
+          ~> #refund GCALL
+          ~> 1 ~> #push
+          ... </k>
+         <output> OUT </output>
+         <callGas> GCALL </callGas>
+
+

We define a new status codes:

+
    +
  • FOUNDRY_UNIMPLEMENTED, which signals that the execution ran into an unimplemented cheat code.
  • +
  • FOUNDRY_WHITELISTCALL, which signals that an address outside the whitelist has been called during the execution.
  • +
  • FOUNDRY_WHITELISTSTORAGE, which signals that a storage index of an address outside the whitelist has been changed during the execution.
  • +
+
    syntax ExceptionalStatusCode ::= "FOUNDRY_UNIMPLEMENTED"
+                                   | "FOUNDRY_WHITELISTCALL"
+                                   | "FOUNDRY_WHITELISTSTORAGE"
+ // -----------------------------------------------------------
+
+

Below, we define rules for the #call_foundry production, handling the cheat codes.

+

assume - Insert a condition

+
function assume(bool) external;
+
+

foundry.call.assume will match when the assume cheat code function is called. +This rule then takes a bool condition from the function call data, represented using the ARGS variable, and injects it into the execution path using the #assume production. +==K #bufStrict(32, 1) is used to mark that the condition should hold.

+
    rule [foundry.call.assume]:
+         <k> #call_foundry SELECTOR ARGS => #assume(ARGS ==K #bufStrict(32, 1)) ... </k>
+      requires SELECTOR ==Int selector ( "assume(bool)" )
+      [preserves-definedness]
+
+

deal - Set a given balance to a given account.

+
function deal(address who, uint256 newBalance) external;
+
+

foundry.call.deal will match when the deal cheat code function is called. +The rule then takes from the function call data the target account, using #asWord(#range(ARGS, 0, 32), and the new balance, using #asWord(#range(ARGS, 32, 32)), and forwards them to the #setBalance production which updates the account accordingly.

+
    rule [foundry.call.deal]:
+         <k> #call_foundry SELECTOR ARGS => #loadAccount #asWord(#range(ARGS, 0, 32)) ~> #setBalance #asWord(#range(ARGS, 0, 32)) #asWord(#range(ARGS, 32, 32)) ... </k>
+      requires SELECTOR ==Int selector ( "deal(address,uint256)" )
+
+

etch - Sets the code of an account.

+
function etch(address who, bytes calldata code) external;
+
+

foundry.call.etch will match when the etch cheat code function is called. +This rule then takes from the function call data the target account, using #asWord(#range(ARGS, 0, 32), and the new bytecode, using #range(ARGS, CODE_START, CODE_LENGTH), where #asWord(#range(ARGS, 64, 32)) is used to determine the length of the second argument. +The values are forwarded to the #setCode production which updates the account accordingly.

+
    rule [foundry.call.etch]:
+         <k> #call_foundry SELECTOR ARGS
+          => #loadAccount #asWord(#range(ARGS, 0, 32))
+          ~> #setCode #asWord(#range(ARGS, 0, 32)) #range(ARGS, 96, #asWord(#range(ARGS, 64, 32)))
+         ...
+         </k>
+      requires SELECTOR ==Int selector ( "etch(address,bytes)" )
+
+

warp - Sets the block timestamp.

+
function warp(uint256) external;
+
+

foundry.call.warp will match when the warp cheat code function is called. +This rule then takes the uint256 value from the function call data which is represented as ARGS and updates the <timestamp> cell.

+
    rule [foundry.call.warp]:
+         <k> #call_foundry SELECTOR ARGS => . ... </k>
+         <timestamp> _ => #asWord(ARGS) </timestamp>
+      requires SELECTOR ==Int selector( "warp(uint256)" )
+
+

roll - Sets the block number.

+
function roll(uint256) external;
+
+

foundry.call.roll will match when the roll cheat code function is called. +This rule then takes the uint256 value from the function call data which is represented as ARGS and updates the <number> cell.

+
    rule [foundry.call.roll]:
+         <k> #call_foundry SELECTOR ARGS => . ... </k>
+         <number> _ => #asWord(ARGS) </number>
+      requires SELECTOR ==Int selector ( "roll(uint256)" )
+
+

fee - Sets the block base fee.

+
function fee(uint256) external;
+
+

foundry.call.fee will match when the fee cheat code function is called. +This rule then takes the uint256 value from the function call data which is represented as ARGS and updates the <baseFee> cell.

+
    rule [foundry.call.fee]:
+         <k> #call_foundry SELECTOR ARGS => . ... </k>
+         <baseFee> _ => #asWord(ARGS) </baseFee>
+      requires SELECTOR ==Int selector ( "fee(uint256)" )
+
+

chainId - Sets the chain ID.

+
function chainId(uint256) external;
+
+

foundry.call.chainId will match when the chainId cheat code function is called. +This rule then takes the uint256 value from the function call data which is represented as ARGS and updates the <chainID> cell.

+
    rule [foundry.call.chainId]:
+         <k> #call_foundry SELECTOR ARGS => . ... </k>
+         <chainID> _ => #asWord(ARGS) </chainID>
+      requires SELECTOR ==Int selector ( "chainId(uint256)" )
+
+

coinbase - Sets the block coinbase.

+
function coinbase(address) external;
+
+

foundry.call.coinbase will match when the coinbase cheat code function is called. +This rule then takes the uint256 value from the function call data which is represented as ARGS and updates the <coinbase> cell.

+
    rule [foundry.call.coinbase]:
+         <k> #call_foundry SELECTOR ARGS => . ... </k>
+         <coinbase> _ => #asWord(ARGS) </coinbase>
+      requires SELECTOR ==Int selector ( "coinbase(address)" )
+
+

label - Sets a label for a given address.

+
function label(address addr, string calldata label) external;
+
+

foundry.call.label will match when the label cheat code function is called. +If an address is labelled, the label will show up in test traces instead of the address. +However, there is no change on the state and therefore this rule just skips the cheatcode invocation.

+
    rule [foundry.call.label]:
+         <k> #call_foundry SELECTOR _ARGS => . ... </k>
+      requires SELECTOR ==Int selector ( "label(address,string)" )
+
+

getNonce - Gets the nonce of the given account.

+
function getNonce(address account) external returns (uint64);
+
+

foundry.call.getNonce will match when the getNonce cheat code function is called. +This rule takes the address value from the function call data, which is represented as ARGS, and forwards it to the #returnNonce production, which will update the <output> cell with the nonce of the account.

+
    rule [foundry.call.getNonce]:
+         <k> #call_foundry SELECTOR ARGS => #loadAccount #asWord(ARGS) ~> #returnNonce #asWord(ARGS) ... </k>
+      requires SELECTOR ==Int selector ( "getNonce(address)" )
+
+

setNonce - Sets the nonce of the given account.

+
function setNonce(address account, uint64 nonce) external;
+
+

foundry.call.setNonce will match when the setNonce function is called. +This rule takes the address value and uint64 value corresponding to new nonce using from the function call data, which is represented as ARGS forwards it to the #setNonce production, which will update the nonce of the account.

+
    rule [foundry.call.setNonce]:
+         <k> #call_foundry SELECTOR ARGS => #loadAccount #asWord(#range(ARGS, 0, 32)) ~> #setNonce #asWord(#range(ARGS, 0, 32)) #asWord(#range(ARGS, 32, 32)) ... </k>
+      requires SELECTOR ==Int selector ( "setNonce(address,uint64)" )
+
+

addr - Computes the address for a given private key.

+
function addr(uint256 privateKey) external returns (address);
+
+

foundry.call.addr will match when the addr cheat code function is called. +This rule takes uint256 private key from the function call data, which is represented as ARGS, and computes the address. +The <output> cell will be updated with the value of the address generated from the private key, padded to 32 bytes wide.

+
    rule [foundry.call.addr]:
+         <k> #call_foundry SELECTOR ARGS => . ... </k>
+         <output> _ => #bufStrict(32, #addrFromPrivateKey(#unparseDataBytes(ARGS))) </output>
+      requires SELECTOR ==Int selector ( "addr(uint256)" )
+
+

load - Loads a storage slot from an address.

+
function load(address account, bytes32 slot) external returns (bytes32);
+
+

foundry.call.load will match when the load cheat code function is called. +This rule loads the storage slot identified by #asWord(#range(ARGS, 32, 32)) (referring to slot argument) from account #asWord(#range(ARGS, 0, 32)) (referring to account). +The value of the identified storage slot is placed in the <output> cell using the #returnStorage production.

+
    rule [foundry.call.load]:
+         <k> #call_foundry SELECTOR ARGS => #loadAccount #asWord(#range(ARGS, 0, 32)) ~> #returnStorage #asWord(#range(ARGS, 0, 32)) #asWord(#range(ARGS, 32, 32)) ... </k>
+      requires SELECTOR ==Int selector ( "load(address,bytes32)" )
+
+

store - Stores a value to an address' storage slot.

+
function store(address account, bytes32 slot, bytes32 value) external;
+
+

foundry.call.store will match when the store cheat code function is called. +This rule then takes from the function call data the account using #asWord(#range(ARGS, 0, 32)) and the new slot value using #asWord(#range(ARGS, 32, 32)) and updates the slot denoted by #asWord(#range(ARGS, 64, 32)).

+
    rule [foundry.call.store]:
+         <k> #call_foundry SELECTOR ARGS => #loadAccount #asWord(#range(ARGS, 0, 32)) ~> #setStorage #asWord(#range(ARGS, 0, 32)) #asWord(#range(ARGS, 32, 32)) #asWord(#range(ARGS, 64, 32)) ... </k>
+      requires SELECTOR ==Int selector ( "store(address,bytes32,bytes32)" )
+
+

symbolicStorage - Makes the storage of the given address completely symbolic.

+
function symbolicStorage(address) external;
+
+

foundry.call.symbolicStorage will match when the symbolicStorage cheat code function is called. +This rule then takes the address using #asWord(#range(ARGS, 0, 32)) and makes its storage completely symbolic.

+
    rule [foundry.call.symbolicStorage]:
+         <k> #call_foundry SELECTOR ARGS => #loadAccount #asWord(ARGS) ~> #setSymbolicStorage #asWord(ARGS) ... </k>
+      requires SELECTOR ==Int selector ( "symbolicStorage(address)" )
+
+

freshUInt - Returns a single symbolic unsigned integer.

+
function freshUInt(uint8) external returns (uint256);
+
+

foundry.call.freshUInt will match when the freshUInt cheat code function is called. +This rule returns a symbolic integer of up to the bit width that was sent as an argument.

+
    rule [foundry.call.freshUInt]:
+         <k> #call_foundry SELECTOR ARGS => . ... </k>
+         <output> _ => #bufStrict(32, ?WORD) </output>
+      requires SELECTOR ==Int selector ( "freshUInt(uint8)" )
+       andBool 0 <Int #asWord(ARGS) andBool #asWord(ARGS) <=Int 32
+       ensures 0 <=Int ?WORD andBool ?WORD <Int 2 ^Int (8 *Int #asWord(ARGS))
+
+

freshBool - Returns a single symbolic boolean.

+
function freshBool() external returns (bool);
+
+

foundry.call.freshBool will match when the freshBool cheat code function is called. +This rule returns a symbolic boolean value being either 0 (false) or 1 (true).

+
    rule [foundry.call.freshBool]:
+         <k> #call_foundry SELECTOR _ => . ... </k>
+         <output> _ => #bufStrict(32, ?WORD) </output>
+      requires SELECTOR ==Int selector ( "freshBool()" )
+       ensures #rangeBool(?WORD)
+
+

Expecting the next call to revert

+
function expectRevert() external;
+function expectRevert(bytes4 msg) external;
+function expectRevert(bytes calldata msg) external;
+
+

All cheat code calls which take place while expectRevert is active are ignored.

+
    rule [foundry.call.ignoreCalls]:
+         <k> #call_foundry _ _ => . ... </k>
+         <expectedRevert>
+           <isRevertExpected> true </isRevertExpected>
+           ...
+         </expectedRevert>
+      [priority(35)]
+
+

The #halt production is used to examine the end of each call in KEVM. +If the call depth of the current call is lower than the call depth of the expectRevert cheat code and the <statusCode> is not EVMC_SUCCESS, the #checkRevertReason will be used to compare the output of the call with the expect reason provided.

+
    rule [foundry.handleExpectRevert]:
+         <k> (. => #checkRevertReason ~> #clearExpectRevert) ~> #halt ... </k>
+         <statusCode> SC </statusCode>
+         <callDepth> CD </callDepth>
+         <expectedRevert>
+           <isRevertExpected> true </isRevertExpected>
+           <expectedDepth> ED </expectedDepth>
+           ...
+         </expectedRevert>
+      requires CD <=Int ED
+       andBool SC =/=K EVMC_SUCCESS
+      [priority(40)]
+
+

If the call is successful, a revert is triggered and the FAILED location of the Foundry contract is set to true using #markAsFailed.

+
    rule [foundry.handleExpectRevert.error]:
+         <k> (. => #markAsFailed ~> #clearExpectRevert) ~> #halt ... </k>
+         <statusCode> EVMC_SUCCESS => EVMC_REVERT </statusCode>
+         <callDepth> CD </callDepth>
+         <expectedRevert>
+           <isRevertExpected> true </isRevertExpected>
+           <expectedDepth> ED </expectedDepth>
+           ...
+         </expectedRevert>
+      requires CD <=Int ED
+      [priority(40)]
+
+

If the expectRevert() selector is matched, call the #setExpectRevert production to initialize the <expectedRevert> subconfiguration.

+
    rule [foundry.call.expectRevert]:
+         <k> #call_foundry SELECTOR ARGS => #setExpectRevert ARGS ... </k>
+      requires SELECTOR ==Int selector ( "expectRevert()" )
+        orBool SELECTOR ==Int selector ( "expectRevert(bytes)" )
+
+

Expecting a specific CALL/CREATE opcode

+

First we define a sort to identify expected opcodes.

+
    syntax OpcodeType ::= ".OpcodeType" | "Call" | "Static" | "Delegate" | "Create" | "Create2"
+
+

If the expect*OPCODE* selector is matched, the rule will load the account into the state and add the #setExpectOpcode production to the K cell to initialize the <expectedOpcode/> subconfiguration with the given parameters.

+
    rule [foundry.call.expectStaticCall]:
+         <k> #call_foundry SELECTOR ARGS
+          => #loadAccount #asWord(#range(ARGS, 0, 32))
+          ~> #setExpectOpcode #asWord(#range(ARGS, 0, 32)) #range(ARGS, 96, #asWord(#range(ARGS, 64, 32))) 0 Static
+          ...
+         </k>
+      requires SELECTOR ==Int selector ( "expectStaticCall(address,bytes)" )
+
+    rule [foundry.call.expectDelegateCall]:
+         <k> #call_foundry SELECTOR ARGS
+          => #loadAccount #asWord(#range(ARGS, 0, 32))
+          ~> #setExpectOpcode #asWord(#range(ARGS, 0, 32)) #range(ARGS, 96, #asWord(#range(ARGS, 64, 32))) 0 Delegate
+          ...
+         </k>
+      requires SELECTOR ==Int selector ( "expectDelegateCall(address,bytes)" )
+
+    rule [foundry.call.expectRegularCall]:
+         <k> #call_foundry SELECTOR ARGS
+          => #loadAccount #asWord(#range(ARGS, 0, 32))
+          ~> #setExpectOpcode #asWord(#range(ARGS, 0, 32)) #range(ARGS, 128, #asWord(#range(ARGS, 96, 32))) #asWord(#range(ARGS, 32, 32)) Call
+          ...
+         </k>
+      requires SELECTOR ==Int selector ( "expectRegularCall(address,uint256,bytes)" )
+
+    rule [foundry.call.expectCreate]:
+         <k> #call_foundry SELECTOR ARGS
+          => #loadAccount #asWord(#range(ARGS, 0, 32))
+          ~> #setExpectOpcode #asWord(#range(ARGS, 0, 32)) #range(ARGS, 128, #asWord(#range(ARGS, 96, 32))) #asWord(#range(ARGS, 32, 32)) Create
+          ...
+         </k>
+      requires SELECTOR ==Int selector ( "expectCreate(address,uint256,bytes)" )
+
+    rule [foundry.call.expectCreate2]:
+         <k> #call_foundry SELECTOR ARGS
+          => #loadAccount #asWord(#range(ARGS, 0, 32))
+          ~> #setExpectOpcode #asWord(#range(ARGS, 0, 32)) #range(ARGS, 128, #asWord(#range(ARGS, 96, 32))) #asWord(#range(ARGS, 32, 32)) Create2
+          ...
+         </k>
+      requires SELECTOR ==Int selector ( "expectCreate2(address,uint256,bytes)" )
+
+

Next, everytime one of the STATICCALL, DELEGATECALL, CALL, CREATE or CREATE2 opcodes is executed, we check if the sender address, msg.value and calldata match the expected values. +calldata needs to match only the first byte.

+
    rule <k> (. => #clearExpectOpcode) ~> STATICCALL _GCAP ACCTTO ARGSTART ARGWIDTH _RETSTART _RETWIDTH ... </k>
+         <localMem> LM </localMem>
+         <expectedOpcode>
+           <isOpcodeExpected> true </isOpcodeExpected>
+           <expectedAddress> ACCTTO </expectedAddress>
+           <expectedData> DATA </expectedData>
+           <opcodeType> Static </opcodeType>
+           ...
+         </expectedOpcode>
+      requires #range(LM, ARGSTART, ARGWIDTH) ==K #range(DATA, 0, ARGWIDTH)
+      [priority(40)]
+
+    rule <k> (. => #clearExpectOpcode) ~> DELEGATECALL _GCAP ACCTTO ARGSTART ARGWIDTH _RETSTART _RETWIDTH ... </k>
+         <localMem> LM </localMem>
+         <expectedOpcode>
+           <isOpcodeExpected> true </isOpcodeExpected>
+           <expectedAddress> ACCTTO </expectedAddress>
+           <expectedData> DATA </expectedData>
+           <opcodeType> Delegate </opcodeType>
+           ...
+         </expectedOpcode>
+      requires #range(LM, ARGSTART, ARGWIDTH) ==K #range(DATA, 0, ARGWIDTH)
+      [priority(40)]
+
+    rule <k> (. => #clearExpectOpcode) ~> CALL _GCAP ACCTTO VALUE ARGSTART ARGWIDTH _RETSTART _RETWIDTH ... </k>
+         <localMem> LM </localMem>
+         <expectedOpcode>
+           <isOpcodeExpected> true </isOpcodeExpected>
+           <expectedAddress> ACCTTO </expectedAddress>
+           <expectedData> DATA </expectedData>
+           <opcodeType> Call </opcodeType>
+           <expectedValue> VALUE </expectedValue>
+         </expectedOpcode>
+      requires #range(LM, ARGSTART, ARGWIDTH) ==K #range(DATA, 0, ARGWIDTH)
+      [priority(40)]
+
+    rule <k> (. => #clearExpectOpcode) ~> CREATE VALUE MEMSTART MEMWIDTH ... </k>
+         <localMem> LM </localMem>
+         <id> ACCT </id>
+         <expectedOpcode>
+           <isOpcodeExpected> true </isOpcodeExpected>
+           <expectedAddress> ACCT </expectedAddress>
+           <expectedData> DATA </expectedData>
+           <opcodeType> Create </opcodeType>
+           <expectedValue> VALUE </expectedValue>
+         </expectedOpcode>
+      requires #range(LM, MEMSTART, MEMWIDTH) ==K #range(DATA, 0, MEMWIDTH)
+      [priority(40)]
+
+    rule <k> (. => #clearExpectOpcode) ~> CREATE2 VALUE MEMSTART MEMWIDTH _SALT ... </k>
+         <localMem> LM </localMem>
+         <id> ACCT </id>
+         <expectedOpcode>
+           <isOpcodeExpected> true </isOpcodeExpected>
+           <expectedAddress> ACCT </expectedAddress>
+           <expectedData> DATA </expectedData>
+           <opcodeType> Create2 </opcodeType>
+           <expectedValue> VALUE </expectedValue>
+         </expectedOpcode>
+      requires #range(LM, MEMSTART, MEMWIDTH) ==K #range(DATA, 0, MEMWIDTH)
+      [priority(40)]
+
+

Pranks

+

Injecting addresses in a call

+

To inject the pranked msg.sender and tx.origin we add two new rules for the #call production, defined in evm.md. +These rules have a higher priority. +The only difference between these rules is that one will also set the tx.origin, if required. +First, will match only if the <active> cell has the true value, signaling that a prank is active, and if the current depth of the call is at the same level with the depth at which the prank was invoked. +This is needed in order to prevent overwriting the caller for subcalls. +Finally, the original sender of the transaction, ACCTFROM is changed to the new caller, NCL.

+
    rule [foundry.prank.injectCaller]:
+         <k> #call (ACCTFROM => NCL) _ACCTTO _ACCTCODE _VALUE _APPVALUE _ARGS _STATIC ... </k>
+         <callDepth> CD </callDepth>
+         <prank>
+            <newCaller> NCL </newCaller>
+            <newOrigin> .Account </newOrigin>
+            <active> true </active>
+            <depth> CD </depth>
+            ...
+         </prank>
+      requires NCL =/=K .Account
+       andBool ACCTFROM =/=Int NCL
+      [priority(40)]
+
+    rule [foundry.prank.injectCallerAndOrigin]:
+         <k> #call (ACCTFROM => NCL) _ACCTTO _ACCTCODE _VALUE _APPVALUE _ARGS _STATIC ... </k>
+         <callDepth> CD </callDepth>
+         <origin> _ => NOG </origin>
+         <prank>
+            <newCaller> NCL </newCaller>
+            <newOrigin> NOG </newOrigin>
+            <active> true </active>
+            <depth> CD </depth>
+            ...
+         </prank>
+      requires NCL =/=K .Account
+       andBool NOG =/=K .Account
+       andBool ACCTFROM =/=Int NCL
+      [priority(40)]
+
+

We define a new rule for the #halt ~> #return _ _ production that will trigger the #endPrank rules if the prank was set only for a single call and if the current call depth is equal to the depth at which prank was invoked plus one.

+
    rule <k> (. => #endPrank) ~> #halt ~> #return _RETSTART _RETWIDTH ... </k>
+         <callDepth> CD </callDepth>
+         <prank>
+           <singleCall> true </singleCall>
+           <depth> PD </depth>
+           ...
+         </prank>
+      requires CD ==Int PD +Int 1
+      [priority(40)]
+
+

startPrank - Sets msg.sender and tx.origin for all subsequent calls until stopPrank is called.

+
function startPrank(address) external;
+function startPrank(address sender, address origin) external;
+
+

foundry.call.startPrank and foundry.call.startPrankWithOrigin will match when either of startPrank functions are called. +The addresses which will be used to impersonate future calls are retrieved from the local memory using #asWord(#range(ARGS, 0, 32) for the sender, and #asWord(#range(ARGS, 32, 32) for the origin (only for the foundry.call.startPrankWithOrigin rule). +The #loadAccount production is used to load accounts into the state if they are missing.

+
    rule [foundry.call.startPrank]:
+         <k> #call_foundry SELECTOR ARGS => #loadAccount #asWord(ARGS) ~> #setPrank #asWord(ARGS) .Account false ... </k>
+      requires SELECTOR ==Int selector ( "startPrank(address)" )
+
+    rule [foundry.call.startPrankWithOrigin]:
+         <k> #call_foundry SELECTOR ARGS => #loadAccount #asWord(#range(ARGS, 0, 32)) ~> #loadAccount #asWord(#range(ARGS, 32, 32)) ~> #setPrank #asWord(#range(ARGS, 0, 32)) #asWord(#range(ARGS, 32, 32)) false ... </k>
+      requires SELECTOR ==Int selector ( "startPrank(address,address)" )
+
+

prank - Impersonate msg.sender and tx.origin for only for the next call.

+
function prank(address) external;
+function prank(address sender, address origin) external;
+
+
    rule [foundry.call.prank]:
+         <k> #call_foundry SELECTOR ARGS => #loadAccount #asWord(ARGS) ~> #setPrank #asWord(ARGS) .Account true ... </k>
+      requires SELECTOR ==Int selector ( "prank(address)" )
+
+    rule [foundry.call.prankWithOrigin]:
+         <k> #call_foundry SELECTOR ARGS => #loadAccount #asWord(#range(ARGS, 0, 32)) ~> #loadAccount #asWord(#range(ARGS, 32, 32)) ~> #setPrank #asWord(#range(ARGS, 0, 32)) #asWord(#range(ARGS, 32, 32)) true ... </k>
+      requires SELECTOR ==Int selector ( "prank(address,address)" )
+
+

stopPrank - Stops impersonating msg.sender and tx.origin.

+
function stopPrank() external;
+
+

foundry.call.stopPrank will match when stopPrank function will be called. This rule will invoke #endPrank which will clean up the <prank/> subconfiguration and restore the previous values of the msg.sender and tx.origin.

+
    rule [foundry.call.stopPrank]:
+         <k> #call_foundry SELECTOR _ => #endPrank ... </k>
+      requires SELECTOR ==Int selector ( "stopPrank()" )
+
+

Gas Manipulation

+
function infiniteGas() external;
+
+

Set the remaining gas to an infinite value. +This is useful for running tests without them running out of gas.

+
    rule [foundry.call.infiniteGas]:
+         <k> #call_foundry SELECTOR _ARGS => . ... </k>
+         <gas> _ => #gas(?_VGAS) </gas>
+         <callGas> _ => #gas(?_VCALLGAS) </callGas>
+      requires SELECTOR ==Int selector ( "infiniteGas()" )
+
+

Expecting Events

+
function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData) external;
+function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData, address emitter) external;
+
+

Assert a specific log is emitted before the end of the current function.

+

Call the cheat code, specifying whether we should check the first, second or third topic, and the log data. +Topic 0 is always checked. +Emit the event we are supposed to see before the end of the current function. +Perform the call. +If the event is not available in the current scope (e.g. if we are using an interface, or an external smart contract), we can define the event ourselves with an identical event signature.

+

There are 2 signatures:

+

Without checking the emitter address: Asserts the topics match without checking the emitting address. +With address: Asserts the topics match and that the emitting address matches.

+
    rule [foundry.call.expectEmit]:
+         <k> #call_foundry SELECTOR ARGS => #setExpectEmit word2Bool(#asWord(#range(ARGS, 0, 32))) word2Bool(#asWord(#range(ARGS, 32, 32))) word2Bool(#asWord(#range(ARGS, 64, 32))) word2Bool(#asWord(#range(ARGS, 96, 32))) .Account ... </k>
+      requires SELECTOR ==Int selector ( "expectEmit(bool,bool,bool,bool)" )
+
+    rule [foundry.call.expectEmitAddr]:
+         <k> #call_foundry SELECTOR ARGS => #setExpectEmit word2Bool(#asWord(#range(ARGS, 0, 32))) word2Bool(#asWord(#range(ARGS, 32, 32))) word2Bool(#asWord(#range(ARGS, 64, 32))) word2Bool(#asWord(#range(ARGS, 96, 32))) #asWord(#range(ARGS, 128, 32)) ... </k>
+      requires SELECTOR ==Int selector ( "expectEmit(bool,bool,bool,bool,address)" )
+
+
    rule <k> LOG(N) _MEMSTART _MEMWIDTH ... </k>
+         <expectEmit>
+          <recordEvent> true => false </recordEvent>
+          <isEventExpected> false => true </isEventExpected>
+          ...
+        </expectEmit>
+        <wordStack> WS </wordStack>
+      requires #sizeWordStack(WS) >=Int N
+      [priority(40)]
+
+    rule <k> (. => #clearExpectEmit) ~> LOG(N) MEMSTART MEMWIDTH ... </k>
+         <log> _ ListItem({ _ | TOPICS | DATA }:SubstateLogEntry) </log>
+         <expectEmit>
+          <recordEvent> false </recordEvent>
+          <isEventExpected> true </isEventExpected>
+          <checkedTopics> CHECKS </checkedTopics>
+          <checkedData> CHECKDATA </checkedData>
+          <expectedEventAddress> .Account </expectedEventAddress>
+        </expectEmit>
+        <wordStack> WS </wordStack>
+        <localMem> LM </localMem>
+      requires #sizeWordStack(WS) >=Int N
+       andBool  #checkTopics(CHECKS, TOPICS, WordStack2List(#take(N, WS)))
+       andBool ((notBool CHECKDATA) orBool (#asWord(DATA) ==Int #asWord(#range(LM, MEMSTART, MEMWIDTH))))
+      [priority(40)]
+
+    rule <k> (. => #clearExpectEmit) ~> LOG(N) MEMSTART MEMWIDTH ... </k>
+         <log> _ ListItem({ _ | TOPICS | DATA }:SubstateLogEntry) </log>
+         <id> ACCT </id>
+         <expectEmit>
+          <recordEvent> false </recordEvent>
+          <isEventExpected> true </isEventExpected>
+          <checkedTopics> CHECKS </checkedTopics>
+          <checkedData> CHECKDATA </checkedData>
+          <expectedEventAddress> ACCT </expectedEventAddress>
+        </expectEmit>
+        <wordStack> WS </wordStack>
+        <localMem> LM </localMem>
+      requires #sizeWordStack(WS) >=Int N
+       andBool  #checkTopics(CHECKS, TOPICS, WordStack2List(#take(N, WS)))
+       andBool ((notBool CHECKDATA) orBool (#asWord(DATA) ==Int #asWord(#range(LM, MEMSTART, MEMWIDTH))))
+      [priority(40)]
+
+

Restricting the accounts that can be called in KEVM

+

A StorageSlot pair is formed from an address and a storage index.

+
    syntax StorageSlot ::= "{" Int "|" Int "}"
+ // ------------------------------------------
+
+

The ACCTTO value is checked for each call while the whitelist restriction is enabled for calls. +If the address is not in the whitelist WLIST then KEVM goes into an error state providing the ACCTTO value.

+
    rule [foundry.catchNonWhitelistedCalls]:
+         <k> (#call _ ACCTTO _ _ _ _ false
+          ~> #popCallStack
+          ~> #popWorldState) => #end FOUNDRY_WHITELISTCALL ... </k>
+         <whitelist>
+           <isCallWhitelistActive> true </isCallWhitelistActive>
+           <addressSet> WLIST </addressSet>
+           ...
+         </whitelist>
+      requires notBool ACCTTO in WLIST
+      [priority(40)]
+
+

When the storage whitelist restriction is enabled, the SSTORE operation will check if the address and the storage index are in the whitelist. +If the pair is not present in the whitelist WLIST then KEVM goes into an error state providing the address and the storage index values.

+
    rule [foundry.catchNonWhitelistedStorageChanges]:
+         <k> SSTORE INDEX _ => #end FOUNDRY_WHITELISTSTORAGE ... </k>
+         <id> ACCT </id>
+         <statusCode> _ => FOUNDRY_WHITELISTSTORAGE </statusCode>
+         <whitelist>
+           <isStorageWhitelistActive> true </isStorageWhitelistActive>
+           <storageSlotSet> WLIST </storageSlotSet>
+           ...
+         </whitelist>
+      requires notBool {ACCT|INDEX} in WLIST
+      [priority(40)]
+
+

allowCallsToAddress - Add an account address to a whitelist.

+
function allowCallsToAddress(address) external;
+
+

Adds an account address to the whitelist. The execution of the modified KEVM will stop when a call has been made to an address which is not in the whitelist.

+
    rule [foundry.allowCallsToAddress]:
+         <k> #call_foundry SELECTOR ARGS => #loadAccount #asWord(ARGS) ~> #addAddressToWhitelist #asWord(ARGS) ... </k>
+         requires SELECTOR ==Int selector ( "allowCallsToAddress(address)" )
+
+

allowChangesToStorage - Add an account address and a storage slot to a whitelist.

+
function allowChangesToStorage(address,uint256) external;
+
+
    rule [foundry.allowStorageSlotToAddress]:
+         <k> #call_foundry SELECTOR ARGS => #loadAccount #asWord(ARGS) ~> #addStorageSlotToWhitelist { #asWord(#range(ARGS, 0, 32)) | #asWord(#range(ARGS, 32, 32)) } ... </k>
+         requires SELECTOR ==Int selector ( "allowChangesToStorage(address,uint256)" )
+
+

sign - Signs a digest with private key

+
function sign(uint256 privateKey, bytes32 digest) external returns (uint8 v, bytes32 r, bytes32 s);
+
+

foundry.call.sign will match when the sign cheat code function is called. +This rule then takes from the privateKey to sign using #range(ARGS,0,32) and the digest to be signed using #range(ARGS, 32, 32). +To perform the signature we use the ECDSASign ( String, String ) function (from KEVM). +This function receives as arguments 2 strings: the data to be signed and the private key, therefore we use #unparseByteStack to convert the Bytes with the privateKey and digest into strings. +The ECDSASign function returns the signed data in [r,s,v] form, which we convert to a Bytes using #parseByteStack.

+
    rule [foundry.call.sign]:
+         <k> #call_foundry SELECTOR ARGS => . ... </k>
+         <output> _ => #sign(#range(ARGS, 32, 32),#range(ARGS,0,32)) </output>
+      requires SELECTOR ==Int selector ( "sign(uint256,bytes32)" )
+
+

Otherwise, throw an error for any other call to the Foundry contract.

+
    rule [foundry.call.owise]:
+         <k> #call_foundry SELECTOR ARGS => #error_foundry SELECTOR ARGS ... </k>
+         <statusCode> _ => FOUNDRY_UNIMPLEMENTED </statusCode>
+      [owise]
+
+

Utils

+
    +
  • #loadAccount ACCT creates a new, empty account for ACCT if it does not already exist. Otherwise, it has no effect.
  • +
+
    syntax KItem ::= "#loadAccount" Int [klabel(foundry_loadAccount)]
+ // -----------------------------------------------------------------
+    rule <k> #loadAccount ACCT => #accessAccounts ACCT ... </k> <account> <acctID> ACCT </acctID> ... </account>
+    rule <k> #loadAccount ACCT => #newAccount ACCT ~> #accessAccounts ACCT ... </k> [owise]
+
+
    +
  • #setBalance ACCTID NEWBAL sets the balance of a given account.
  • +
+
    syntax KItem ::= "#setBalance" Int Int [klabel(foundry_setBalance)]
+ // -------------------------------------------------------------------
+    rule <k> #setBalance ACCTID NEWBAL => . ... </k>
+         <account>
+           <acctID> ACCTID </acctID>
+           <balance> _ => NEWBAL </balance>
+           ...
+         </account>
+
+
    +
  • #setCode ACCTID CODE sets the code of a given account.
  • +
+
    syntax KItem ::= "#setCode" Int Bytes [klabel(foundry_setCode)]
+ // ---------------------------------------------------------------
+    rule <k> #setCode ACCTID CODE => . ... </k>
+         <account>
+           <acctID> ACCTID </acctID>
+           <code> _ => #if #asWord(CODE) ==Int 0 #then .Bytes #else CODE #fi </code>
+           ...
+         </account>
+
+
    +
  • #returnNonce ACCTID takes the nonce of a given account and places it on the <output> cell.
  • +
+
    syntax KItem ::= "#returnNonce" Int [klabel(foundry_returnNonce)]
+ // -----------------------------------------------------------------
+    rule <k> #returnNonce ACCTID => . ... </k>
+         <output> _ => #bufStrict(32, NONCE) </output>
+         <account>
+           <acctID> ACCTID </acctID>
+           <nonce> NONCE </nonce>
+           ...
+         </account>
+
+
    +
  • #setNonce ACCTID NONCE takes a given account and a given nonce and update the account accordingly.
  • +
+
     syntax KItem ::= "#setNonce" Int Int [klabel(foundry_setNonce)]
+ // ----------------------------------------------------------------
+    rule <k> #setNonce ACCTID NONCE => . ... </k>
+         <account>
+             <acctID> ACCTID </acctID>
+             <nonce> _ => NONCE </nonce>
+             ...
+         </account>
+
+
    +
  • #returnStorage ACCTID LOC takes a storage value from a given account and places it on the <output> cell.
  • +
+
    syntax KItem ::= "#returnStorage" Int Int [klabel(foundry_returnStorage)]
+ // -------------------------------------------------------------------------
+    rule <k> #returnStorage ACCTID LOC => . ... </k>
+         <output> _ => #bufStrict(32, #lookup(STORAGE, LOC)) </output>
+         <account>
+           <acctID> ACCTID </acctID>
+           <storage> STORAGE </storage>
+           ...
+         </account>
+
+
    +
  • #setStorage ACCTID LOC VALUE sets a given value to a given location of an account.
  • +
+
    syntax KItem ::= "#setStorage" Int Int Int [klabel(foundry_setStorage)]
+ // -----------------------------------------------------------------------
+    rule <k> #setStorage ACCTID LOC VALUE => . ... </k>
+         <account>
+           <acctID> ACCTID </acctID>
+           <storage> STORAGE => STORAGE [ LOC <- VALUE ] </storage>
+             ...
+         </account>
+
+

#setSymbolicStorage ACCTID takes a given account and makes its storage fully symbolic.

+
     syntax KItem ::= "#setSymbolicStorage" Int [klabel(foundry_setSymbolicStorage)]
+
+
    rule <k> #setSymbolicStorage ACCTID => . ... </k>
+         <account>
+           <acctID> ACCTID </acctID>
+           <storage> _ => ?STORAGE </storage>
+           <origStorage> _ => ?STORAGE </origStorage>
+           ...
+         </account>
+
+
    +
  • #setExpectRevert sets the <expectedRevert> subconfiguration with the current call depth and the expected message from expectRevert.
  • +
+
    syntax KItem ::= "#setExpectRevert" Bytes [klabel(foundry_setExpectRevert)]
+ // ---------------------------------------------------------------------------
+    rule <k> #setExpectRevert EXPECTED => . ... </k>
+         <callDepth> CD </callDepth>
+         <expectedRevert>
+           <isRevertExpected> false => true </isRevertExpected>
+           <expectedDepth> _ => CD +Int 1 </expectedDepth>
+           <expectedReason> _ => EXPECTED </expectedReason>
+         </expectedRevert>
+
+
    +
  • #clearExpectRevert sets the <expectedRevert> subconfiguration to initial values.
  • +
+
    syntax KItem ::= "#clearExpectRevert" [klabel(foundry_clearExpectRevert)]
+ // -------------------------------------------------------------------------
+    rule <k> #clearExpectRevert => . ... </k>
+         <output> _ => #buf (512, 0) </output>
+         <expectedRevert>
+           <isRevertExpected> _ => false </isRevertExpected>
+           <expectedDepth> _ => 0 </expectedDepth>
+           <expectedReason> _ => .Bytes </expectedReason>
+         </expectedRevert>
+
+
    +
  • #encodeOutput - will encode the output Bytes to match the encoding of the Bytes in <expectedReason> cell. +
      +
    • If the revert instruction and the expectRevert cheat code are used with with a custom error, then expectRevert will store the message with the encoding abi.encode(abi.encodeWithSelector(CustomError.selector, 1, 2)), while the output cell will contain only the abi.encodeWithSelector(CustomError.selector, 1, 2).
    • +
    • If the revert instruction and the expectRevert cheat code are used with with a string, then expectRevert will store the only the encoded string, while the <output> cell will store the encoded built-in error Error(string). +Since the encoding abi.encode(abi.encodeWithSelector(CustomError.selector, 1, 2)) cannot be easily decoded when symbolic variables are used, the <output> Bytes is encoded again when the default Error(string) is not used.
    • +
    +
  • +
+
    syntax Bytes ::= "#encodeOutput" "(" Bytes ")" [function, total, klabel(foundry_encodeOutput)]
+ // ----------------------------------------------------------------------------------------------
+    rule #encodeOutput(BA) => #abiCallData("expectRevert", #bytes(BA)) requires notBool #range(BA, 0, 4) ==K Int2Bytes(4, selector("Error(string)"), BE)
+    rule #encodeOutput(BA) => BA [owise]
+
+
    +
  • #checkRevertReason will compare the contents of the <output> cell with the Bytes from <expectReason>.
  • +
+
    syntax KItem ::= "#checkRevertReason" [klabel(foundry_checkRevertReason)]
+ // -------------------------------------------------------------------------
+    rule <k> #checkRevertReason => . ... </k>
+         <statusCode> _ => EVMC_SUCCESS </statusCode>
+         <output> OUT </output>
+         <expectedRevert>
+           <expectedReason> REASON </expectedReason>
+           ...
+         </expectedRevert>
+      requires #matchReason(REASON, #encodeOutput(OUT))
+
+    rule <k> #checkRevertReason => #markAsFailed ... </k>
+         <output> OUT </output>
+         <expectedRevert>
+           <expectedReason> REASON </expectedReason>
+           ...
+         </expectedRevert>
+      requires notBool #matchReason(REASON, #encodeOutput(OUT))
+
+
    +
  • #matchReason(REASON,OUT) will check if the returned message matches the expected reason of the revert. +Will also return true if REASON is .Bytes.
  • +
+
    syntax Bool ::= "#matchReason" "(" Bytes "," Bytes ")" [function, klabel(foundry_matchReason)]
+ // ----------------------------------------------------------------------------------------------
+    rule #matchReason(REASON, _) => true requires REASON ==K .Bytes
+    rule #matchReason(REASON, OUT) => REASON ==K #range(OUT, 4, lengthBytes(OUT) -Int 4) requires REASON =/=K .Bytes
+
+
    +
  • #setExpectOpcode initializes the <expectedOpcode> subconfiguration with an expected Address, and Bytes to match the calldata. +CallType is used to specify what CALL* opcode is expected.
  • +
+
    syntax KItem ::= "#setExpectOpcode" Account Bytes Int OpcodeType [klabel(foundry_setExpectOpcode)]
+ // --------------------------------------------------------------------------------------------------
+    rule <k> #setExpectOpcode ACCT DATA VALUE OPTYPE => . ... </k>
+         <expectedOpcode>
+           <isOpcodeExpected> _ => true </isOpcodeExpected>
+           <expectedAddress> _ => ACCT </expectedAddress>
+           <expectedData> _ => DATA </expectedData>
+           <expectedValue> _ => VALUE </expectedValue>
+           <opcodeType> _ => OPTYPE </opcodeType>
+         </expectedOpcode>
+
+
    +
  • #clearExpectOpcode restore the <expectedOpcode> subconfiguration to its initial values.
  • +
+
    syntax KItem ::= "#clearExpectOpcode" [klabel(foundry_clearExpectOpcode)]
+ // -------------------------------------------------------------------------
+    rule <k> #clearExpectOpcode => . ... </k>
+         <expectedOpcode>
+           <isOpcodeExpected> _ => false </isOpcodeExpected>
+           <expectedAddress> _ => .Account </expectedAddress>
+           <expectedData> _ => .Bytes </expectedData>
+           <opcodeType> _ => .OpcodeType </opcodeType>
+           <expectedValue> _ => 0 </expectedValue>
+         </expectedOpcode>
+
+
    +
  • #setPrank NEWCALLER NEWORIGIN SINGLEPRANK will set the <prank/> subconfiguration for the given accounts.
  • +
+
    syntax KItem ::= "#setPrank" Int Account Bool [klabel(foundry_setPrank)]
+ // ------------------------------------------------------------------------
+    rule <k> #setPrank NEWCALLER NEWORIGIN SINGLEPRANK => . ... </k>
+         <callDepth> CD </callDepth>
+         <caller> CL </caller>
+         <origin> OG </origin>
+         <prank>
+           <prevCaller> .Account => CL </prevCaller>
+           <prevOrigin> .Account => OG </prevOrigin>
+           <newCaller> _ => NEWCALLER </newCaller>
+           <newOrigin> _ => NEWORIGIN </newOrigin>
+           <active> false => true </active>
+           <depth> _ => CD </depth>
+           <singleCall> _ => SINGLEPRANK </singleCall>
+         </prank>
+
+
    +
  • #endPrank will end the prank, restoring the previous caller and origin to the <caller> and <origin> cells in the configuration. +If the production is matched when no prank is active, it will be ignored.
  • +
+
    syntax KItem ::= "#endPrank" [klabel(foundry_endPrank)]
+ // -------------------------------------------------------
+    rule <k> #endPrank => #clearPrank ... </k>
+        <caller> _ => CL </caller>
+        <origin> _ => OG </origin>
+        <prank>
+          <prevCaller> CL </prevCaller>
+          <prevOrigin> OG </prevOrigin>
+          <active> true </active>
+          ...
+        </prank>
+
+    rule <k> #endPrank => . ... </k>
+        <prank>
+          <active> false </active>
+          ...
+        </prank>
+
+
    +
  • #clearPrank will clear the prank subconfiguration.
  • +
+
    syntax KItem ::= "#clearPrank" [klabel(foundry_clearPrank)]
+ // -----------------------------------------------------------
+    rule <k> #clearPrank => . ... </k>
+        <prank>
+          <prevCaller> _ => .Account </prevCaller>
+          <prevOrigin> _ => .Account </prevOrigin>
+          <newCaller> _ => .Account </newCaller>
+          <newOrigin> _ => .Account </newOrigin>
+          <active> _ => false </active>
+          <depth> _ => 0 </depth>
+          <singleCall> _ => false </singleCall>
+        </prank>
+
+
    syntax Bytes ::= #sign ( Bytes , Bytes ) [function,klabel(foundry_sign)]
+ // ------------------------------------------------------------------------
+    rule #sign(BA1, BA2) => #parseByteStack(ECDSASign(#unparseByteStack(BA1), #unparseByteStack(BA2))) [concrete]
+
+
    +
  • #setExpectEmit will initialize the <expectEmit/> subconfiguration, based on the arguments provided with the expectEmit cheat code.
  • +
+
    syntax KItem ::= "#setExpectEmit" Bool Bool Bool Bool Account [klabel(foundry_setExpectEmit)]
+ // ---------------------------------------------------------------------------------------------
+    rule <k> #setExpectEmit T1 T2 T3 CHECKDATA ACCT => . ... </k>
+         <expectEmit>
+           <recordEvent> _ => true </recordEvent>
+           <isEventExpected> _ => false </isEventExpected>
+           <checkedTopics> _ => ListItem(true) ListItem(T1) ListItem(T2) ListItem(T3) .List </checkedTopics>
+           <checkedData> _ => CHECKDATA </checkedData>
+           <expectedEventAddress> _ => ACCT </expectedEventAddress>
+         </expectEmit>
+
+
    +
  • #clearExpectEmit is used to clear the <expectEmit/> subconfiguration and restore initial values.
  • +
+
    syntax KItem ::= "#clearExpectEmit" [klabel(foundry_clearExpectEmit)]
+ // ---------------------------------------------------------------------
+    rule <k> #clearExpectEmit => . ...</k>
+         <expectEmit>
+           <recordEvent> _ => false </recordEvent>
+           <isEventExpected> _ => false </isEventExpected>
+           <checkedTopics> _ => .List </checkedTopics>
+           <checkedData> _ => false </checkedData>
+           <expectedEventAddress> _ => .Account </expectedEventAddress>
+         </expectEmit>
+
+
    +
  • #checkTopics and #checkTopic are functions that compare the TOPICS of the expected Event with those of the currently emitted Event.
  • +
+
    syntax Bool ::= "#checkTopic" "(" Bool "," Int "," Int ")" [function, klabel(foundry_checkTopic)]
+                  | "#checkTopics" "(" List "," List "," List ")" [function, klabel(foundry_checkTopics)]
+ // -----------------------------------------------------------------------------------------------------
+    rule #checkTopic(CHECK, V1, V2) => (notBool CHECK) orBool (V1 ==Int V2)
+
+    rule #checkTopics(.List, _, _) => true
+    rule #checkTopics(ListItem(true), L1, L2) => false requires L1 ==K .List orBool L2 ==K .List
+    rule #checkTopics(ListItem(false), L1, L2) => true requires L1 ==K .List orBool L2 ==K .List
+    rule #checkTopics(ListItem(CHECK) CHECKS, ListItem(V1) L1, ListItem(V2) L2) => #checkTopic(CHECK, V1, V2) andBool #checkTopics(CHECKS, L1, L2)
+
+
    +
  • #addAddressToWhitelist enables the whitelist restriction for calls and adds an address to the whitelist.
  • +
+
    syntax KItem ::= "#addAddressToWhitelist" Int [klabel(foundry_addAddressToWhitelist)]
+ // -------------------------------------------------------------------------------------
+    rule <k> #addAddressToWhitelist ACCT => . ... </k>
+        <whitelist>
+          <isCallWhitelistActive> _ => true </isCallWhitelistActive>
+          <addressSet>  WLIST => WLIST SetItem(ACCT) </addressSet>
+          ...
+        </whitelist>
+
+
    +
  • #addStorageSlotToWhitelist enables the whitelist restriction for storage chagnes and adds a StorageSlot item to the whitelist.
  • +
+
    syntax KItem ::= "#addStorageSlotToWhitelist" StorageSlot [klabel(foundry_addStorageSlotToWhitelist)]
+ // -----------------------------------------------------------------------------------------------------
+    rule <k> #addStorageSlotToWhitelist SLOT => . ... </k>
+        <whitelist>
+          <isStorageWhitelistActive> _ => true </isStorageWhitelistActive>
+          <storageSlotSet> WLIST => WLIST SetItem(SLOT) </storageSlotSet>
+          ...
+        </whitelist>
+
+
    +
  • selectors for cheat code functions.
  • +
+
    rule ( selector ( "assume(bool)" )                             => 1281615202 )
+    rule ( selector ( "deal(address,uint256)" )                    => 3364511341 )
+    rule ( selector ( "etch(address,bytes)" )                      => 3033974658 )
+    rule ( selector ( "warp(uint256)" )                            => 3856056066 )
+    rule ( selector ( "roll(uint256)" )                            => 528174896  )
+    rule ( selector ( "fee(uint256)" )                             => 968063664  )
+    rule ( selector ( "chainId(uint256)" )                         => 1078582738 )
+    rule ( selector ( "coinbase(address)" )                        => 4282924116 )
+    rule ( selector ( "label(address,string)" )                    => 3327641368 )
+    rule ( selector ( "getNonce(address)" )                        => 755185067  )
+    rule ( selector ( "addr(uint256)" )                            => 4288775753 )
+    rule ( selector ( "load(address,bytes32)" )                    => 1719639408 )
+    rule ( selector ( "store(address,bytes32,bytes32)" )           => 1892290747 )
+    rule ( selector ( "setNonce(address,uint64)" )                 => 4175530839 )
+    rule ( selector ( "expectRevert()" )                           => 4102309908 )
+    rule ( selector ( "expectRevert(bytes)" )                      => 4069379763 )
+    rule ( selector ( "startPrank(address)" )                      => 105151830  )
+    rule ( selector ( "startPrank(address,address)" )              => 1169514616 )
+    rule ( selector ( "stopPrank()" )                              => 2428830011 )
+    rule ( selector ( "expectStaticCall(address,bytes)" )          => 2232945516 )
+    rule ( selector ( "expectDelegateCall(address,bytes)" )        => 1030406631 )
+    rule ( selector ( "expectRegularCall(address,uint256,bytes)" ) => 1973496647 )
+    rule ( selector ( "expectCreate(address,uint256,bytes)" )      => 658968394  )
+    rule ( selector ( "expectCreate2(address,uint256,bytes)" )     => 3854582462 )
+    rule ( selector ( "expectEmit(bool,bool,bool,bool)" )          => 1226622914 )
+    rule ( selector ( "expectEmit(bool,bool,bool,bool,address)" )  => 2176505587 )
+    rule ( selector ( "sign(uint256,bytes32)" )                    => 3812747940 )
+    rule ( selector ( "symbolicStorage(address)" )                 => 769677742  )
+    rule ( selector ( "freshUInt(uint8)" )                         => 625253732  )
+    rule ( selector ( "freshBool()" )                              => 2935720297 )
+    rule ( selector ( "prank(address)" )                           => 3395723175 )
+    rule ( selector ( "prank(address,address)" )                   => 1206193358 )
+    rule ( selector ( "allowCallsToAddress(address)" )             => 1850795572 )
+    rule ( selector ( "allowChangesToStorage(address,uint256)" )   => 4207417100 )
+    rule ( selector ( "infiniteGas()" )                            => 3986649939 )
+
+
    +
  • selectors for unimplemented cheat code functions.
  • +
+
    rule selector ( "expectRegularCall(address,bytes)" )        => 3178868520
+    rule selector ( "expectNoCall()" )                          => 3861374088
+    rule selector ( "ffi(string[])" )                           => 2299921511
+    rule selector ( "setEnv(string,string)" )                   => 1029252078
+    rule selector ( "envBool(string)" )                         => 2127686781
+    rule selector ( "envUint(string)" )                         => 3247934751
+    rule selector ( "envInt(string)" )                          => 2301234273
+    rule selector ( "envAddress(string)" )                      => 890066623
+    rule selector ( "envBytes32(string)" )                      => 2543095874
+    rule selector ( "envString(string)" )                       => 4168600345
+    rule selector ( "envBytes(string)" )                        => 1299951366
+    rule selector ( "envBool(string,string)" )                  => 2863521455
+    rule selector ( "envUint(string,string)" )                  => 4091461785
+    rule selector ( "envInt(string,string)" )                   => 1108873552
+    rule selector ( "envAddress(string,string)" )               => 2905717242
+    rule selector ( "envBytes32(string,string)" )               => 1525821889
+    rule selector ( "envString(string,string)" )                => 347089865
+    rule selector ( "envBytes(string,string)" )                 => 3720504603
+    rule selector ( "expectRevert(bytes4)" )                    => 3273568480
+    rule selector ( "record()" )                                => 644673801
+    rule selector ( "accesses(address)" )                       => 1706857601
+    rule selector ( "mockCall(address,bytes calldata,bytes)" )  => 378193464
+    rule selector ( "mockCall(address,uint256,bytes,bytes)" )   => 2168494993
+    rule selector ( "clearMockedCalls()" )                      => 1071599125
+    rule selector ( "expectCall(address,bytes)" )               => 3177903156
+    rule selector ( "expectCall(address,uint256,bytes)" )       => 4077681571
+    rule selector ( "getCode(string)" )                         => 2367473957
+    rule selector ( "broadcast()" )                             => 2949218368
+    rule selector ( "broadcast(address)" )                      => 3868601563
+    rule selector ( "startBroadcast()" )                        => 2142579071
+    rule selector ( "startBroadcast(address)" )                 => 2146183821
+    rule selector ( "stopBroadcast()" )                         => 1995103542
+    rule selector ( "readFile(string)" )                        => 1626979089
+    rule selector ( "readLine(string)" )                        => 1895126824
+    rule selector ( "writeFile(string,string)" )                => 2306738839
+    rule selector ( "writeLine(string,string)" )                => 1637714303
+    rule selector ( "closeFile(string)" )                       => 1220748319
+    rule selector ( "removeFile(string)" )                      => 4054835277
+    rule selector ( "toString(address)" )                       => 1456103998
+    rule selector ( "toString(bytes)" )                         => 1907020045
+    rule selector ( "toString(bytes32)" )                       => 2971277800
+    rule selector ( "toString(bool)" )                          => 1910302682
+    rule selector ( "toString(uint256)" )                       => 1761649582
+    rule selector ( "toString(int256)" )                        => 2736964622
+    rule selector ( "recordLogs()" )                            => 1101999954
+    rule selector ( "getRecordedLogs()" )                       => 420828068
+    rule selector ( "snapshot()" )                              => 2534502746
+    rule selector ( "revertTo(uint256)" )                       => 1155002532
+    rule selector ( "createFork(string,uint256)" )              => 1805892139
+    rule selector ( "createFork(string)" )                      => 834286744
+    rule selector ( "createSelectFork(string,uint256)" )        => 1911440973
+    rule selector ( "createSelectFork(string)" )                => 2556952628
+    rule selector ( "selectFork(uint256)" )                     => 2663344167
+    rule selector ( "activeFork()" )                            => 789593890
+    rule selector ( "rollFork(uint256)" )                       => 3652973473
+    rule selector ( "rollFork(uint256,uint256)" )               => 3612115876
+    rule selector ( "rpcUrl(string)" )                          => 2539285737
+    rule selector ( "rpcUrls()" )                               => 2824504344
+    rule selector ( "deriveKey(string,uint32)" )                => 1646872971
+
+
    +
  • selector for Solidity built-in Error
  • +
+
    rule ( selector ( "Error(string)" ) => 147028384 )
+
+
endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/gas.md b/include/kframework/gas.md deleted file mode 100644 index d479310b9e..0000000000 --- a/include/kframework/gas.md +++ /dev/null @@ -1,264 +0,0 @@ -KEVM Gas -======== - -Here is a representation of `Gas`. This sort is used by ``, ``, and `` cells of the EVM configuration. As is in this file, `Gas` is a super-sort of `Int` with no differing behaviour. However the distinction at this level allows for an extension of infinite gas later, see `infinite-gas.md`. - -```k -requires "schedule.md" - -module GAS-SYNTAX - imports INT-SYNTAX - - syntax Gas ::= Int - syntax Int ::= "gas2Int" "(" Gas ")" [function, total] - - syntax Gas ::= "minGas" "(" Gas "," Gas ")" [function, total] - > left: - Gas "*Gas" Gas [function, total] - | Gas "/Gas" Gas [function] - > left: - Gas "+Gas" Gas [function, total] - | Gas "-Gas" Gas [function, total] - - syntax Bool ::= Gas " I1 *Int I2 - rule I1:Int /Gas I2:Int => I1 /Int I2 - rule I1:Int +Gas I2:Int => I1 +Int I2 - rule I1:Int -Gas I2:Int => I1 -Int I2 - - rule I1:Int I1 I1 <=Int I2 - - rule minGas(I1:Int, I2:Int) => minInt(I1, I2) - rule gas2Int(G:Int) => G -endmodule -``` - -KEVM Infinite Gas -================= - -Here we use the construct `#gas` to represent positive infinity, while tracking the gas formula through execution. -This allows (i) computing final gas used, and (ii) never stopping because of out-of-gas. -Note that the argument to `#gas(_)` is just metadata tracking the current gas usage, and is not meant to be compared to other values. -As such, any `#gas(G)` and `#gas(G')` are the _same_ positive infinite, regardless of the values `G` and `G'`. -In particular, this means that `#gas(_) false`, and `#gas(_) <=Gas #gas(_) => true`, regardless of the values contained in the `#gas(_)`. - -```k -module INFINITE-GAS - imports GAS - - syntax Gas ::= #gas(Int) [klabel(infGas), symbol, smtlib(infGas)] - - rule #gas(G) +Gas G' => #gas(G +Int G') - rule #gas(G) -Gas G' => #gas(G -Int G') - rule #gas(G) *Gas G' => #gas(G *Int G') - rule #gas(G) /Gas G' => #gas(G /Int G') requires G' =/=Int 0 - rule G +Gas #gas(G') => #gas(G +Int G') - rule G -Gas #gas(G') => #gas(G -Int G') - rule G *Gas #gas(G') => #gas(G *Int G') - rule G /Gas #gas(G') => #gas(G /Int G') requires G' =/=Int 0 - rule #gas(G) +Gas #gas(G') => #gas(G +Int G') - rule #gas(G) -Gas #gas(G') => #gas(G -Int G') - rule #gas(G) *Gas #gas(G') => #gas(G *Int G') - rule #gas(G) /Gas #gas(G') => #gas(G /Int G') requires G' =/=Int 0 - - rule _:Int true - rule #gas(_) false [simplification] - rule #gas(_) <=Gas _:Int => false - rule _ <=Gas #gas(_) => true [simplification] - - rule minGas(#gas(G), #gas(G')) => #gas(minInt(G, G')) - rule minGas(G:Int , #gas(G')) => #gas(minInt(G, G')) - rule minGas(#gas(G), G':Int) => #gas(minInt(G, G')) - - rule gas2Int(#gas(G)) => G - - rule #allBut64th(#gas(G)) => #gas(#allBut64th(G)) - rule Cgascap(SCHED, #gas(GCAP), #gas(GAVAIL), GEXTRA) => #gas(Cgascap(SCHED, GCAP, GAVAIL, GEXTRA)) [simplification] - rule Cgascap(SCHED, #gas(GCAP), GAVAIL:Int, GEXTRA) => #gas(Cgascap(SCHED, GCAP, GAVAIL, GEXTRA)) [simplification] - rule Cgascap(SCHED, GCAP:Int, #gas(GAVAIL), GEXTRA) => #gas(Cgascap(SCHED, GCAP, GAVAIL, GEXTRA)) [simplification] - - rule #if B #then #gas(G) #else #gas(G') #fi => #gas(#if B #then G #else G' #fi) [simplification] -endmodule -``` - -KEVM Gas Fees -============= - -Here are some internal helper functions for calculating gas. Most of these functions are specified in the YellowPaper. - -```k -module GAS-FEES - imports GAS-SYNTAX - imports SCHEDULE - - syntax Gas ::= Cgascap ( Schedule , Gas , Gas , Int ) [function, total, smtlib(gas_Cgascap_Gas) ] - syntax Int ::= Cgascap ( Schedule , Int , Int , Int ) [function, total, smtlib(gas_Cgascap_Int) ] - | Csstore ( Schedule , Int , Int , Int ) [function, total, smtlib(gas_Csstore) ] - | Rsstore ( Schedule , Int , Int , Int ) [function, total, smtlib(gas_Rsstore) ] - | Cextra ( Schedule , Bool , Int , Bool ) [function, total, smtlib(gas_Cextra) ] - | Cnew ( Schedule , Bool , Int ) [function, total, smtlib(gas_Cnew) ] - | Cxfer ( Schedule , Int ) [function, total, smtlib(gas_Cxfer) ] - | Cmem ( Schedule , Int ) [function, total, smtlib(gas_Cmem), memo ] - | Caddraccess ( Schedule , Bool ) [function, total, smtlib(gas_Caddraccess) ] - | Cstorageaccess ( Schedule , Bool ) [function, total, smtlib(gas_Cstorageaccess)] - | Csload ( Schedule , Bool ) [function, total, smtlib(gas_Csload) ] - | Cextcodesize ( Schedule ) [function, total, smtlib(gas_Cextcodesize) ] - | Cextcodecopy ( Schedule , Int ) [function, total, smtlib(gas_Cextcodecopy) ] - | Cextcodehash ( Schedule ) [function, total, smtlib(gas_Cextcodehash) ] - | Cbalance ( Schedule ) [function, total, smtlib(gas_Cbalance) ] - | Cmodexp ( Schedule , Bytes , Int , Int , Int ) [function, total, smtlib(gas_Cmodexp) ] - // ------------------------------------------------------------------------------------------------------------------ - rule [Cgascap]: - Cgascap(SCHED, GCAP:Int, GAVAIL:Int, GEXTRA) - => #if GAVAIL > #then GCAP #else minInt(#allBut64th(GAVAIL -Int GEXTRA), GCAP) #fi - requires 0 <=Int GCAP - [concrete] - - rule Cgascap(_, GCAP, _, _) => 0 requires GCAP #if CURR ==Int NEW orBool ORIG =/=Int CURR #then Gsload < SCHED > #else #if ORIG ==Int 0 #then Gsstoreset < SCHED > #else Gsstorereset < SCHED > #fi #fi - requires Ghasdirtysstore << SCHED >> - [concrete] - - rule [Csstore.old]: - Csstore(SCHED, NEW, CURR, _ORIG) - => #if CURR ==Int 0 andBool NEW =/=Int 0 #then Gsstoreset < SCHED > #else Gsstorereset < SCHED > #fi - requires notBool Ghasdirtysstore << SCHED >> - [concrete] - - rule [Rsstore.new]: - Rsstore(SCHED, NEW, CURR, ORIG) - => #if CURR =/=Int NEW andBool ORIG ==Int CURR andBool NEW ==Int 0 #then - Rsstoreclear < SCHED > - #else - #if CURR =/=Int NEW andBool ORIG =/=Int CURR andBool ORIG =/=Int 0 #then - #if CURR ==Int 0 #then 0 -Int Rsstoreclear < SCHED > #else #if NEW ==Int 0 #then Rsstoreclear < SCHED > #else 0 #fi #fi - #else - 0 - #fi +Int - #if CURR =/=Int NEW andBool ORIG ==Int NEW #then - #if ORIG ==Int 0 #then Gsstoreset < SCHED > #else Gsstorereset < SCHED > #fi -Int Gsload < SCHED > - #else - 0 - #fi - #fi - requires Ghasdirtysstore << SCHED >> - [concrete] - - rule [Rsstore.old]: - Rsstore(SCHED, NEW, CURR, _ORIG) - => #if CURR =/=Int 0 andBool NEW ==Int 0 #then Rsstoreclear < SCHED > #else 0 #fi - requires notBool Ghasdirtysstore << SCHED >> - [concrete] - - rule [Cextra.new]: Cextra(SCHED, ISEMPTY, VALUE, ISWARM) => Caddraccess(SCHED, ISWARM) +Int Cnew(SCHED, ISEMPTY, VALUE) +Int Cxfer(SCHED, VALUE) requires Ghasaccesslist << SCHED >> - rule [Cextra.old]: Cextra(SCHED, ISEMPTY, VALUE, _ISWARM) => Gcall < SCHED > +Int Cnew(SCHED, ISEMPTY, VALUE) +Int Cxfer(SCHED, VALUE) requires notBool Ghasaccesslist << SCHED >> - - rule [Cnew]: - Cnew(SCHED, ISEMPTY:Bool, VALUE) - => #if ISEMPTY andBool (VALUE =/=Int 0 orBool Gzerovaluenewaccountgas << SCHED >>) #then Gnewaccount < SCHED > #else 0 #fi - - rule [Cxfer.none]: Cxfer(_SCHED, 0) => 0 - rule [Cxfer.some]: Cxfer( SCHED, N) => Gcallvalue < SCHED > requires N =/=Int 0 - - rule [Cmem]: Cmem(SCHED, N) => (N *Int Gmemory < SCHED >) +Int ((N *Int N) /Int Gquadcoeff < SCHED >) [concrete] - - rule [Caddraccess]: Caddraccess(SCHED, ISWARM) => #if ISWARM #then Gwarmstorageread < SCHED > #else Gcoldaccountaccess < SCHED > #fi - rule [Cstorageaccess]: Cstorageaccess(SCHED, ISWARM) => #if ISWARM #then Gwarmstorageread < SCHED > #else Gcoldsload < SCHED > #fi - - rule [Csload.new]: Csload(SCHED, ISWARM) => Cstorageaccess(SCHED, ISWARM) requires Ghasaccesslist << SCHED >> - rule [Csload.old]: Csload(SCHED, _ISWARM) => Gsload < SCHED > requires notBool Ghasaccesslist << SCHED >> - - rule [Cextcodesize.new]: Cextcodesize(SCHED) => 0 requires Ghasaccesslist << SCHED >> - rule [Cextcodesize.old]: Cextcodesize(SCHED) => Gextcodesize < SCHED > requires notBool Ghasaccesslist << SCHED >> - - rule [Cextcodehash.new]: Cextcodehash(SCHED) => 0 requires Ghasaccesslist << SCHED >> - rule [Cextcodehash.old]: Cextcodehash(SCHED) => Gbalance < SCHED > requires notBool Ghasaccesslist << SCHED >> - - rule [Cbalance.new]: Cbalance(SCHED) => 0 requires Ghasaccesslist << SCHED >> - rule [Cbalance.old]: Cbalance(SCHED) => Gbalance < SCHED > requires notBool Ghasaccesslist << SCHED >> - - rule [Cextcodecopy.new]: Cextcodecopy(SCHED, WIDTH) => Gcopy < SCHED > *Int (WIDTH up/Int 32) requires Ghasaccesslist << SCHED >> [concrete] - rule [Cextcodecopy.old]: Cextcodecopy(SCHED, WIDTH) => Gextcodecopy < SCHED > +Int (Gcopy < SCHED > *Int (WIDTH up/Int 32)) requires notBool Ghasaccesslist << SCHED >> [concrete] - - rule [Cmodexp.old]: Cmodexp(SCHED, DATA, BASELEN, EXPLEN, MODLEN) => #multComplexity(maxInt(BASELEN, MODLEN)) *Int maxInt(#adjustedExpLength(BASELEN, EXPLEN, DATA), 1) /Int Gquaddivisor < SCHED > - requires notBool Ghasaccesslist << SCHED >> - [concrete] - - rule [Cmodexp.new]: Cmodexp(SCHED, DATA, BASELEN, EXPLEN, MODLEN) => maxInt(200, (#newMultComplexity(maxInt(BASELEN, MODLEN)) *Int maxInt(#adjustedExpLength(BASELEN, EXPLEN, DATA), 1)) /Int Gquaddivisor < SCHED > ) - requires Ghasaccesslist << SCHED >> - [concrete] - - syntax Bool ::= #accountEmpty ( AccountCode , Int , Int ) [function, total, klabel(accountEmpty), symbol] - // --------------------------------------------------------------------------------------------------------- - rule #accountEmpty(CODE, NONCE, BAL) => CODE ==K .Bytes andBool NONCE ==Int 0 andBool BAL ==Int 0 - - syntax Gas ::= #allBut64th ( Gas ) [function, total, smtlib(gas_allBut64th_Gas)] - syntax Int ::= #allBut64th ( Int ) [function, total, smtlib(gas_allBut64th_Int)] - // -------------------------------------------------------------------------------- - rule [allBut64th.pos]: #allBut64th(N) => N -Int (N /Int 64) requires 0 <=Int N - rule [allBut64th.neg]: #allBut64th(N) => 0 requires N G0(SCHED, WS, 0, lengthBytes(WS), 0) +Int G0(SCHED, B) - - rule G0(SCHED, true) => Gtxcreate < SCHED > - rule G0(SCHED, false) => Gtransaction < SCHED > - - rule G0( _, _, I, I, R) => R - rule G0(SCHED, WS, I, J, R) => G0(SCHED, WS, I +Int 1, J, R +Int #if WS[I] ==Int 0 #then Gtxdatazero < SCHED > #else Gtxdatanonzero < SCHED > #fi) [owise] - - syntax Gas ::= "G*" "(" Gas "," Int "," Int "," Schedule ")" [function] - // ----------------------------------------------------------------------- - rule G*(GAVAIL, GLIMIT, REFUND, SCHED) => GAVAIL +Gas minGas((GLIMIT -Gas GAVAIL) /Gas Rmaxquotient < SCHED >, REFUND) - - syntax Int ::= #multComplexity(Int) [function] - | #newMultComplexity(Int) [function] - // ------------------------------------------------- - rule #multComplexity(X) => X *Int X requires X <=Int 64 - rule #multComplexity(X) => X *Int X /Int 4 +Int 96 *Int X -Int 3072 requires X >Int 64 andBool X <=Int 1024 - rule #multComplexity(X) => X *Int X /Int 16 +Int 480 *Int X -Int 199680 requires X >Int 1024 - - rule #newMultComplexity(X) => (X up/Int 8) ^Int 2 - - syntax Int ::= #adjustedExpLength(Int, Int, Bytes) [function] - | #adjustedExpLength(Int) [function, klabel(#adjustedExpLengthAux)] - // -------------------------------------------------------------------------------------------- - rule #adjustedExpLength(BASELEN, EXPLEN, DATA) => #if EXPLEN <=Int 32 #then 0 #else 8 *Int (EXPLEN -Int 32) #fi +Int #adjustedExpLength(#asInteger(#range(DATA, 96 +Int BASELEN, minInt(EXPLEN, 32)))) - - rule #adjustedExpLength(0) => 0 - rule #adjustedExpLength(1) => 0 - rule #adjustedExpLength(N) => 1 +Int #adjustedExpLength(N /Int 2) requires N >Int 1 -endmodule -``` - -KEVM Gas Simplifications -======================== - -Here are simplification rules related to gas that the haskell backend uses. - -```k -module GAS-SIMPLIFICATION [symbolic] - imports GAS-SYNTAX - imports INT - imports BOOL - - rule A false requires B <=Gas A [simplification] -endmodule -``` diff --git a/include/kframework/gas/index.html b/include/kframework/gas/index.html new file mode 100644 index 0000000000..df5979e7eb --- /dev/null +++ b/include/kframework/gas/index.html @@ -0,0 +1,456 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

KEVM Gas

+

Here is a representation of Gas. This sort is used by <gas>, <callGas>, and <gasUsed> cells of the EVM configuration. As is in this file, Gas is a super-sort of Int with no differing behaviour. However the distinction at this level allows for an extension of infinite gas later, see infinite-gas.md.

+
requires "schedule.md"
+
+module GAS-SYNTAX
+    imports INT-SYNTAX
+
+    syntax Gas ::= Int
+    syntax Int ::= "gas2Int" "(" Gas ")" [function, total]
+
+    syntax Gas ::= "minGas" "(" Gas "," Gas ")" [function, total]
+                 > left:
+                   Gas "*Gas" Gas [function, total]
+                 | Gas "/Gas" Gas [function]
+                 > left:
+                   Gas "+Gas" Gas [function, total]
+                 | Gas "-Gas" Gas [function, total]
+
+    syntax Bool ::= Gas  "<Gas" Gas [function, total]
+                  | Gas "<=Gas" Gas [function, total]
+endmodule
+
+module GAS
+    imports INT
+    imports BOOL
+    imports GAS-SYNTAX
+    imports GAS-SIMPLIFICATION
+    imports GAS-FEES
+
+    rule I1:Int *Gas I2:Int => I1 *Int I2
+    rule I1:Int /Gas I2:Int => I1 /Int I2
+    rule I1:Int +Gas I2:Int => I1 +Int I2
+    rule I1:Int -Gas I2:Int => I1 -Int I2
+
+    rule I1:Int  <Gas I2:Int => I1  <Int I2
+    rule I1:Int <=Gas I2:Int => I1 <=Int I2
+
+    rule minGas(I1:Int, I2:Int) => minInt(I1, I2)
+    rule gas2Int(G:Int) => G
+endmodule
+
+

KEVM Infinite Gas

+

Here we use the construct #gas to represent positive infinity, while tracking the gas formula through execution. +This allows (i) computing final gas used, and (ii) never stopping because of out-of-gas. +Note that the argument to #gas(_) is just metadata tracking the current gas usage, and is not meant to be compared to other values. +As such, any #gas(G) and #gas(G') are the same positive infinite, regardless of the values G and G'. +In particular, this means that #gas(_) <Gas #gas(_) => false, and #gas(_) <=Gas #gas(_) => true, regardless of the values contained in the #gas(_).

+
module INFINITE-GAS
+    imports GAS
+
+    syntax Gas ::= #gas(Int) [klabel(infGas), symbol, smtlib(infGas)]
+
+    rule #gas(G) +Gas G'       => #gas(G +Int G')
+    rule #gas(G) -Gas G'       => #gas(G -Int G')
+    rule #gas(G) *Gas G'       => #gas(G *Int G')
+    rule #gas(G) /Gas G'       => #gas(G /Int G')  requires G' =/=Int 0
+    rule      G  +Gas #gas(G') => #gas(G +Int G')
+    rule      G  -Gas #gas(G') => #gas(G -Int G')
+    rule      G  *Gas #gas(G') => #gas(G *Int G')
+    rule      G  /Gas #gas(G') => #gas(G /Int G')  requires G' =/=Int 0
+    rule #gas(G) +Gas #gas(G') => #gas(G +Int G')
+    rule #gas(G) -Gas #gas(G') => #gas(G -Int G')
+    rule #gas(G) *Gas #gas(G') => #gas(G *Int G')
+    rule #gas(G) /Gas #gas(G') => #gas(G /Int G')  requires G' =/=Int 0
+
+    rule _:Int    <Gas #gas(_) => true
+    rule #gas(_)  <Gas _       => false [simplification]
+    rule #gas(_) <=Gas _:Int   => false
+    rule _       <=Gas #gas(_) => true  [simplification]
+
+    rule minGas(#gas(G), #gas(G')) => #gas(minInt(G, G'))
+    rule minGas(G:Int  , #gas(G')) => #gas(minInt(G, G'))
+    rule minGas(#gas(G), G':Int)   => #gas(minInt(G, G'))
+
+    rule gas2Int(#gas(G)) => G
+
+    rule #allBut64th(#gas(G)) => #gas(#allBut64th(G))
+    rule Cgascap(SCHED, #gas(GCAP), #gas(GAVAIL), GEXTRA) => #gas(Cgascap(SCHED, GCAP, GAVAIL, GEXTRA)) [simplification]
+    rule Cgascap(SCHED, #gas(GCAP), GAVAIL:Int, GEXTRA)   => #gas(Cgascap(SCHED, GCAP, GAVAIL, GEXTRA)) [simplification]
+    rule Cgascap(SCHED, GCAP:Int, #gas(GAVAIL), GEXTRA)   => #gas(Cgascap(SCHED, GCAP, GAVAIL, GEXTRA)) [simplification]
+
+    rule #if B #then #gas(G) #else #gas(G') #fi => #gas(#if B #then G #else G' #fi) [simplification]
+endmodule
+
+

KEVM Gas Fees

+

Here are some internal helper functions for calculating gas. Most of these functions are specified in the YellowPaper.

+
module GAS-FEES
+    imports GAS-SYNTAX
+    imports SCHEDULE
+    
+    syntax Gas ::= Cgascap        ( Schedule , Gas , Gas , Int )         [function, total, smtlib(gas_Cgascap_Gas)   ]
+    syntax Int ::= Cgascap        ( Schedule , Int , Int , Int )         [function, total, smtlib(gas_Cgascap_Int)   ]
+                 | Csstore        ( Schedule , Int , Int , Int )         [function, total, smtlib(gas_Csstore)       ]
+                 | Rsstore        ( Schedule , Int , Int , Int )         [function, total, smtlib(gas_Rsstore)       ]
+                 | Cextra         ( Schedule , Bool , Int , Bool )       [function, total, smtlib(gas_Cextra)        ]
+                 | Cnew           ( Schedule , Bool , Int )              [function, total, smtlib(gas_Cnew)          ]
+                 | Cxfer          ( Schedule , Int )                     [function, total, smtlib(gas_Cxfer)         ]
+                 | Cmem           ( Schedule , Int )                     [function, total, smtlib(gas_Cmem), memo    ]
+                 | Caddraccess    ( Schedule , Bool )                    [function, total, smtlib(gas_Caddraccess)   ]
+                 | Cstorageaccess ( Schedule , Bool )                    [function, total, smtlib(gas_Cstorageaccess)]
+                 | Csload         ( Schedule , Bool )                    [function, total, smtlib(gas_Csload)        ]
+                 | Cextcodesize   ( Schedule )                           [function, total, smtlib(gas_Cextcodesize)  ]
+                 | Cextcodecopy   ( Schedule , Int )                     [function, total, smtlib(gas_Cextcodecopy)  ]
+                 | Cextcodehash   ( Schedule )                           [function, total, smtlib(gas_Cextcodehash)  ]
+                 | Cbalance       ( Schedule )                           [function, total, smtlib(gas_Cbalance)      ]
+                 | Cmodexp        ( Schedule , Bytes , Int , Int , Int ) [function, total, smtlib(gas_Cmodexp)       ]
+ // ------------------------------------------------------------------------------------------------------------------
+    rule [Cgascap]:
+         Cgascap(SCHED, GCAP:Int, GAVAIL:Int, GEXTRA)
+      => #if GAVAIL <Int GEXTRA orBool Gstaticcalldepth << SCHED >> #then GCAP #else minInt(#allBut64th(GAVAIL -Int GEXTRA), GCAP) #fi
+      requires 0 <=Int GCAP
+      [concrete]
+
+    rule Cgascap(_, GCAP, _, _) => 0 requires GCAP <Gas 0 [concrete]
+
+    rule [Csstore.new]:
+         Csstore(SCHED, NEW, CURR, ORIG)
+      => #if CURR ==Int NEW orBool ORIG =/=Int CURR #then Gsload < SCHED > #else #if ORIG ==Int 0 #then Gsstoreset < SCHED > #else Gsstorereset < SCHED > #fi #fi
+      requires Ghasdirtysstore << SCHED >>
+      [concrete]
+
+    rule [Csstore.old]:
+         Csstore(SCHED, NEW, CURR, _ORIG)
+      => #if CURR ==Int 0 andBool NEW =/=Int 0 #then Gsstoreset < SCHED > #else Gsstorereset < SCHED > #fi
+      requires notBool Ghasdirtysstore << SCHED >>
+      [concrete]
+
+    rule [Rsstore.new]:
+         Rsstore(SCHED, NEW, CURR, ORIG)
+      => #if CURR =/=Int NEW andBool ORIG ==Int CURR andBool NEW ==Int 0 #then
+             Rsstoreclear < SCHED >
+         #else
+             #if CURR =/=Int NEW andBool ORIG =/=Int CURR andBool ORIG =/=Int 0 #then
+                 #if CURR ==Int 0 #then 0 -Int Rsstoreclear < SCHED > #else #if NEW ==Int 0 #then Rsstoreclear < SCHED > #else 0 #fi #fi
+             #else
+                 0
+             #fi +Int
+             #if CURR =/=Int NEW andBool ORIG ==Int NEW #then
+                 #if ORIG ==Int 0 #then Gsstoreset < SCHED > #else Gsstorereset < SCHED > #fi -Int Gsload < SCHED >
+             #else
+                 0
+             #fi
+         #fi
+      requires Ghasdirtysstore << SCHED >>
+      [concrete]
+
+    rule [Rsstore.old]:
+         Rsstore(SCHED, NEW, CURR, _ORIG)
+      => #if CURR =/=Int 0 andBool NEW ==Int 0 #then Rsstoreclear < SCHED > #else 0 #fi
+      requires notBool Ghasdirtysstore << SCHED >>
+      [concrete]
+
+    rule [Cextra.new]: Cextra(SCHED, ISEMPTY, VALUE, ISWARM)  => Caddraccess(SCHED, ISWARM) +Int Cnew(SCHED, ISEMPTY, VALUE) +Int Cxfer(SCHED, VALUE) requires         Ghasaccesslist << SCHED >>
+    rule [Cextra.old]: Cextra(SCHED, ISEMPTY, VALUE, _ISWARM) => Gcall < SCHED > +Int Cnew(SCHED, ISEMPTY, VALUE) +Int Cxfer(SCHED, VALUE)            requires notBool Ghasaccesslist << SCHED >>
+
+    rule [Cnew]:
+         Cnew(SCHED, ISEMPTY:Bool, VALUE)
+      => #if ISEMPTY andBool (VALUE =/=Int 0 orBool Gzerovaluenewaccountgas << SCHED >>) #then Gnewaccount < SCHED > #else 0 #fi
+
+    rule [Cxfer.none]: Cxfer(_SCHED, 0) => 0
+    rule [Cxfer.some]: Cxfer( SCHED, N) => Gcallvalue < SCHED > requires N =/=Int 0
+
+    rule [Cmem]: Cmem(SCHED, N) => (N *Int Gmemory < SCHED >) +Int ((N *Int N) /Int Gquadcoeff < SCHED >) [concrete]
+
+    rule [Caddraccess]:    Caddraccess(SCHED, ISWARM)    => #if ISWARM #then Gwarmstorageread < SCHED > #else Gcoldaccountaccess < SCHED > #fi
+    rule [Cstorageaccess]: Cstorageaccess(SCHED, ISWARM) => #if ISWARM #then Gwarmstorageread < SCHED > #else Gcoldsload < SCHED >         #fi
+
+    rule [Csload.new]: Csload(SCHED, ISWARM)  => Cstorageaccess(SCHED, ISWARM) requires         Ghasaccesslist << SCHED >>
+    rule [Csload.old]: Csload(SCHED, _ISWARM) => Gsload < SCHED >              requires notBool Ghasaccesslist << SCHED >>
+
+    rule [Cextcodesize.new]: Cextcodesize(SCHED) => 0                      requires         Ghasaccesslist << SCHED >>
+    rule [Cextcodesize.old]: Cextcodesize(SCHED) => Gextcodesize < SCHED > requires notBool Ghasaccesslist << SCHED >>
+
+    rule [Cextcodehash.new]: Cextcodehash(SCHED) => 0                  requires         Ghasaccesslist << SCHED >>
+    rule [Cextcodehash.old]: Cextcodehash(SCHED) => Gbalance < SCHED > requires notBool Ghasaccesslist << SCHED >>
+
+    rule [Cbalance.new]: Cbalance(SCHED) => 0                  requires         Ghasaccesslist << SCHED >>
+    rule [Cbalance.old]: Cbalance(SCHED) => Gbalance < SCHED > requires notBool Ghasaccesslist << SCHED >>
+
+    rule [Cextcodecopy.new]: Cextcodecopy(SCHED, WIDTH) => Gcopy < SCHED > *Int (WIDTH up/Int 32)                               requires         Ghasaccesslist << SCHED >> [concrete]
+    rule [Cextcodecopy.old]: Cextcodecopy(SCHED, WIDTH) => Gextcodecopy < SCHED > +Int (Gcopy < SCHED > *Int (WIDTH up/Int 32)) requires notBool Ghasaccesslist << SCHED >> [concrete]
+
+    rule [Cmodexp.old]: Cmodexp(SCHED, DATA, BASELEN, EXPLEN, MODLEN) => #multComplexity(maxInt(BASELEN, MODLEN)) *Int maxInt(#adjustedExpLength(BASELEN, EXPLEN, DATA), 1) /Int Gquaddivisor < SCHED >
+      requires notBool Ghasaccesslist << SCHED >>
+      [concrete]
+
+    rule [Cmodexp.new]: Cmodexp(SCHED, DATA, BASELEN, EXPLEN, MODLEN) => maxInt(200, (#newMultComplexity(maxInt(BASELEN, MODLEN)) *Int maxInt(#adjustedExpLength(BASELEN, EXPLEN, DATA), 1)) /Int Gquaddivisor < SCHED > )
+      requires Ghasaccesslist << SCHED >>
+      [concrete]
+
+    syntax Bool ::= #accountEmpty ( AccountCode , Int , Int ) [function, total, klabel(accountEmpty), symbol]
+ // ---------------------------------------------------------------------------------------------------------
+    rule #accountEmpty(CODE, NONCE, BAL) => CODE ==K .Bytes andBool NONCE ==Int 0 andBool BAL ==Int 0
+
+    syntax Gas ::= #allBut64th ( Gas ) [function, total, smtlib(gas_allBut64th_Gas)]
+    syntax Int ::= #allBut64th ( Int ) [function, total, smtlib(gas_allBut64th_Int)]
+ // --------------------------------------------------------------------------------
+    rule [allBut64th.pos]: #allBut64th(N) => N -Int (N /Int 64) requires 0 <=Int N
+    rule [allBut64th.neg]: #allBut64th(N) => 0                  requires N  <Int 0
+
+    syntax Int ::= G0 ( Schedule , Bytes , Bool )           [function]
+                 | G0 ( Schedule , Bytes , Int , Int, Int ) [function, klabel(G0data)]
+                 | G0 ( Schedule , Bool )                   [function, klabel(G0base)]
+ // ----------------------------------------------------------------------------------
+    rule G0(SCHED, WS, B) => G0(SCHED, WS, 0, lengthBytes(WS), 0) +Int G0(SCHED, B)
+
+    rule G0(SCHED, true)  => Gtxcreate    < SCHED >
+    rule G0(SCHED, false) => Gtransaction < SCHED >
+
+    rule G0(    _,  _, I, I, R) => R
+    rule G0(SCHED, WS, I, J, R) => G0(SCHED, WS, I +Int 1, J, R +Int #if WS[I] ==Int 0 #then Gtxdatazero < SCHED > #else Gtxdatanonzero < SCHED > #fi) [owise]
+
+    syntax Gas ::= "G*" "(" Gas "," Int "," Int "," Schedule ")" [function]
+ // -----------------------------------------------------------------------
+    rule G*(GAVAIL, GLIMIT, REFUND, SCHED) => GAVAIL +Gas minGas((GLIMIT -Gas GAVAIL) /Gas Rmaxquotient < SCHED >, REFUND)
+
+    syntax Int ::= #multComplexity(Int)    [function]
+                 | #newMultComplexity(Int) [function]
+ // -------------------------------------------------
+    rule #multComplexity(X) => X *Int X                                     requires X <=Int 64
+    rule #multComplexity(X) => X *Int X /Int 4 +Int 96 *Int X -Int 3072     requires X >Int 64 andBool X <=Int 1024
+    rule #multComplexity(X) => X *Int X /Int 16 +Int 480 *Int X -Int 199680 requires X >Int 1024
+
+    rule #newMultComplexity(X) => (X up/Int 8) ^Int 2
+
+    syntax Int ::= #adjustedExpLength(Int, Int, Bytes) [function]
+                 | #adjustedExpLength(Int)             [function, klabel(#adjustedExpLengthAux)]
+ // --------------------------------------------------------------------------------------------
+    rule #adjustedExpLength(BASELEN, EXPLEN, DATA) => #if EXPLEN <=Int 32 #then 0 #else 8 *Int (EXPLEN -Int 32) #fi +Int #adjustedExpLength(#asInteger(#range(DATA, 96 +Int BASELEN, minInt(EXPLEN, 32))))
+
+    rule #adjustedExpLength(0) => 0
+    rule #adjustedExpLength(1) => 0
+    rule #adjustedExpLength(N) => 1 +Int #adjustedExpLength(N /Int 2) requires N >Int 1
+endmodule
+
+

KEVM Gas Simplifications

+

Here are simplification rules related to gas that the haskell backend uses.

+
module GAS-SIMPLIFICATION [symbolic]
+    imports GAS-SYNTAX
+    imports INT
+    imports BOOL
+
+    rule A <Gas B => false requires B <=Gas A [simplification]
+endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/hashed-locations.md b/include/kframework/hashed-locations.md deleted file mode 100644 index 73570c0640..0000000000 --- a/include/kframework/hashed-locations.md +++ /dev/null @@ -1,95 +0,0 @@ -Hashed Storage Locations -======================== - -```k -requires "evm.md" -requires "buf.md" - -module HASHED-LOCATIONS - imports EVM - imports BUF -``` - -### Hashed Location for Storage - -The storage accommodates permanent data such as the `balances` map. -A map is laid out in the storage where the map entries are scattered over the entire storage space using the (256-bit) hash of each key to determine the location. -The detailed mechanism of calculating the location varies by compilers. -In Vyper, for example, `map[key1][key2]` is stored at the location: - -``` - hash(hash(key1 +Bytes slot(map)) +Bytes key2) -``` - -where `slot(map)` is the position index of `map` in the program, and `+Bytes` is byte-array concatenation, while in Solidity, it is stored at: - -``` - hash(key2 +Bytes hash(key1 +Bytes slot(map))) -``` - -The eDSL provides `#hashedLocation` that allows to uniformly specify the locations in a form parameterized by the underlying compilers. -For maps, the location of `map[key1][key2]` can be specified as follows, where `{COMPILER}` is a place-holder to be replaced by the name of the compiler. -Note that the keys are separated by the white spaces instead of commas. - -``` - #hashedLocation({COMPILER}, slot(map), key1 key2) -``` - -This notation makes the specification independent of the underlying compilers, enabling it to be reused for differently compiled programs. - -For dynamically sized arrays in Solidity, and both statically and dynamically sized arrays in Vyper, the length of the array is stored at: - -``` - hash(slot(array)) -``` - -and the element at index `i` is stored at: - -``` - hash(slot(array)) + i -``` - -More information about how storage locations are defined in Solidity can be found [here](https://solidity.readthedocs.io/en/v0.5.11/miscellaneous.html#layout-of-state-variables-in-storage). - -Specifically, `#hashedLocation` is defined as follows, capturing the storage layout schemes of Solidity and Vyper. - -```k - syntax Int ::= #hashedLocation( String , Int , IntList ) [function, klabel(hashLoc), smtlib(hashLoc)] - // ----------------------------------------------------------------------------------------------------- - rule #hashedLocation(_LANG, BASE, .IntList ) => BASE - rule #hashedLocation( LANG, BASE, OFFSET OFFSETS) => #hashedLocation(LANG, #hashedLocation(LANG, BASE, OFFSET .IntList), OFFSETS) requires OFFSETS =/=K .IntList - - rule #hashedLocation("Vyper", BASE, OFFSET .IntList) => keccak(#bufStrict(32, BASE) +Bytes #bufStrict(32, OFFSET)) requires #rangeUInt(256, BASE) andBool #rangeUInt(256, OFFSET) - rule #hashedLocation("Solidity", BASE, OFFSET .IntList) => keccak(#bufStrict(32, OFFSET) +Bytes #bufStrict(32, BASE)) requires #rangeUInt(256, BASE) andBool #rangeUInt(256, OFFSET) [simplification] - rule #hashedLocation("Array", BASE, OFFSET .IntList) => keccak(#bufStrict(32, BASE)) +Word OFFSET requires #rangeUInt(256, BASE) andBool #rangeUInt(256, OFFSET) - - syntax IntList ::= List{Int, ""} [klabel(intList), smtlib(intList)] - // ------------------------------------------------------------------- -``` - -```k -endmodule -``` - -```k -module SOLIDITY-FIELDS - imports HASHED-LOCATIONS - - syntax Contract - syntax Field - syntax ContractAccess ::= Contract - | ContractAccess "." Field [klabel(contract_access_field), symbol] - | ContractAccess "[" Int "]" [klabel(contract_access_index), symbol] - // -------------------------------------------------------------------------------------------- - - syntax Int ::= #loc ( ContractAccess ) [function, klabel(contract_access_loc), symbol] - // -------------------------------------------------------------------------------------- - rule #loc(_:Contract) => 0 - rule #loc(C [ I ]) => #hash(#loc(C), I) - - syntax Int ::= #hash ( Int , Int ) [function, klabel(contract_access_hash), symbol] - // ----------------------------------------------------------------------------------- - rule #hash(I1, I2) => keccak(#bufStrict(32, I2) +Bytes #bufStrict(32, I1)) - -endmodule -``` diff --git a/include/kframework/hashed-locations/index.html b/include/kframework/hashed-locations/index.html new file mode 100644 index 0000000000..6b2e1e4005 --- /dev/null +++ b/include/kframework/hashed-locations/index.html @@ -0,0 +1,257 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Hashed Storage Locations

+
requires "evm.md"
+requires "buf.md"
+
+module HASHED-LOCATIONS
+    imports EVM
+    imports BUF
+
+

Hashed Location for Storage

+

The storage accommodates permanent data such as the balances map. +A map is laid out in the storage where the map entries are scattered over the entire storage space using the (256-bit) hash of each key to determine the location. +The detailed mechanism of calculating the location varies by compilers. +In Vyper, for example, map[key1][key2] is stored at the location:

+
  hash(hash(key1 +Bytes slot(map)) +Bytes key2)
+
+

where slot(map) is the position index of map in the program, and +Bytes is byte-array concatenation, while in Solidity, it is stored at:

+
  hash(key2 +Bytes hash(key1 +Bytes slot(map)))
+
+

The eDSL provides #hashedLocation that allows to uniformly specify the locations in a form parameterized by the underlying compilers. +For maps, the location of map[key1][key2] can be specified as follows, where {COMPILER} is a place-holder to be replaced by the name of the compiler. +Note that the keys are separated by the white spaces instead of commas.

+
  #hashedLocation({COMPILER}, slot(map), key1 key2)
+
+

This notation makes the specification independent of the underlying compilers, enabling it to be reused for differently compiled programs.

+

For dynamically sized arrays in Solidity, and both statically and dynamically sized arrays in Vyper, the length of the array is stored at:

+
  hash(slot(array))
+
+

and the element at index i is stored at:

+
  hash(slot(array)) + i
+
+

More information about how storage locations are defined in Solidity can be found here.

+

Specifically, #hashedLocation is defined as follows, capturing the storage layout schemes of Solidity and Vyper.

+
    syntax Int ::= #hashedLocation( String , Int , IntList ) [function, klabel(hashLoc), smtlib(hashLoc)]
+ // -----------------------------------------------------------------------------------------------------
+    rule #hashedLocation(_LANG, BASE, .IntList      ) => BASE
+    rule #hashedLocation( LANG, BASE, OFFSET OFFSETS) => #hashedLocation(LANG, #hashedLocation(LANG, BASE, OFFSET .IntList), OFFSETS) requires OFFSETS =/=K .IntList
+
+    rule #hashedLocation("Vyper",    BASE, OFFSET .IntList) => keccak(#bufStrict(32, BASE)   +Bytes #bufStrict(32, OFFSET)) requires #rangeUInt(256, BASE) andBool #rangeUInt(256, OFFSET)
+    rule #hashedLocation("Solidity", BASE, OFFSET .IntList) => keccak(#bufStrict(32, OFFSET) +Bytes #bufStrict(32, BASE))   requires #rangeUInt(256, BASE) andBool #rangeUInt(256, OFFSET) [simplification]
+    rule #hashedLocation("Array",    BASE, OFFSET .IntList) => keccak(#bufStrict(32, BASE))  +Word OFFSET                   requires #rangeUInt(256, BASE) andBool #rangeUInt(256, OFFSET)
+
+    syntax IntList ::= List{Int, ""} [klabel(intList), smtlib(intList)]
+ // -------------------------------------------------------------------
+
+
endmodule
+
+
module SOLIDITY-FIELDS
+    imports HASHED-LOCATIONS
+
+    syntax Contract
+    syntax Field
+    syntax ContractAccess ::= Contract
+                            | ContractAccess "." Field   [klabel(contract_access_field), symbol]
+                            | ContractAccess "[" Int "]" [klabel(contract_access_index), symbol]
+ // --------------------------------------------------------------------------------------------
+
+    syntax Int ::= #loc ( ContractAccess ) [function, klabel(contract_access_loc), symbol]
+ // --------------------------------------------------------------------------------------
+    rule #loc(_:Contract) => 0
+    rule #loc(C [ I ])    => #hash(#loc(C), I)
+
+    syntax Int ::= #hash ( Int , Int ) [function, klabel(contract_access_hash), symbol]
+ // -----------------------------------------------------------------------------------
+    rule #hash(I1, I2) => keccak(#bufStrict(32, I2) +Bytes #bufStrict(32, I1))
+
+endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/issues.md b/include/kframework/issues.md deleted file mode 100644 index e057d9d840..0000000000 --- a/include/kframework/issues.md +++ /dev/null @@ -1,131 +0,0 @@ -EVM Design Issues -================= - -The EVM was the first successful general-purpose distributed programmable blockchain platform, but that doesn't make it without fault. -There are several issues with both the specification of the EVM (in the Yellow Paper), and with the general design of the EVM. -Most of these issues are written from the perspective of someone trying to do formal verification of the EVM. - -Issues with description of EVM ------------------------------- - -These can be ambiguities/confusing wording in the [Yellow Paper](https://github.com/ethereum/yellowpaper). - -- In section 9.4.2, exceptions are described as if they are all catchable before an opcode is executed. - While you may be able to implement EVM in this way, it's not clear that it's best (you have to duplicate computation), and we also are pretty sure no implementation even does this (including the C++ one). - Instead they throw exceptions when they happen and roll-back the state (which is what you would expect to happen). - Our original implementation tried to do it the way the Yellow Paper described, and it made everything harder/slower. - -- Again in section 9.4.2, it specifies that "these are the only ways exceptions can happen when executing". - This doesn't help with building implementations, because there is at least one other case that isn't described. - For example, if the memory is overflown, then the existing semantics doesn't do anything. - Should it throw an exception? - -- Some operators which access data of other accounts don't specify explicitly what to do if the other account doesn't exist. - `EXTCODESIZE` and `EXTCODECOPY` examples, though strangely enough `BALANCE` does specify what to do. - We think the community has reached agreement on this though, "non-existing accounts are empty accounts" or something along those lines. - -- What about contracts that have "junk bytes" in them? - We've seen a contract with "junk bytes", and use cases of contracts with junk bytes do exist. - For example, if you want to use some large chunk of data to be used in your contract but don't want to perform a sequences of `PUSH`, `CODECOPY` can be used to move the junk bytes into memory. - -- The description in Appendix H of the `CALLCODE` instruction describes it as like `CALL` except for the fourth argument to the Theta function. - However, it does not mention that this change from `Mu_s[1]` to `I_a` also applies to the specification of `C_NEW`. - -- The description in Appendix H of the `DELEGATECALL` instruction describes the gas provided to the caller as equal to `Mu_s[0]`. - However, this is clearly not the correct behavior, since `Mu_s[0]` is a user-provided value, and the user could set it equal to 2^256 - 1, leading to the user having an infinite amount of gas. - It's clear from the test suite that the intended behavior is to use `Ccallgas` but with the value for the value transfer equal to 0. - It also describes the exceptional condition of not enough balance in terms of `I_v`, but in fact no value transfer occurs so this condition should never occur. - -Issues with design of EVM -------------------------- - -More broadly, many features of the EVM seem to be poorly designed. -These can be issues from simple "why did they do it that way?" to "this makes doing formal reasoning about EVM harder". - -- Precompiled contracts: Why are there 4 precompiled contracts? - Calls into address 1 - 4 result in a "precompiled" contract being called (most of them some sort of cryptographic function). - There are plenty of opcodes free, we should just have those precompiled contracts be accessed through primitives (like how `SHA3` is done). - Another (albeit unlikely problem) is that of address-space collisions. - -- The byte-aligned local memory makes reasoning about EVM programs much more difficult. - Say, for instance, that you write two Words (256-bit) contiguously to local memory (which takes up addresses 0 - 64), then shift between them and read a word (say between addresses 16 - 48). - If one of those words was symbolic, the resulting symbolic word is a mess of an expression involving the original words. - Of course, in theory this is possible to reason about, but effectively this allows taking one symbolic value and turning it into 32 symbolic values. - This makes symbolic execution much slower/more painful. - Note also that attempting to use bit-vectors, where you have one symbolic boolean variable per bit, is currently infeasible with the existing SMT solvers like [Z3](https://github.com/Z3Prover/z3); while it works with 32-bit words in some program verifiers, it is disarmingly slow with 64-bit words and we failed to prove anything with 256-bit words. - -- Program representation is important in EVM (that is, you must be able to represent a program as a byte-array of opcodes). - When doing program analysis/abstract verification, you ideally would be allowed to make transformations on the program representation (e.g., convert it to a control-flow graph) without having to maintain a translation back. - Currently in EVM, the `*CODECOPY` opcodes allow regarding program pieces as data, meaning that a translation back must always be maintained, because using `CREATE` with `DELEGATECALL` allows executing arbitrary code. - For this reason, we had to build a parser/unparser and an assembler/dissasembler into our semantics. - Putting a symbolic value through the process of disassembling -> unparsing loses a lot of semantic information about the original value. - While self-modifying code is nice and powerful in principle, we are not aware of any programming languages for the blockchain that encourage or even allow that. - -- In section H.2, the Yellow Paper states "All arithmetic is modulo 2^256 unless otherwise noted." - Reasoning "modulo" is very complex with the current SMT provers and it was indeed a, if not the most major difficulty in our [EVM verification efforts](proofs). - Additionally, the programs (smart contracts) we verified turned out to be wrong, in the sense that they showed unintended behavior, in the presence of arithmetic overflows anyway. - That is, arithmetic overflows were not expected to happen by the developers, so adding code to deal with the "modulo 2^256" behavior in case of arithmetic overflow was not even considered. - In such situations, it would be a lot better to simply throw an exception when arithmetic overflow occurs, thus indicating that something bad happened, than to default to "modulo 2^256" and ending up with a program computing wrong values. - We conjecture that words of 256 bits should be long enough for the current smart contract needs to afford to abruptly terminate computations when the limit is reached. - -Recommendations for the Future ------------------------------- - -In addition to the above mentioned issues, there are several things that could be improved about EVM in general as a distributed computation language. -Here we mention some. - -### Deterministic vs. Nondeterministic (and Proof of Work and Scalability) - -Because EVM is deterministic, it takes as long to verify a computation as it takes to run a computation. -In both cases, the entire program must be executed; there is no choice about what the next step to take is. - -In a nondeterministic language, execution is finding one execution path among many which "solves" the program. -For example, any logical language where there are several possible next inference steps is nondeterministic (eg. Prolog, Maude, K, Coq). -However, once a solution is found, presenting it is telling which choices were made at each nondeterministic step; verifying it is following that same sequence of steps. -If at each step there are a choice from `M` inference rules, and it takes `n` steps to reach a solution, then the speedup in verifying is `M^n`. - -One of the goals in a consensus-driven distributed store is scalability, which means as more resources are added to the network the network gets stronger. -Using a deterministic language means that we lose at least one dimension of this scalability; everyone verifying the state of the world must do as much work as it took to compute the state of the world. -Even many functional languages, by having evaluation strategies settled ahead of time, are deterministic (though they may have elegant ways of encoding nondeterministic systems). - -On the other hand, what secures many of these blockchain-consensus systems is proof of work. -Proof of work is the ultimate non-deterministic programming language; the programs are the blocks (before adding the nonce), and the solutions are the nonce added to the blocks so that it hashes low enough. -When using a nonce of size `2^N`, there are exactly `M = 2^N` next "inference steps", and they all must be searched uniformly to find a solution. -If instead the underlying programming language had some nondeterminism, some of the proof of work could be done *just by executing the transactions going into the block*. -Perhaps the two can be used to augment each other, allowing for some of the proof of work to be provided via finding a solution to the program and the rest via hashing. - -If such a system were implemented, it may be important to incentivize miners to supply solutions to programs/proofs on the blockchain. -Perhaps a system where the time between when a specification/theorem is submitted to the blockchain and when it is solved determines the reward for the computation could be used. -Natural incentive to place proofs of theorems on the blockchain would be provided in the form of the reward; this means it's against the miners interests to ignore transactions. -The hard part is incentivizing placing theorems on the blockchain early (as it may be advantageous to hoard theorems so that you can submit solutions early to collect the reward). - -### Termination - -The gas mechanic in EVM is designed to ensure that every program terminates so that users can't DOS the miners by submitting infinite computations. -However, there is no such guarantee that the proof of work computation done by miners terminates; there may be no combination of ordering of transactions and a nonce that yields a solution (though this is incredibly improbable). -Instead, we can leave it up to the miner to decide if pursuing a computation is worth the time lost in the pursuit. -Indeed, this directly increases the amount of work possible behind a proof of work, as much more useless work has been added to the system (via computations that don't terminate). - -In many sufficiently powerful nondeterministic languages, there will be plenty of execution search paths which do not terminate. -However, automated provers (execution engines) for these languages don't throw up their hands, instead they design better search tactics for the language. -It's not clear that leaving the burden of which transactions to attempt to the miner is entirely bad, especially when coupled with a system which rewards more for longer-standing transactions. - -The problem with this, it turns out, is not that users may DOS miners, but that miners may DOS other miners (by presenting blocks that they purport terminate). - -### Language Independence - -Language independence is difficult to achieve in a distributed system because everyone must agree on how programs are to be executed. -Two approaches are the *language-building language* approach and the *consensus-based* approach. - -In the language-building language approach, the underlying language of the blockchain is a language-building language. -Thus, contracts are free to introduce new languages simply as specifications (programs) in the underlying language, and other contracts may use those languages by referring to the language definition contract. -As a very simple example, if the underlying language was K, then you could submit a contract that is just a K definition giving semantics to the language you want to use in the future. -Along this line, we should use a logical framework as the underlying language. -Logical frameworks exhibit both non-determinism and language independence, making two improvements to EVM at the same time. - -The consensus-based approach is more flexible in the interpretation of "correct" executions of programs. -Essentially, everyone would vote on which execution is correct by rejecting ill-formed blocks (ill-formed here includes blocks which do not report a correct execution). -This lets the definition of the underlying languages evolve out of band; major changes to the semantics would essentially require widespread network agreement or a fork. -Indeed, the only thing that should be stored on the blockchain would be a hash of the program. - -These two techniques could perhaps be combined. diff --git a/include/kframework/issues/index.html b/include/kframework/issues/index.html new file mode 100644 index 0000000000..50ae79814a --- /dev/null +++ b/include/kframework/issues/index.html @@ -0,0 +1,353 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

EVM Design Issues

+

The EVM was the first successful general-purpose distributed programmable blockchain platform, but that doesn't make it without fault. +There are several issues with both the specification of the EVM (in the Yellow Paper), and with the general design of the EVM. +Most of these issues are written from the perspective of someone trying to do formal verification of the EVM.

+

Issues with description of EVM

+

These can be ambiguities/confusing wording in the Yellow Paper.

+
    +
  • +

    In section 9.4.2, exceptions are described as if they are all catchable before an opcode is executed. +While you may be able to implement EVM in this way, it's not clear that it's best (you have to duplicate computation), and we also are pretty sure no implementation even does this (including the C++ one). +Instead they throw exceptions when they happen and roll-back the state (which is what you would expect to happen). +Our original implementation tried to do it the way the Yellow Paper described, and it made everything harder/slower.

    +
  • +
  • +

    Again in section 9.4.2, it specifies that "these are the only ways exceptions can happen when executing". +This doesn't help with building implementations, because there is at least one other case that isn't described. +For example, if the memory is overflown, then the existing semantics doesn't do anything. +Should it throw an exception?

    +
  • +
  • +

    Some operators which access data of other accounts don't specify explicitly what to do if the other account doesn't exist. +EXTCODESIZE and EXTCODECOPY examples, though strangely enough BALANCE does specify what to do. +We think the community has reached agreement on this though, "non-existing accounts are empty accounts" or something along those lines.

    +
  • +
  • +

    What about contracts that have "junk bytes" in them? +We've seen a contract with "junk bytes", and use cases of contracts with junk bytes do exist. +For example, if you want to use some large chunk of data to be used in your contract but don't want to perform a sequences of PUSH, CODECOPY can be used to move the junk bytes into memory.

    +
  • +
  • +

    The description in Appendix H of the CALLCODE instruction describes it as like CALL except for the fourth argument to the Theta function. +However, it does not mention that this change from Mu_s[1] to I_a also applies to the specification of C_NEW.

    +
  • +
  • +

    The description in Appendix H of the DELEGATECALL instruction describes the gas provided to the caller as equal to Mu_s[0]. +However, this is clearly not the correct behavior, since Mu_s[0] is a user-provided value, and the user could set it equal to 2^256 - 1, leading to the user having an infinite amount of gas. +It's clear from the test suite that the intended behavior is to use Ccallgas but with the value for the value transfer equal to 0. +It also describes the exceptional condition of not enough balance in terms of I_v, but in fact no value transfer occurs so this condition should never occur.

    +
  • +
+

Issues with design of EVM

+

More broadly, many features of the EVM seem to be poorly designed. +These can be issues from simple "why did they do it that way?" to "this makes doing formal reasoning about EVM harder".

+
    +
  • +

    Precompiled contracts: Why are there 4 precompiled contracts? +Calls into address 1 - 4 result in a "precompiled" contract being called (most of them some sort of cryptographic function). +There are plenty of opcodes free, we should just have those precompiled contracts be accessed through primitives (like how SHA3 is done). +Another (albeit unlikely problem) is that of address-space collisions.

    +
  • +
  • +

    The byte-aligned local memory makes reasoning about EVM programs much more difficult. +Say, for instance, that you write two Words (256-bit) contiguously to local memory (which takes up addresses 0 - 64), then shift between them and read a word (say between addresses 16 - 48). +If one of those words was symbolic, the resulting symbolic word is a mess of an expression involving the original words. +Of course, in theory this is possible to reason about, but effectively this allows taking one symbolic value and turning it into 32 symbolic values. +This makes symbolic execution much slower/more painful. +Note also that attempting to use bit-vectors, where you have one symbolic boolean variable per bit, is currently infeasible with the existing SMT solvers like Z3; while it works with 32-bit words in some program verifiers, it is disarmingly slow with 64-bit words and we failed to prove anything with 256-bit words.

    +
  • +
  • +

    Program representation is important in EVM (that is, you must be able to represent a program as a byte-array of opcodes). +When doing program analysis/abstract verification, you ideally would be allowed to make transformations on the program representation (e.g., convert it to a control-flow graph) without having to maintain a translation back. +Currently in EVM, the *CODECOPY opcodes allow regarding program pieces as data, meaning that a translation back must always be maintained, because using CREATE with DELEGATECALL allows executing arbitrary code. +For this reason, we had to build a parser/unparser and an assembler/dissasembler into our semantics. +Putting a symbolic value through the process of disassembling -> unparsing loses a lot of semantic information about the original value. +While self-modifying code is nice and powerful in principle, we are not aware of any programming languages for the blockchain that encourage or even allow that.

    +
  • +
  • +

    In section H.2, the Yellow Paper states "All arithmetic is modulo 2^256 unless otherwise noted." +Reasoning "modulo" is very complex with the current SMT provers and it was indeed a, if not the most major difficulty in our EVM verification efforts. +Additionally, the programs (smart contracts) we verified turned out to be wrong, in the sense that they showed unintended behavior, in the presence of arithmetic overflows anyway. +That is, arithmetic overflows were not expected to happen by the developers, so adding code to deal with the "modulo 2^256" behavior in case of arithmetic overflow was not even considered. +In such situations, it would be a lot better to simply throw an exception when arithmetic overflow occurs, thus indicating that something bad happened, than to default to "modulo 2^256" and ending up with a program computing wrong values. +We conjecture that words of 256 bits should be long enough for the current smart contract needs to afford to abruptly terminate computations when the limit is reached.

    +
  • +
+

Recommendations for the Future

+

In addition to the above mentioned issues, there are several things that could be improved about EVM in general as a distributed computation language. +Here we mention some.

+

Deterministic vs. Nondeterministic (and Proof of Work and Scalability)

+

Because EVM is deterministic, it takes as long to verify a computation as it takes to run a computation. +In both cases, the entire program must be executed; there is no choice about what the next step to take is.

+

In a nondeterministic language, execution is finding one execution path among many which "solves" the program. +For example, any logical language where there are several possible next inference steps is nondeterministic (eg. Prolog, Maude, K, Coq). +However, once a solution is found, presenting it is telling which choices were made at each nondeterministic step; verifying it is following that same sequence of steps. +If at each step there are a choice from M inference rules, and it takes n steps to reach a solution, then the speedup in verifying is M^n.

+

One of the goals in a consensus-driven distributed store is scalability, which means as more resources are added to the network the network gets stronger. +Using a deterministic language means that we lose at least one dimension of this scalability; everyone verifying the state of the world must do as much work as it took to compute the state of the world. +Even many functional languages, by having evaluation strategies settled ahead of time, are deterministic (though they may have elegant ways of encoding nondeterministic systems).

+

On the other hand, what secures many of these blockchain-consensus systems is proof of work. +Proof of work is the ultimate non-deterministic programming language; the programs are the blocks (before adding the nonce), and the solutions are the nonce added to the blocks so that it hashes low enough. +When using a nonce of size 2^N, there are exactly M = 2^N next "inference steps", and they all must be searched uniformly to find a solution. +If instead the underlying programming language had some nondeterminism, some of the proof of work could be done just by executing the transactions going into the block. +Perhaps the two can be used to augment each other, allowing for some of the proof of work to be provided via finding a solution to the program and the rest via hashing.

+

If such a system were implemented, it may be important to incentivize miners to supply solutions to programs/proofs on the blockchain. +Perhaps a system where the time between when a specification/theorem is submitted to the blockchain and when it is solved determines the reward for the computation could be used. +Natural incentive to place proofs of theorems on the blockchain would be provided in the form of the reward; this means it's against the miners interests to ignore transactions. +The hard part is incentivizing placing theorems on the blockchain early (as it may be advantageous to hoard theorems so that you can submit solutions early to collect the reward).

+

Termination

+

The gas mechanic in EVM is designed to ensure that every program terminates so that users can't DOS the miners by submitting infinite computations. +However, there is no such guarantee that the proof of work computation done by miners terminates; there may be no combination of ordering of transactions and a nonce that yields a solution (though this is incredibly improbable). +Instead, we can leave it up to the miner to decide if pursuing a computation is worth the time lost in the pursuit. +Indeed, this directly increases the amount of work possible behind a proof of work, as much more useless work has been added to the system (via computations that don't terminate).

+

In many sufficiently powerful nondeterministic languages, there will be plenty of execution search paths which do not terminate. +However, automated provers (execution engines) for these languages don't throw up their hands, instead they design better search tactics for the language. +It's not clear that leaving the burden of which transactions to attempt to the miner is entirely bad, especially when coupled with a system which rewards more for longer-standing transactions.

+

The problem with this, it turns out, is not that users may DOS miners, but that miners may DOS other miners (by presenting blocks that they purport terminate).

+

Language Independence

+

Language independence is difficult to achieve in a distributed system because everyone must agree on how programs are to be executed. +Two approaches are the language-building language approach and the consensus-based approach.

+

In the language-building language approach, the underlying language of the blockchain is a language-building language. +Thus, contracts are free to introduce new languages simply as specifications (programs) in the underlying language, and other contracts may use those languages by referring to the language definition contract. +As a very simple example, if the underlying language was K, then you could submit a contract that is just a K definition giving semantics to the language you want to use in the future. +Along this line, we should use a logical framework as the underlying language. +Logical frameworks exhibit both non-determinism and language independence, making two improvements to EVM at the same time.

+

The consensus-based approach is more flexible in the interpretation of "correct" executions of programs. +Essentially, everyone would vote on which execution is correct by rejecting ill-formed blocks (ill-formed here includes blocks which do not report a correct execution). +This lets the definition of the underlying languages evolve out of band; major changes to the semantics would essentially require widespread network agreement or a fork. +Indeed, the only thing that should be stored on the blockchain would be a hash of the program.

+

These two techniques could perhaps be combined.

+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/json-rpc.md b/include/kframework/json-rpc.md deleted file mode 100644 index 702150a860..0000000000 --- a/include/kframework/json-rpc.md +++ /dev/null @@ -1,126 +0,0 @@ -JSON RPC -======== - -```k -requires "json.md" -``` - -JSON Extensions ---------------- - -Some common functions and extensions of JSON are provided here. - -```k -module JSON-EXT - imports JSON - imports STRING - imports BOOL -``` - -- `+JSONs` appends two JSON lists. -- `reverseJSONs` reverses a JSON list. - -```k - syntax JSONs ::= JSONs "+JSONs" JSONs [function] - // ------------------------------------------------ - rule .JSONs +JSONs JS' => JS' - rule (J , JS) +JSONs JS' => J , (JS +JSONs JS') - - syntax JSONs ::= reverseJSONs ( JSONs ) [function] - | reverseJSONsAux ( JSONs , JSONs ) [function] - // ------------------------------------------------------------- - rule reverseJSONs(JS) => reverseJSONsAux(JS, .JSONs) - - rule reverseJSONsAux(.JSONs, JS') => JS' - rule reverseJSONsAux((J, JS:JSONs), JS') => reverseJSONsAux(JS, (J, JS')) -``` - -- `qsortJSONs` quick-sorts a list of key-value pairs. -- `sortedJSONs` is a predicate saying whether a given list of JSONs is sorted or not. - -```k - syntax JSONs ::= qsortJSONs ( JSONs ) [function] - | #entriesLT ( String , JSONs ) [function] - | #entriesGE ( String , JSONs ) [function] - // --------------------------------------------------------- - rule qsortJSONs(.JSONs) => .JSONs - rule qsortJSONs(KEY : VALUE, REST) => qsortJSONs(#entriesLT(KEY, REST)) +JSONs (KEY : VALUE , qsortJSONs(#entriesGE(KEY, REST))) - - rule #entriesLT(_KEY, .JSONs) => .JSONs - rule #entriesLT( KEY, (KEY': VALUE, REST)) => KEY': VALUE , #entriesLT(KEY, REST) requires KEY' #entriesLT(KEY, REST) requires notBool KEY' .JSONs - rule #entriesGE( KEY, (KEY': VALUE, REST)) => KEY': VALUE , #entriesGE(KEY, REST) requires KEY' >=String KEY - rule #entriesGE( KEY, (KEY': _, REST)) => #entriesGE(KEY, REST) requires notBool KEY' >=String KEY - - syntax Bool ::= sortedJSONs ( JSONs ) [function] - // ------------------------------------------------ - rule sortedJSONs( .JSONs ) => true - rule sortedJSONs( _KEY : _ ) => true - rule sortedJSONs( (KEY : _) , (KEY' : VAL) , REST ) => KEY <=String KEY' andThenBool sortedJSONs((KEY' : VAL) , REST) -``` - -**TODO**: Adding `Int` to `JSONKey` is a hack to make certain parts of semantics easier. - -```k - syntax JSONKey ::= Int - // ---------------------- -``` - -```k -endmodule -``` - -JSON-RPC --------- - -```k -module JSON-RPC - imports K-IO - imports LIST - imports JSON-EXT - - configuration - - $INPUT:Int - $OUTPUT:Int - - "":JSON - 0:JSON - "":JSON - [ .JSONs ] - undef - - .List - - - syntax JSON ::= "undef" [klabel(JSON-RPCundef), symbol] - // ------------------------------------------------------- - - syntax Bool ::= isProperJson ( JSON ) [function] - | isProperJsonList ( JSONs ) [function] - // ----------------------------------------------------- - rule isProperJson(_) => false [owise] - - rule isProperJson(null) => true - - rule isProperJson(_:Int) => true - rule isProperJson(_:Bool) => true - rule isProperJson(_:String) => true - - rule isProperJson(_:JSONKey : J) => isProperJson(J) - - rule isProperJson([ JS ]) => isProperJsonList(JS) - rule isProperJson({ JS }) => isProperJsonList(JS) - - rule isProperJsonList(.JSONs) => true - rule isProperJsonList(J, JS) => isProperJson(J) andBool isProperJsonList(JS) - - syntax JSONs ::= flattenJSONs ( JSONs ) [function] - // -------------------------------------------------- - rule flattenJSONs(.JSONs ) => .JSONs - rule flattenJSONs([.JSONs], JL) => flattenJSONs(JL) - rule flattenJSONs([J,JS] , JL) => J, flattenJSONs([JS], JL) -endmodule -``` diff --git a/include/kframework/json-rpc/index.html b/include/kframework/json-rpc/index.html new file mode 100644 index 0000000000..dfcf537678 --- /dev/null +++ b/include/kframework/json-rpc/index.html @@ -0,0 +1,312 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

JSON RPC

+
requires "json.md"
+
+

JSON Extensions

+

Some common functions and extensions of JSON are provided here.

+
module JSON-EXT
+    imports JSON
+    imports STRING
+    imports BOOL
+
+
    +
  • +JSONs appends two JSON lists.
  • +
  • reverseJSONs reverses a JSON list.
  • +
+
    syntax JSONs ::= JSONs "+JSONs" JSONs [function]
+ // ------------------------------------------------
+    rule .JSONs   +JSONs JS' => JS'
+    rule (J , JS) +JSONs JS' => J , (JS +JSONs JS')
+
+    syntax JSONs ::= reverseJSONs    ( JSONs         ) [function]
+                   | reverseJSONsAux ( JSONs , JSONs ) [function]
+ // -------------------------------------------------------------
+    rule reverseJSONs(JS) => reverseJSONsAux(JS, .JSONs)
+
+    rule reverseJSONsAux(.JSONs, JS') => JS'
+    rule reverseJSONsAux((J, JS:JSONs), JS') => reverseJSONsAux(JS, (J, JS'))
+
+
    +
  • qsortJSONs quick-sorts a list of key-value pairs.
  • +
  • sortedJSONs is a predicate saying whether a given list of JSONs is sorted or not.
  • +
+
    syntax JSONs ::= qsortJSONs ( JSONs )          [function]
+                   | #entriesLT ( String , JSONs ) [function]
+                   | #entriesGE ( String , JSONs ) [function]
+ // ---------------------------------------------------------
+    rule qsortJSONs(.JSONs)            => .JSONs
+    rule qsortJSONs(KEY : VALUE, REST) => qsortJSONs(#entriesLT(KEY, REST)) +JSONs (KEY : VALUE , qsortJSONs(#entriesGE(KEY, REST)))
+
+    rule #entriesLT(_KEY, .JSONs)              => .JSONs
+    rule #entriesLT( KEY, (KEY': VALUE, REST)) => KEY': VALUE , #entriesLT(KEY, REST) requires         KEY' <String KEY
+    rule #entriesLT( KEY, (KEY':     _, REST)) =>               #entriesLT(KEY, REST) requires notBool KEY' <String KEY
+
+    rule #entriesGE(_KEY, .JSONs)              => .JSONs
+    rule #entriesGE( KEY, (KEY': VALUE, REST)) => KEY': VALUE , #entriesGE(KEY, REST) requires         KEY' >=String KEY
+    rule #entriesGE( KEY, (KEY':     _, REST)) =>               #entriesGE(KEY, REST) requires notBool KEY' >=String KEY
+
+    syntax Bool ::= sortedJSONs ( JSONs ) [function]
+ // ------------------------------------------------
+    rule sortedJSONs( .JSONs   ) => true
+    rule sortedJSONs( _KEY : _ ) => true
+    rule sortedJSONs( (KEY : _) , (KEY' : VAL) , REST ) => KEY <=String KEY' andThenBool sortedJSONs((KEY' : VAL) , REST)
+
+

TODO: Adding Int to JSONKey is a hack to make certain parts of semantics easier.

+
    syntax JSONKey ::= Int
+ // ----------------------
+
+
endmodule
+
+

JSON-RPC

+
module JSON-RPC
+    imports K-IO
+    imports LIST
+    imports JSON-EXT
+
+    configuration
+      <json-rpc>
+        <web3input> $INPUT:Int </web3input>
+        <web3output> $OUTPUT:Int </web3output>
+        <web3request>
+          <jsonrpc> "":JSON </jsonrpc>
+          <callid> 0:JSON </callid>
+          <method> "":JSON </method>
+          <params> [ .JSONs ] </params>
+          <batch> undef </batch>
+        </web3request>
+        <web3response> .List </web3response>
+      </json-rpc>
+
+    syntax JSON ::= "undef" [klabel(JSON-RPCundef), symbol]
+ // -------------------------------------------------------
+
+    syntax Bool ::= isProperJson     ( JSON  ) [function]
+                  | isProperJsonList ( JSONs ) [function]
+ // -----------------------------------------------------
+    rule isProperJson(_) => false [owise]
+
+    rule isProperJson(null) => true
+
+    rule isProperJson(_:Int)    => true
+    rule isProperJson(_:Bool)   => true
+    rule isProperJson(_:String) => true
+
+    rule isProperJson(_:JSONKey : J) => isProperJson(J)
+
+    rule isProperJson([ JS ]) => isProperJsonList(JS)
+    rule isProperJson({ JS }) => isProperJsonList(JS)
+
+    rule isProperJsonList(.JSONs) => true
+    rule isProperJsonList(J, JS)  => isProperJson(J) andBool isProperJsonList(JS)
+
+    syntax JSONs ::= flattenJSONs ( JSONs ) [function]
+ // --------------------------------------------------
+    rule flattenJSONs(.JSONs      ) => .JSONs
+    rule flattenJSONs([.JSONs], JL) => flattenJSONs(JL)
+    rule flattenJSONs([J,JS]  , JL) => J, flattenJSONs([JS], JL)
+endmodule
+
+
+
+ + +
+ + + +
+
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/lemmas/bitwise-simplification.k b/include/kframework/lemmas/bitwise-simplification.k deleted file mode 100644 index 1f21f317aa..0000000000 --- a/include/kframework/lemmas/bitwise-simplification.k +++ /dev/null @@ -1,55 +0,0 @@ -requires "word.md" - -module BITWISE-SIMPLIFICATION [symbolic] - imports INT-SYMBOLIC - imports WORD - - // ########################################################################### - // inc-or - // ########################################################################### - - rule 0 |Int A => A [simplification] - rule A |Int 0 => A [simplification] - rule A |Int A => A [simplification] - - // ########################################################################### - // bit-and - // ########################################################################### - - rule 0 &Int _ => 0 [simplification] - rule _ &Int 0 => 0 [simplification] - rule A &Int A => A [simplification] - - rule chop ( ( maxUInt48 &Int X:Int ) *Int Y:Int ) => ( maxUInt48 &Int X:Int ) *Int Y - requires 0 <=Int X andBool 0 <=Int Y andBool Y <=Int pow208 [simplification] - - rule maxUInt8 &Int X true requires 0 <=Int X [simplification, smt-lemma] - rule maxUInt48 &Int X true requires 0 <=Int X [simplification, smt-lemma] - rule maxUInt160 &Int X true requires 0 <=Int X [simplification, smt-lemma] - - rule [bitwise-and-identity]: - X &Int Y => Y - requires 0 <=Int X - andBool X +Int 1 ==Int 2 ^Int log2Int(X +Int 1) - andBool 0 <=Int Y andBool Y true requires 0 <=Int X andBool 0 <=Int Y [simplification] - rule [bitwise-and-geq-zero]: 0 <=Int (X &Int Y) => true requires 0 <=Int X andBool 0 <=Int Y [simplification] - - rule [bitwise-and-lt]: (X &Int Y) true requires 0 <=Int X andBool 0 <=Int Y andBool (X true requires 0 <=Int X andBool 0 <=Int Y andBool X 0 requires #rangeUInt(160, X) [simplification] - rule maxUInt160 &Int (X |Int (notMaxUInt160 &Int Y:Int)) => X requires #rangeUInt(160, X) andBool 0 <=Int Y [simplification] - - rule [lengthBytes-upInt-32-lower-bound]: - lengthBytes(X) <=Int notMaxUInt5 &Int ( lengthBytes(X) +Int 31 ) => true - requires lengthBytes(X) +Int 31 Int notMaxUInt5 &Int ( lengthBytes(X) +Int 31 ) => true - [simplification, smt-lemma] - -endmodule diff --git a/include/kframework/lemmas/bytes-simplification.k b/include/kframework/lemmas/bytes-simplification.k deleted file mode 100644 index db96ce0a93..0000000000 --- a/include/kframework/lemmas/bytes-simplification.k +++ /dev/null @@ -1,241 +0,0 @@ -module BYTES-SIMPLIFICATION [symbolic] - imports INT-SYMBOLIC - imports EVM - imports BUF - - // ######################## - // Buffer Reasoning - // ######################## - - rule [bytes-not-equal-length]: - BA1:Bytes ==K BA2:Bytes => false - requires lengthBytes(BA1) =/=Int lengthBytes(BA2) - [simplification] - - rule [bytes-equal-concat-split-k]: - A:Bytes +Bytes B:Bytes ==K C:Bytes +Bytes D:Bytes => A ==K C andBool B ==K D - requires lengthBytes(A) ==Int lengthBytes(C) - orBool lengthBytes(B) ==Int lengthBytes(D) - [simplification] - - rule [bytes-equal-concat-split-ml]: - { A:Bytes +Bytes B:Bytes #Equals C:Bytes +Bytes D:Bytes } => { A #Equals C } #And { B #Equals D } - requires lengthBytes(A) ==Int lengthBytes(C) - orBool lengthBytes(B) ==Int lengthBytes(D) - [simplification] - - rule [signextend-min]: (signextend( _ , W:Int) s 0 requires W 0 requires W B [simplification] - rule [bytes-concat-empty-left]: .Bytes +Bytes B:Bytes => B [simplification] - - rule [bytes-concat-right-assoc-symb-l]: (B1:Bytes +Bytes B2:Bytes) +Bytes B3:Bytes => B1 +Bytes (B2 +Bytes B3) [symbolic(B1), simplification(40)] - rule [bytes-concat-right-assoc-symb-r]: (B1:Bytes +Bytes B2:Bytes) +Bytes B3:Bytes => B1 +Bytes (B2 +Bytes B3) [symbolic(B2), simplification(40)] - rule [bytes-concat-left-assoc-conc]: B1:Bytes +Bytes (B2:Bytes +Bytes B3:Bytes) => (B1 +Bytes B2) +Bytes B3 [concrete(B1, B2), symbolic(B3), simplification(40)] - - // #buf - - rule [buf-inject-k]: - #buf(W:Int, X:Int) ==K #buf(W:Int, Y:Int) => X ==Int Y - requires 0 <=Int W - andBool 0 <=Int X andBool X { X #Equals Y } - requires 0 <=Int W - andBool 0 <=Int X andBool X X ==Int #asInteger(B) - requires lengthBytes(B) <=Int 32 - andBool #rangeUInt(256, X) [simplification, concrete(B), comm] - - rule [buf-asWord-invert]: - #buf (W:Int , #asWord(B:Bytes)) => #buf(W -Int lengthBytes(B), 0) +Bytes B - requires lengthBytes(B) <=Int W andBool W <=Int 32 - [simplification] - - rule [buf-zero-concat-base]: - #buf(W1:Int, 0) +Bytes #buf(W2:Int, 0) => #buf(W1 +Int W2, 0) - requires 0 <=Int W1 andBool 0 <=Int W2 - [simplification] - - rule [buf-zero-concat-conc]: - #buf(W1:Int, 0) +Bytes #buf(W2:Int, 0) +Bytes B => #buf(W1 +Int W2, 0) +Bytes B - requires 0 <=Int W1 andBool 0 <=Int W2 - [simplification] - - // #range - - rule [range-empty]: - #range(_:Bytes, S:Int, W:Int) => .Bytes - requires S B +Bytes #buf(W -Int lengthBytes(B), 0) - requires lengthBytes(B) <=Int W - [simplification] - - rule [range-params-equal-ml]: - { #range (B1:Bytes, S1:Int, W1:Int) #Equals #range (B2:Bytes, S2:Int, W2:Int) } => #Top - requires B1 ==K B2 andBool S1 ==Int S2 andBool W1 ==Int W2 - [simplification] - - rule [range-included-in-cHead]: - #range(B1:Bytes +Bytes _:Bytes, S:Int, W:Int) => #range(B1, S, W) - requires S +Int W <=Int lengthBytes(B1) - [simplification] - - rule [range-outside-cHead]: - #range(B1:Bytes +Bytes B2:Bytes, S:Int, W:Int) => #range(B2, S -Int lengthBytes(B1), W) - requires lengthBytes(B1) <=Int S - [simplification] - - rule [range-includes-cHead]: - #range(B1:Bytes +Bytes B2:Bytes, 0, W:Int) => B1 +Bytes #range(B2, 0, W -Int lengthBytes(B1)) - requires lengthBytes(B1) <=Int W - [simplification] - - rule [range-inside-cHead-base-conc]: - #range(B:Bytes, S1:Int +Int S2:Int, W:Int) => #range(#range(B, S2, lengthBytes(B) -Int S2), S1, W) - requires 0 <=Int S1 andBool 0 <=Int S2 andBool 0 #range(#range(B1, S, lengthBytes(B1) -Int S) +Bytes B2, 0, W) - requires 0 - #range(B, S1 +Int S2, minInt(W2, W1 -Int S2)) +Bytes #buf(maxInt(0, W2 -Int (W1 -Int S2)), 0) - requires 0 <=Int S1 andBool 0 <=Int W1 andBool 0 <=Int S2 andBool 0 <=Int W2 - [simplification] - - rule [range-join-base]: - #range(B, S1, W1) +Bytes #range(B, S2, W2) => #range(B, S1, W1 +Int W2) - requires S2 ==Int S1 +Int W1 - andBool 0 <=Int S1 andBool 0 <=Int W1 andBool 0 <=Int S2 andBool 0 <=Int W2 - [simplification] - - rule [range-join-concat]: - #range(B1, S1, W1) +Bytes ( #range(B1, S2, W2) +Bytes B2 ) => #range(B1, S1, W1 +Int W2) +Bytes B2 - requires S2 ==Int S1 +Int W1 - andBool 0 <=Int S1 andBool 0 <=Int W1 andBool 0 <=Int S2 andBool 0 <=Int W2 - [simplification] - - rule [range-reform-base]: - #range(B:Bytes, S:Int, minInt(W1:Int, W2:Int)) +Bytes #buf(maxInt(0, W3:Int), 0) => #range (B, S, W1) - requires W1 ==Int W2 +Int W3 - andBool W2 ==Int lengthBytes(B) -Int S - andBool 0 <=Int S andBool 0 <=Int W1 andBool 0 <=Int W2 - [simplification] - - rule [range-reform-concat]: - #range(B1:Bytes, S:Int, minInt(W1:Int, W2:Int)) +Bytes ( #buf(maxInt(0, W3:Int), 0) +Bytes B2:Bytes ) => #range (B1, S, W1) +Bytes B2 - requires W1 ==Int W2 +Int W3 - andBool W2 ==Int lengthBytes(B1) -Int S - andBool 0 <=Int S andBool 0 <=Int W1 andBool 0 <=Int W2 - [simplification] - - rule [range-buf-zero-symb]: - #range(#buf(W:Int, 0), S1:Int, W1:Int) => #buf(W1, 0) - requires 0 <=Int W andBool 0 <=Int S1 andBool 0 <=Int W1 - [simplification] - - rule [range-buf-zero-conc]: - #range(B, S1:Int, W1:Int) => #buf(W1, 0) - requires 0 <=Int S1 andBool 0 <=Int W1 - andBool #asInteger(B) ==Int 0 - [concrete(B), simplification] - - rule [range-memUpdate-before]: - #range(B1:Bytes [ S1:Int := B2:Bytes ], S2:Int, W2:Int) => - #let W = minInt(W2, S1 -Int S2) #in - #range(B1, S2, W) +Bytes #range(B1 [ S1 := B2 ], S1, W2 -Int W) - requires 0 <=Int S2 andBool S2 - #let S = S2 -Int S1 #in - #let W = minInt(W2, lengthBytes(B2) -Int S) #in - #range(B2, S, W) +Bytes #range(B1, S1 +Int lengthBytes(B2), W2 -Int W) - requires 0 <=Int S1 andBool S1 <=Int S2 andBool S2 <=Int S1 +Int lengthBytes(B2) - [simplification] - - rule [range-memUpdate-outside]: - #range(B1:Bytes [ S1:Int := B2:Bytes ], S2:Int, W2:Int) => #range(B1, S2, W2) - requires 0 <=Int S1 andBool 0 <=Int W2 andBool S1 +Int lengthBytes(B2) <=Int S2 [simplification] - - rule [range-buf-zero]: - #range (#buf(W1:Int, X:Int), S2:Int, W2:Int) => #buf(W2, 0) - requires 0 <=Int X andBool X BUF - requires lengthBytes(BUF) ==Int WIDTH [simplification] - - // Memory update - - rule [memUpdate-is-empty]: - _:Bytes [ S:Int := _:Bytes ] => .Bytes - requires S - #range(B1, 0, S) +Bytes B2 +Bytes #range (B1 , S +Int lengthBytes(B2), lengthBytes(B1) -Int (S +Int lengthBytes(B2))) - requires 0 <=Int S andBool S +Int lengthBytes(B2) #range(B1, 0, S) +Bytes B2 - requires 0 <=Int S andBool lengthBytes(B1) <=Int S +Int lengthBytes(B2) - [simplification(60)] - - rule [memUpdate-reorder]: - B:Bytes [ S1:Int := B1:Bytes] [ S2:Int := B2:Bytes ] => B [ S2 := B2 ] [ S1 := B1 ] - requires 0 <=Int S2 andBool S2 B [ S2 := B2 ] - requires 0 <=Int S2 andBool S2 <=Int S1 andBool S1 +Int lengthBytes(B1) <=Int S2 +Int lengthBytes(B2) - [simplification] - - // lengthBytes - - rule [lengthBytes-geq-zero]: 0 <=Int lengthBytes ( _ ) => true [simplification, smt-lemma] - rule [lengthBytes-concat]: lengthBytes(BUF1 +Bytes BUF2) => lengthBytes(BUF1) +Int lengthBytes(BUF2) [simplification] - rule [lengthBytes-buf]: lengthBytes(#buf(S, _)) => S requires 0 <=Int S [simplification] - rule [lengthBytes-range]: lengthBytes(#range(_, S:Int, W:Int)) => maxInt(0, W) requires 0 <=Int S [simplification] - rule [lengthBytes-prtw]: lengthBytes(#padRightToWidth(W:Int, B:Bytes)) => maxInt(lengthBytes(B), W) [simplification] - - rule [lengthBytes-leq-zero]: lengthBytes(B:Bytes) <=Int 0 => B ==K .Bytes [simplification] - - // #asWord - - rule #asWord(WS) >>Int M => #asWord(#range(WS, 0, lengthBytes(WS) -Int (M /Int 8) )) requires 0 <=Int M andBool M modInt 8 ==Int 0 [simplification] - - rule #asWord(#padRightToWidth(32, BUF)) &Int notMaxUInt224 => #asWord(#padRightToWidth(32, BUF)) - requires lengthBytes(BUF) <=Int 4 [simplification] - - rule #padToWidth(32, #asByteStack(V)) => #buf(32, V) requires #rangeUInt(256, V) [simplification] - - // #ecrec - - rule lengthBytes ( #ecrec ( _ , _ , _ , _ ) ) <=Int 32 => true - [simplification, smt-lemma] - - rule #asWord ( #ecrec ( _ , _ , _ , _ ) ) true - [simplification, smt-lemma] - -endmodule diff --git a/include/kframework/lemmas/evm-int-simplification.k b/include/kframework/lemmas/evm-int-simplification.k deleted file mode 100644 index 76b1f9c182..0000000000 --- a/include/kframework/lemmas/evm-int-simplification.k +++ /dev/null @@ -1,55 +0,0 @@ -requires "evm-types.md" - -module EVM-INT-SIMPLIFICATION - imports EVM-INT-SIMPLIFICATION-HASKELL -endmodule - -module EVM-INT-SIMPLIFICATION-HASKELL [symbolic, kore] - imports EVM-INT-SIMPLIFICATION-COMMON -endmodule - -module EVM-INT-SIMPLIFICATION-COMMON - imports INT - imports BOOL - imports EVM-TYPES - - // ########################################################################### - // up/Int - // ########################################################################### - - rule [upInt-lt-true]: - ((X up/Int Y) *Int Y) true - requires X +Int Y <=Int Z andBool 0 false - requires Z <=Int X andBool 0 X modInt Y ==Int 0 - requires 0 X modInt Y =/=Int 0 - requires 0 true - requires 0 X modInt Y ==Int 0 - requires 0 X modInt Y =/=Int 0 - requires 0 B +Int A [concrete(A), symbolic(B), simplification(40)] - - rule A +Int (B +Int C) => (A +Int B) +Int C [symbolic(A, B), simplification(40)] - rule A +Int (B -Int C) => (A +Int B) -Int C [symbolic(A, B), simplification(40)] - rule A -Int (B +Int C) => (A -Int B) -Int C [symbolic(A, B), simplification(40)] - rule A -Int (B -Int C) => (A -Int B) +Int C [symbolic(A, B), simplification(40)] - - rule A +Int (B -Int C) => (A -Int C) +Int B [symbolic(A, C), concrete(B), simplification(40)] - rule A -Int (B -Int C) => (A +Int C) -Int B [symbolic(A, C), concrete(B), simplification(40)] - - rule (A +Int B) +Int C => (A +Int C) +Int B [concrete(B), symbolic(C), simplification(40)] - rule (A +Int B) -Int C => (A -Int C) +Int B [concrete(B), symbolic(C), simplification(40)] - rule (A -Int B) +Int C => (A +Int C) -Int B [concrete(B), symbolic(C), simplification(40)] - rule (A -Int B) -Int C => (A -Int C) -Int B [concrete(B), symbolic(C), simplification(40)] - - rule (A +Int B) +Int C => A +Int (B +Int C) [concrete(B, C), symbolic(A), simplification(40)] - rule (A +Int B) -Int C => A +Int (B -Int C) [concrete(B, C), symbolic(A), simplification(40)] - rule (A -Int B) +Int C => A +Int (C -Int B) [concrete(B, C), symbolic(A), simplification(40)] - rule (A -Int B) -Int C => A -Int (B +Int C) [concrete(B, C), symbolic(A), simplification(40)] - - // ########################################################################### - // inequality - // ########################################################################### - - rule A +Int B A A -Int C A -Int C <=Int B [concrete(A, C), simplification(40)] - rule A -Int B A -Int C C <=Int B -Int A [concrete(A, B), simplification(40)] - -endmodule - -module INT-SIMPLIFICATION-COMMON - imports INT - imports BOOL - imports EVM-TYPES - - // ########################################################################### - // add, sub - // ########################################################################### - - // 2 terms - rule A -Int A => 0 [simplification] - rule A -Int 0 => A [simplification] - rule 0 +Int A => A [simplification] - rule A +Int 0 => A [simplification] - - // 3 terms - rule (A -Int B) +Int B => A [simplification] - rule A -Int (A -Int B) => B [simplification] - rule A +Int (B -Int A) => B [simplification] - rule (A +Int B) -Int A => B [simplification] - - // 4 terms - // NOTE: these rules appear to be necessary for tests/specs/benchmarks/ecrecoverloop02-sig1-invalid-spec.k - rule (A +Int B) +Int (C -Int A) => B +Int C [simplification] - rule (A +Int B) -Int (A +Int C) => B -Int C [simplification] - rule (A +Int B) -Int (C +Int A) => B -Int C [simplification] - rule (A +Int B) +Int (C -Int B) => A +Int C [simplification] - rule ((A -Int B) -Int C) +Int B => A -Int C [simplification] - - // 5 terms - // NOTE: required for `tests/specs/functional/infinite-gas-spec.k.prove` (haskell) - rule (A +Int B +Int C) -Int (A +Int D) => B +Int (C -Int D) [simplification] - rule (C +Int (A -Int D)) +Int (B -Int A) => C +Int (B -Int D) [simplification] - rule (((A -Int B) -Int C) -Int D) +Int B => (A -Int C) -Int D [simplification] - - // ########################################################################### - // mul - // ########################################################################### - - rule 1 *Int A => A [simplification] - rule A *Int 1 => A [simplification] - rule 0 *Int _ => 0 [simplification] - rule _ *Int 0 => 0 [simplification] - - rule (A *Int C) +Int (B *Int C) => (A +Int B) *Int C [simplification] - rule (A *Int C) -Int (B *Int C) => (A -Int B) *Int C [simplification] - - rule (E *Int A) +Int B +Int C +Int D +Int (F *Int A) => ((E +Int F) *Int A) +Int B +Int C +Int D [simplification] - - // ########################################################################### - // div - // ########################################################################### - - rule A /Int 1 => A [simplification] - - // safeMath mul check c / a == b where c == a * b - rule (A *Int B) /Int A => B requires A =/=Int 0 [simplification] - - rule ((A *Int B) /Int C) /Int B => A /Int C requires B =/=Int 0 [simplification] - - rule (A /Int 32) *Int 32 => A requires A modInt 32 ==Int 0 [simplification] - - rule (A *Int B) /Int C <=Int D => true requires 0 <=Int A andBool 0 <=Int B andBool 0 A requires 0 <=Int A andBool A A requires A <=Int B [simplification] - rule [minint-right]: minInt(A, B) => B requires B <=Int A [simplification] - - rule [minint-lt]: minInt(A, B) A A <=Int C orBool B <=Int C [simplification] - rule [minint-gt]: A A A <=Int B andBool A <=Int C [simplification] - - rule [minInt-factor-left]: minInt ( A:Int +Int B:Int, A:Int +Int C:Int ) => A +Int minInt ( B, C ) [simplification] - rule [minInt-factor-right]: minInt ( A:Int +Int B:Int, C:Int +Int B:Int ) => minInt ( A, C ) +Int B [simplification] - - rule [maxint-left]: maxInt(A:Int, B:Int) => B requires A <=Int B [simplification] - rule [maxint-right]: maxInt(A:Int, B:Int) => A requires B <=Int A [simplification] - - rule [maxint-lt]: maxInt(A:Int, B:Int) A A <=Int C andBool B <=Int C [simplification] - rule [maxint-gt]: A:Int A A <=Int B orBool A <=Int C [simplification] - - rule [maxInt-factor-left]: maxInt ( A:Int +Int B:Int, A:Int +Int C:Int ) => A +Int maxInt ( B, C ) [simplification] - rule [maxInt-factor-right]: maxInt ( A:Int +Int B:Int, C:Int +Int B:Int ) => maxInt ( A, C ) +Int B [simplification] - - // ########################################################################### - // inequality - // ########################################################################### - - rule A +Int B false requires 0 <=Int B [simplification] - rule A +Int B false requires 0 <=Int A [simplification] - - rule A false requires 0 <=Int B [simplification] - - rule 0 true requires 0 <=Int A [simplification] - - // inequality sign normalization - rule A >Int B => B =Int B => B <=Int A [simplification] - rule notBool (A B <=Int A [simplification] - rule notBool (A <=Int B) => B true requires 0 <=Int A andBool 0 <=Int B [simplification] - - rule A -Int B +Int C <=Int D => false requires D true - requires X +Int Y <=Int Z andBool 0 false - requires Z <=Int X andBool 0 X modInt Y ==Int 0 - requires 0 X modInt Y =/=Int 0 - requires 0 true - requires 0 X modInt Y ==Int 0 - requires 0 X modInt Y =/=Int 0 - requires 0 true requires 0 <=Int I [simplification, smt-lemma] - rule 0 <=Int #ceil32(I) -Int I => true requires 0 <=Int I [simplification] - - // chop range & simplification - rule chop(I) => I requires #rangeUInt( 256 , I ) [simplification] - rule 0 <=Int chop(_V) => true [simplification, smt-lemma] - rule chop(_V) true [simplification] - - rule X *Int Y true requires Y <=Int maxUInt256 /Int X [simplification] - rule #if B #then C +Int C1 #else C +Int C2 #fi => C +Int #if B #then C1 #else C2 #fi [simplification] - - // ######################## - // Set Reasoning - // ######################## - - rule X in (SetItem(Y) _ ) => true requires X ==Int Y [simplification] - rule X in (SetItem(Y) REST) => X in REST requires X =/=Int Y [simplification] - - // ######################## - // Word Reasoning - // ######################## - - rule 0 <=Int #sizeWordStack ( _ , N ) => true requires 0 <=Int N [simplification, smt-lemma] - - // bool2Word range & simplification - rule 0 <=Int bool2Word(_B) => true [simplification] - rule bool2Word(_B) true [simplification] - - rule bool2Word(A) |Int bool2Word(B) => bool2Word(A orBool B) [simplification] - rule bool2Word(A) &Int bool2Word(B) => bool2Word(A andBool B) [simplification] - - rule 1 |Int bool2Word(_B) => 1 [simplification] - rule 1 &Int bool2Word( B) => bool2Word(B) [simplification] - - rule bool2Word(_B) |Int 1 => 1 [simplification] - rule bool2Word( B) &Int 1 => bool2Word(B) [simplification] - - rule notBool notBool B => B [simplification] - - // #newAddr range - rule 0 <=Int #newAddr(_,_) => true [simplification] - rule #newAddr(_,_) true [simplification] - rule #newAddr(_,_) true [simplification] - - rule #isPrecompiledAccount(#newAddr(_, _), _) => false [simplification] - - rule 0 <=Int #asWord(_WS) => true [simplification] - rule #asWord(_WS) true [simplification] - - // ######################## - // Keccak - // ######################## - - //Required for #Ceil(#buf) - rule 0 <=Int keccak( _ ) => true [simplification] - rule keccak( _ ) true [simplification] - - // ######################## - // Map Reasoning - // ######################## - - rule #lookup ( _M:Map [ K1 <- V1 ] , K2 ) => #lookup ( K1 |-> V1 , K1 ) requires K1 ==Int K2 [simplification] - rule #lookup ( M:Map [ K1 <- _ ] , K2 ) => #lookup ( M , K2 ) requires K1 =/=Int K2 [simplification] - - rule 0 <=Int #lookup( _M:Map , _ ) => true [simplification, smt-lemma] - rule #lookup( _M:Map , _ ) true [simplification, smt-lemma] - - rule M:Map [ I1:Int <- V1:Int ] [ I2:Int <- V2:Int ] ==K M:Map [ I2 <- V2 ] [ I1 <- V1 ] => true - requires I1 =/=Int I2 - [simplification] - - // Hardcoded #addrFromPrivateKey simplifications, see: https://github.com/runtimeverification/haskell-backend/issues/3573 - rule #addrFromPrivateKey("0x0000000000000000000000000000000000000000000000000000000000000001") => 721457446580647751014191829380889690493307935711 [priority(40), concrete] - - // ######################## - // Memory - // ######################## - - rule #memoryUsageUpdate(MU, _, WIDTH) => MU requires WIDTH <=Int 0 [simplification] - - rule 0 <=Int #memoryUsageUpdate(MU, START, WIDTH) => true requires 0 <=Int MU andBool 0 <=Int START andBool 0 <=Int WIDTH [simplification] - - rule #memoryUsageUpdate(#memoryUsageUpdate(MU, START1, WIDTH1), START2, WIDTH2) => #memoryUsageUpdate(MU, START1, WIDTH1) - requires #rangeUInt(256, MU) andBool 0 #memoryUsageUpdate(MU, START2, WIDTH2) - requires #rangeUInt(256, MU) andBool 0 true [simplification] - rule 0 <=Int Cmem(_, N) => true requires 0 <=Int N [simplification] - rule 0 <=Int Caddraccess(_, _) => true [simplification] - rule 0 <=Int Csstore(_, _, _, _) => true [simplification] - rule 0 <=Int Cgascap(_, _:Int, _:Int, _) => true [simplification] - rule 0 <=Int #allBut64th(_:Int) => true [simplification] - rule 0 <=Int Cextra(_, _, _, _) => true [simplification] - rule 0 <=Int _:ScheduleConst < _:Schedule > => true [simplification] - rule 0 <=Int G up/Int I => true requires 0 <=Int G andBool 0 true [simplification] - - rule G false - requires Gsload < SCHED > <=Int G - andBool Gsstoreset < SCHED > <=Int G - andBool Gsstorereset < SCHED > <=Int G - [simplification] - - rule Csstore(SCHED, _:Int, _:Int, _) <=Int G => true - requires Gsload < SCHED > <=Int G - andBool Gsstoreset < SCHED > <=Int G - andBool Gsstorereset < SCHED > <=Int G - [simplification] - - rule G <=Int Csstore(SCHED, _:Int, _:Int, _) => false - requires Gsload < SCHED > true - requires Gsload < SCHED > #asWord(#range(BUF, 0, lengthBytes(BUF) -Int log256Int(D))) - requires D ==Int 256 ^Int log256Int(D) andBool D >=Int 0 - andBool lengthBytes(BUF) >=Int log256Int(D) [simplification] - - rule #asWord(#buf(N, BUF)) => BUF - requires #range(0 < N <= 32) - andBool #range(0 <= BUF < 2 ^Int (N *Int 8)) [simplification] - - rule notBool (X ==Int 0) => X ==Int 1 requires #rangeBool(X) [simplification] - rule notBool (X ==Int 1) => X ==Int 0 requires #rangeBool(X) [simplification] - rule bool2Word(X ==Int 1) => X requires #rangeBool(X) [simplification] - - //Simplification of bool2Word() ==Int CONCRETE, #buf() ==K CONCRETE - rule I ==Int bool2Word( B:Bool ) => bool2Word(B) ==Int I [simplification, concrete(I)] - rule bool2Word( B:Bool ) ==Int I => B ==K word2Bool(I) [simplification, concrete(I)] - - // ######################## - // Arithmetic - // ######################## - - rule N modInt pow160 => N requires #rangeUInt(160, N) [simplification] - - // ; Z3 version 4.8.12 - // (set-option :smt.mbqi true) - // - // ; 2^256 - // (declare-const pow256 Int) - // (assert (= pow256 115792089237316195423570985008687907853269984665640564039457584007913129639936)) - // - // (define-fun chop ((x Int)) Int (mod x pow256)) - // (define-fun range256 ((x Int)) Bool (and (>= x 0) (< x pow256))) - - // (push) - // (assert (forall ((x Int) (y Int)) (=> (and (<= pow256 (+ x y)) (range256 x) (range256 y)) (= (< (chop (+ x y)) x) true)))) - // (check-sat) - // (pop) - rule chop ( X +Int Y ) true requires pow256 <=Int ( X +Int Y ) andBool #rangeUInt(256, X) andBool #rangeUInt(256, Y) [simplification] - - // (push) - // (assert (forall ((x Int) (y Int)) (=> (and (<= pow256 (+ x y)) (range256 x) (range256 y)) (= (<= x (chop (+ x y))) false)))) - // (check-sat) - // (pop) - rule X <=Int chop ( X +Int Y ) => false requires pow256 <=Int ( X +Int Y ) andBool #rangeUInt(256, X) andBool #rangeUInt(256, Y) [simplification] - - // ######################## - // Map Reasoning - // ######################## - - rule { M:Map [ I1:Int <- V1:Int ] [ I2:Int <- V2:Int ] #Equals M:Map [ I2 <- V2 ] [ I1 <- V1 ] } => #Top - requires I1 =/=Int I2 - [simplification] - - // ######################## - // Boolean Logic - // ######################## - - rule B ==Bool false => notBool B [simplification] - rule (notBool (A andBool B)) andBool A => (notBool B) andBool A [simplification] -endmodule diff --git a/include/kframework/network.md b/include/kframework/network.md deleted file mode 100644 index f14d2cfc99..0000000000 --- a/include/kframework/network.md +++ /dev/null @@ -1,123 +0,0 @@ -Network State -============= - -This file represents all the network state present in the EVM. -It will incrementally build up to supporting the entire [EVM-C API]. - -```k -module NETWORK - imports STRING-SYNTAX - - syntax String ::= StatusCode2String(StatusCode) [function] - // ---------------------------------------------------------- -``` - -EVM Status Codes ----------------- - -### Exceptional Codes - -The following codes all indicate that the VM ended execution with an exception, but give details about how. - -- `EVMC_FAILURE` is a catch-all for generic execution failure. -- `EVMC_INVALID_INSTRUCTION` indicates reaching the designated `INVALID` opcode. -- `EVMC_UNDEFINED_INSTRUCTION` indicates that an undefined opcode has been reached. -- `EVMC_OUT_OF_GAS` indicates that execution exhausted the gas supply. -- `EVMC_BAD_JUMP_DESTINATION` indicates a `JUMP*` to a non-`JUMPDEST` location. -- `EVMC_STACK_OVERFLOW` indicates pushing more than 1024 elements onto the wordstack. -- `EVMC_STACK_UNDERFLOW` indicates popping elements off an empty wordstack. -- `EVMC_CALL_DEPTH_EXCEEDED` indicates that we have executed too deeply a nested sequence of `CALL*` or `CREATE` opcodes. -- `EVMC_INVALID_MEMORY_ACCESS` indicates that a bad memory access occured. - This can happen when accessing local memory with `CODECOPY*` or `CALLDATACOPY`, or when accessing return data with `RETURNDATACOPY`. -- `EVMC_STATIC_MODE_VIOLATION` indicates that a `STATICCALL` tried to change state. - **TODO:** Avoid `_ERROR` suffix that suggests fatal error. -- `EVMC_PRECOMPILE_FAILURE` indicates an errors in the precompiled contracts (eg. invalid points handed to elliptic curve functions). - -```k - syntax ExceptionalStatusCode ::= "EVMC_FAILURE" - | "EVMC_INVALID_INSTRUCTION" - | "EVMC_UNDEFINED_INSTRUCTION" - | "EVMC_OUT_OF_GAS" - | "EVMC_BAD_JUMP_DESTINATION" - | "EVMC_STACK_OVERFLOW" - | "EVMC_STACK_UNDERFLOW" - | "EVMC_CALL_DEPTH_EXCEEDED" - | "EVMC_INVALID_MEMORY_ACCESS" - | "EVMC_STATIC_MODE_VIOLATION" - | "EVMC_PRECOMPILE_FAILURE" - | "EVMC_NONCE_EXCEEDED" - // ------------------------------------------------------------- - rule StatusCode2String(EVMC_FAILURE) => "EVMC_FAILURE" - rule StatusCode2String(EVMC_INVALID_INSTRUCTION) => "EVMC_INVALID_INSTRUCTION" - rule StatusCode2String(EVMC_UNDEFINED_INSTRUCTION) => "EVMC_UNDEFINED_INSTRUCTION" - rule StatusCode2String(EVMC_OUT_OF_GAS) => "EVMC_OUT_OF_GAS" - rule StatusCode2String(EVMC_BAD_JUMP_DESTINATION) => "EVMC_BAD_JUMP_DESTINATION" - rule StatusCode2String(EVMC_STACK_OVERFLOW) => "EVMC_STACK_OVERFLOW" - rule StatusCode2String(EVMC_STACK_UNDERFLOW) => "EVMC_STACK_UNDERFLOW" - rule StatusCode2String(EVMC_CALL_DEPTH_EXCEEDED) => "EVMC_CALL_DEPTH_EXCEEDED" - rule StatusCode2String(EVMC_INVALID_MEMORY_ACCESS) => "EVMC_INVALID_MEMORY_ACCESS" - rule StatusCode2String(EVMC_STATIC_MODE_VIOLATION) => "EVMC_STATIC_MODE_VIOLATION" - rule StatusCode2String(EVMC_PRECOMPILE_FAILURE) => "EVMC_PRECOMPILE_FAILURE" - rule StatusCode2String(EVMC_NONCE_EXCEEDED) => "EVMC_NONCE_EXCEEDED" -``` - -### Ending Codes - -These additional status codes indicate that execution has ended in some non-exceptional way. - -- `EVMC_SUCCESS` indicates successful end of execution. -- `EVMC_REVERT` indicates that the contract called `REVERT`. - -```k - syntax EndStatusCode ::= ExceptionalStatusCode - | "EVMC_SUCCESS" - | "EVMC_REVERT" - // -------------------------------------- - rule StatusCode2String(EVMC_SUCCESS) => "EVMC_SUCCESS" - rule StatusCode2String(EVMC_REVERT) => "EVMC_REVERT" -``` - -### Other Codes - -The following codes indicate other non-execution errors with the VM. - -- `EVMC_REJECTED` indicates malformed or wrong-version EVM bytecode. -- `EVMC_INTERNAL_ERROR` indicates some other error that is unrecoverable but not due to the bytecode. -- `.StatusCode` is an extra code added for "unset or unknown". - -```k - syntax StatusCode ::= EndStatusCode - | "EVMC_REJECTED" - | "EVMC_INTERNAL_ERROR" - | ".StatusCode" - // ----------------------------------- - rule StatusCode2String(EVMC_REJECTED) => "EVMC_REJECTED" - rule StatusCode2String(EVMC_INTERNAL_ERROR) => "EVMC_INTERNAL_ERROR" - rule StatusCode2String(.StatusCode) => "" -``` - -Client/Network Codes --------------------- - -The following are status codes used to report network state failures to the EVM from the client. -These are not present in the [EVM-C API]. - -- `EVMC_ACCOUNT_ALREADY_EXISTS` indicates that a newly created account already exists. -- `EVMC_BALANCE_UNDERFLOW` indicates an attempt to create an account which already exists. - -```k - syntax ExceptionalStatusCode ::= "EVMC_ACCOUNT_ALREADY_EXISTS" - | "EVMC_BALANCE_UNDERFLOW" - // --------------------------------------------------------- - rule StatusCode2String(EVMC_ACCOUNT_ALREADY_EXISTS) => "EVMC_ACCOUNT_ALREADY_EXISTS" - rule StatusCode2String(EVMC_BALANCE_UNDERFLOW) => "EVMC_BALANCE_UNDERFLOW" -``` - -```k -endmodule -``` - -Resources -========= - -[EVM-C API]: diff --git a/include/kframework/network/index.html b/include/kframework/network/index.html new file mode 100644 index 0000000000..eb15c7f6d1 --- /dev/null +++ b/include/kframework/network/index.html @@ -0,0 +1,332 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Network State

+

This file represents all the network state present in the EVM. +It will incrementally build up to supporting the entire EVM-C API.

+
module NETWORK
+    imports STRING-SYNTAX
+
+    syntax String ::= StatusCode2String(StatusCode) [function]
+ // ----------------------------------------------------------
+
+

EVM Status Codes

+

Exceptional Codes

+

The following codes all indicate that the VM ended execution with an exception, but give details about how.

+
    +
  • EVMC_FAILURE is a catch-all for generic execution failure.
  • +
  • EVMC_INVALID_INSTRUCTION indicates reaching the designated INVALID opcode.
  • +
  • EVMC_UNDEFINED_INSTRUCTION indicates that an undefined opcode has been reached.
  • +
  • EVMC_OUT_OF_GAS indicates that execution exhausted the gas supply.
  • +
  • EVMC_BAD_JUMP_DESTINATION indicates a JUMP* to a non-JUMPDEST location.
  • +
  • EVMC_STACK_OVERFLOW indicates pushing more than 1024 elements onto the wordstack.
  • +
  • EVMC_STACK_UNDERFLOW indicates popping elements off an empty wordstack.
  • +
  • EVMC_CALL_DEPTH_EXCEEDED indicates that we have executed too deeply a nested sequence of CALL* or CREATE opcodes.
  • +
  • EVMC_INVALID_MEMORY_ACCESS indicates that a bad memory access occured. +This can happen when accessing local memory with CODECOPY* or CALLDATACOPY, or when accessing return data with RETURNDATACOPY.
  • +
  • EVMC_STATIC_MODE_VIOLATION indicates that a STATICCALL tried to change state. +TODO: Avoid _ERROR suffix that suggests fatal error.
  • +
  • EVMC_PRECOMPILE_FAILURE indicates an errors in the precompiled contracts (eg. invalid points handed to elliptic curve functions).
  • +
+
    syntax ExceptionalStatusCode ::= "EVMC_FAILURE"
+                                   | "EVMC_INVALID_INSTRUCTION"
+                                   | "EVMC_UNDEFINED_INSTRUCTION"
+                                   | "EVMC_OUT_OF_GAS"
+                                   | "EVMC_BAD_JUMP_DESTINATION"
+                                   | "EVMC_STACK_OVERFLOW"
+                                   | "EVMC_STACK_UNDERFLOW"
+                                   | "EVMC_CALL_DEPTH_EXCEEDED"
+                                   | "EVMC_INVALID_MEMORY_ACCESS"
+                                   | "EVMC_STATIC_MODE_VIOLATION"
+                                   | "EVMC_PRECOMPILE_FAILURE"
+                                   | "EVMC_NONCE_EXCEEDED"
+ // -------------------------------------------------------------
+    rule StatusCode2String(EVMC_FAILURE)               => "EVMC_FAILURE"
+    rule StatusCode2String(EVMC_INVALID_INSTRUCTION)   => "EVMC_INVALID_INSTRUCTION"
+    rule StatusCode2String(EVMC_UNDEFINED_INSTRUCTION) => "EVMC_UNDEFINED_INSTRUCTION"
+    rule StatusCode2String(EVMC_OUT_OF_GAS)            => "EVMC_OUT_OF_GAS"
+    rule StatusCode2String(EVMC_BAD_JUMP_DESTINATION)  => "EVMC_BAD_JUMP_DESTINATION"
+    rule StatusCode2String(EVMC_STACK_OVERFLOW)        => "EVMC_STACK_OVERFLOW"
+    rule StatusCode2String(EVMC_STACK_UNDERFLOW)       => "EVMC_STACK_UNDERFLOW"
+    rule StatusCode2String(EVMC_CALL_DEPTH_EXCEEDED)   => "EVMC_CALL_DEPTH_EXCEEDED"
+    rule StatusCode2String(EVMC_INVALID_MEMORY_ACCESS) => "EVMC_INVALID_MEMORY_ACCESS"
+    rule StatusCode2String(EVMC_STATIC_MODE_VIOLATION) => "EVMC_STATIC_MODE_VIOLATION"
+    rule StatusCode2String(EVMC_PRECOMPILE_FAILURE)    => "EVMC_PRECOMPILE_FAILURE"
+    rule StatusCode2String(EVMC_NONCE_EXCEEDED)        => "EVMC_NONCE_EXCEEDED"
+
+

Ending Codes

+

These additional status codes indicate that execution has ended in some non-exceptional way.

+
    +
  • EVMC_SUCCESS indicates successful end of execution.
  • +
  • EVMC_REVERT indicates that the contract called REVERT.
  • +
+
    syntax EndStatusCode ::= ExceptionalStatusCode
+                           | "EVMC_SUCCESS"
+                           | "EVMC_REVERT"
+ // --------------------------------------
+    rule StatusCode2String(EVMC_SUCCESS) => "EVMC_SUCCESS"
+    rule StatusCode2String(EVMC_REVERT)  => "EVMC_REVERT"
+
+

Other Codes

+

The following codes indicate other non-execution errors with the VM.

+
    +
  • EVMC_REJECTED indicates malformed or wrong-version EVM bytecode.
  • +
  • EVMC_INTERNAL_ERROR indicates some other error that is unrecoverable but not due to the bytecode.
  • +
  • .StatusCode is an extra code added for "unset or unknown".
  • +
+
    syntax StatusCode ::= EndStatusCode
+                        | "EVMC_REJECTED"
+                        | "EVMC_INTERNAL_ERROR"
+                        | ".StatusCode"
+ // -----------------------------------
+    rule StatusCode2String(EVMC_REJECTED)       => "EVMC_REJECTED"
+    rule StatusCode2String(EVMC_INTERNAL_ERROR) => "EVMC_INTERNAL_ERROR"
+    rule StatusCode2String(.StatusCode)         => ""
+
+

Client/Network Codes

+

The following are status codes used to report network state failures to the EVM from the client. +These are not present in the EVM-C API.

+
    +
  • EVMC_ACCOUNT_ALREADY_EXISTS indicates that a newly created account already exists.
  • +
  • EVMC_BALANCE_UNDERFLOW indicates an attempt to create an account which already exists.
  • +
+
    syntax ExceptionalStatusCode ::= "EVMC_ACCOUNT_ALREADY_EXISTS"
+                                   | "EVMC_BALANCE_UNDERFLOW"
+ // ---------------------------------------------------------
+    rule StatusCode2String(EVMC_ACCOUNT_ALREADY_EXISTS) => "EVMC_ACCOUNT_ALREADY_EXISTS"
+    rule StatusCode2String(EVMC_BALANCE_UNDERFLOW)      => "EVMC_BALANCE_UNDERFLOW"
+
+
endmodule
+
+

Resources

+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/optimizations.md b/include/kframework/optimizations.md deleted file mode 100644 index 9bc95a848f..0000000000 --- a/include/kframework/optimizations.md +++ /dev/null @@ -1,290 +0,0 @@ -KEVM Optimizations -================== - -These optimizations work on the LLVM and Haskell backend and are generated by the script `./optimizer/optimizations.sh`. - -```k -requires "evm.md" -requires "lemmas/int-simplification.k" - -module EVM-OPTIMIZATIONS-LEMMAS [kore, symbolic] - imports EVM - - rule #sizeWordStack(WS , N) => #sizeWordStack(WS, 0) +Int N requires N =/=Int 0 [simplification] - rule #sizeWordStack(WS [ I := _ ], N) => #sizeWordStack(WS, N) requires I true [simplification] - rule #sizeWordStack(_ , 0) false requires N <=Int 0 [simplification] - -endmodule - -module EVM-OPTIMIZATIONS [kore] - imports EVM - imports EVM-OPTIMIZATIONS-LEMMAS - imports INT-SIMPLIFICATION - -rule - - ( #next[ PUSH(N) ] => . ) ... - - - SCHED - - - - - - PGM - - - ( WS => #asWord( #range(PGM, PCOUNT +Int 1, N) ) : WS ) - - - ( PCOUNT => ( ( PCOUNT +Int N ) +Int 1 ) ) - - - ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) ) - - ... - - ... - - ... - - ... - - requires ( Gverylow < SCHED > <=Gas GAVAIL ) - andBool ( #sizeWordStack( #asWord( #range(PGM, PCOUNT +Int 1, N) ) : WS ) <=Int 1024 ) - [priority(40)] - - -rule - - ( #next[ DUP(N) ] => . ) ... - - - SCHED - - - - - - ( WS => WS [ ( N +Int -1 ) ] : WS ) - - - ( PCOUNT => ( PCOUNT +Int 1 ) ) - - - ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) ) - - ... - - ... - - ... - - ... - - requires #stackNeeded(DUP(N)) <=Int #sizeWordStack(WS) - andBool ( Gverylow < SCHED > <=Gas GAVAIL ) - andBool ( #sizeWordStack( WS [ ( N +Int -1 ) ] : WS ) <=Int 1024 ) - [priority(40)] - - -rule - - ( #next[ SWAP(N) ] => . ) ... - - - SCHED - - - - - - ( W0 : WS => WS [ ( N +Int -1 ) ] : ( WS [ ( N +Int -1 ) := W0 ] ) ) - - - ( PCOUNT => ( PCOUNT +Int 1 ) ) - - - ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) ) - - ... - - ... - - ... - - ... - - requires #stackNeeded(SWAP(N)) <=Int #sizeWordStack(W0 : WS) - andBool ( Gverylow < SCHED > <=Gas GAVAIL ) - andBool ( #sizeWordStack( WS [ ( N +Int -1 ) ] : ( WS [ ( N +Int -1 ) := W0 ] ) ) <=Int 1024 ) - [priority(40)] - - -rule - - ( #next[ ADD ] => . ) ... - - - SCHED - - - - - - ( W0 : W1 : WS => chop( ( W0 +Int W1 ) ) : WS ) - - - ( PCOUNT => ( PCOUNT +Int 1 ) ) - - - ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) ) - - ... - - ... - - ... - - ... - - requires ( Gverylow < SCHED > <=Gas GAVAIL ) - andBool ( #sizeWordStack( chop( ( W0 +Int W1 ) ) : WS ) <=Int 1024 ) - [priority(40)] - - -rule - - ( #next[ SUB ] => . ) ... - - - SCHED - - - - - - ( W0 : W1 : WS => chop( ( W0 -Int W1 ) ) : WS ) - - - ( PCOUNT => ( PCOUNT +Int 1 ) ) - - - ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) ) - - ... - - ... - - ... - - ... - - requires ( Gverylow < SCHED > <=Gas GAVAIL ) - andBool ( #sizeWordStack( chop( ( W0 -Int W1 ) ) : WS ) <=Int 1024 ) - [priority(40)] - - -rule - - ( #next[ AND ] => . ) ... - - - SCHED - - - - - - ( W0 : W1 : WS => W0 &Int W1 : WS ) - - - ( PCOUNT => ( PCOUNT +Int 1 ) ) - - - ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) ) - - ... - - ... - - ... - - ... - - requires ( Gverylow < SCHED > <=Gas GAVAIL ) - andBool ( #sizeWordStack( W0 &Int W1 : WS ) <=Int 1024 ) - [priority(40)] - - -rule - - ( #next[ LT ] => . ) ... - - - SCHED - - - - - - ( W0 : W1 : WS => bool2Word( W0 - - ( PCOUNT => ( PCOUNT +Int 1 ) ) - - - ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) ) - - ... - - ... - - ... - - ... - - requires ( Gverylow < SCHED > <=Gas GAVAIL ) - andBool ( #sizeWordStack( bool2Word( W0 - - ( #next[ GT ] => . ) ... - - - SCHED - - - - - - ( W0 : W1 : WS => bool2Word( W1 - - ( PCOUNT => ( PCOUNT +Int 1 ) ) - - - ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) ) - - ... - - ... - - ... - - ... - - requires ( Gverylow < SCHED > <=Gas GAVAIL ) - andBool ( #sizeWordStack( bool2Word( W1 + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

KEVM Optimizations

+

These optimizations work on the LLVM and Haskell backend and are generated by the script ./optimizer/optimizations.sh.

+
requires "evm.md"
+requires "lemmas/int-simplification.k"
+
+module EVM-OPTIMIZATIONS-LEMMAS [kore, symbolic]
+    imports EVM
+
+    rule #sizeWordStack(WS           , N) => #sizeWordStack(WS, 0) +Int N requires N =/=Int 0                [simplification]
+    rule #sizeWordStack(WS [ I := _ ], N) => #sizeWordStack(WS, N)        requires I <Int #sizeWordStack(WS) [simplification]
+    rule 0 <=Int #sizeWordStack(_ , 0)    => true                                                            [simplification]
+    rule #sizeWordStack(_ , 0) <Int N     => false                        requires N <=Int 0                 [simplification]
+
+endmodule
+
+module EVM-OPTIMIZATIONS [kore]
+    imports EVM
+    imports EVM-OPTIMIZATIONS-LEMMAS
+    imports INT-SIMPLIFICATION
+
+rule <kevm>
+       <k>
+         ( #next[ PUSH(N) ] => . ) ...
+       </k>
+       <schedule>
+         SCHED
+       </schedule>
+       <ethereum>
+         <evm>
+           <callState>
+             <program>
+               PGM
+             </program>
+             <wordStack>
+               ( WS => #asWord( #range(PGM, PCOUNT +Int 1, N) ) : WS )
+             </wordStack>
+             <pc>
+               ( PCOUNT => ( ( PCOUNT +Int N ) +Int 1 ) )
+             </pc>
+             <gas>
+               ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) )
+             </gas>
+             ...
+           </callState>
+           ...
+         </evm>
+         ...
+       </ethereum>
+       ...
+     </kevm>
+  requires ( Gverylow < SCHED > <=Gas GAVAIL )
+   andBool ( #sizeWordStack( #asWord( #range(PGM, PCOUNT +Int 1, N) ) : WS ) <=Int 1024 )
+    [priority(40)]
+
+
+rule <kevm>
+       <k>
+         ( #next[ DUP(N) ] => . ) ...
+       </k>
+       <schedule>
+         SCHED
+       </schedule>
+       <ethereum>
+         <evm>
+           <callState>
+             <wordStack>
+               ( WS => WS [ ( N +Int -1 ) ] : WS )
+             </wordStack>
+             <pc>
+               ( PCOUNT => ( PCOUNT +Int 1 ) )
+             </pc>
+             <gas>
+               ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) )
+             </gas>
+             ...
+           </callState>
+           ...
+         </evm>
+         ...
+       </ethereum>
+       ...
+     </kevm>
+  requires #stackNeeded(DUP(N)) <=Int #sizeWordStack(WS)
+   andBool ( Gverylow < SCHED > <=Gas GAVAIL )
+   andBool ( #sizeWordStack( WS [ ( N +Int -1 ) ] : WS ) <=Int 1024 )
+    [priority(40)]
+
+
+rule <kevm>
+       <k>
+         ( #next[ SWAP(N) ] => . ) ...
+       </k>
+       <schedule>
+         SCHED
+       </schedule>
+       <ethereum>
+         <evm>
+           <callState>
+             <wordStack>
+               ( W0 : WS => WS [ ( N +Int -1 ) ] : ( WS [ ( N +Int -1 ) := W0 ] ) )
+             </wordStack>
+             <pc>
+               ( PCOUNT => ( PCOUNT +Int 1 ) )
+             </pc>
+             <gas>
+               ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) )
+             </gas>
+             ...
+           </callState>
+           ...
+         </evm>
+         ...
+       </ethereum>
+       ...
+     </kevm>
+  requires #stackNeeded(SWAP(N)) <=Int #sizeWordStack(W0 : WS)
+   andBool ( Gverylow < SCHED > <=Gas GAVAIL )
+   andBool ( #sizeWordStack( WS [ ( N +Int -1 ) ] : ( WS [ ( N +Int -1 ) := W0 ] ) ) <=Int 1024 )
+    [priority(40)]
+
+
+rule <kevm>
+       <k>
+         ( #next[ ADD ] => . ) ...
+       </k>
+       <schedule>
+         SCHED
+       </schedule>
+       <ethereum>
+         <evm>
+           <callState>
+             <wordStack>
+               ( W0 : W1 : WS => chop( ( W0 +Int W1 ) ) : WS )
+             </wordStack>
+             <pc>
+               ( PCOUNT => ( PCOUNT +Int 1 ) )
+             </pc>
+             <gas>
+               ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) )
+             </gas>
+             ...
+           </callState>
+           ...
+         </evm>
+         ...
+       </ethereum>
+       ...
+     </kevm>
+  requires ( Gverylow < SCHED > <=Gas GAVAIL )
+   andBool ( #sizeWordStack( chop( ( W0 +Int W1 ) ) : WS ) <=Int 1024 )
+    [priority(40)]
+
+
+rule <kevm>
+       <k>
+         ( #next[ SUB ] => . ) ...
+       </k>
+       <schedule>
+         SCHED
+       </schedule>
+       <ethereum>
+         <evm>
+           <callState>
+             <wordStack>
+               ( W0 : W1 : WS => chop( ( W0 -Int W1 ) ) : WS )
+             </wordStack>
+             <pc>
+               ( PCOUNT => ( PCOUNT +Int 1 ) )
+             </pc>
+             <gas>
+               ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) )
+             </gas>
+             ...
+           </callState>
+           ...
+         </evm>
+         ...
+       </ethereum>
+       ...
+     </kevm>
+  requires ( Gverylow < SCHED > <=Gas GAVAIL )
+   andBool ( #sizeWordStack( chop( ( W0 -Int W1 ) ) : WS ) <=Int 1024 )
+    [priority(40)]
+
+
+rule <kevm>
+       <k>
+         ( #next[ AND ] => . ) ...
+       </k>
+       <schedule>
+         SCHED
+       </schedule>
+       <ethereum>
+         <evm>
+           <callState>
+             <wordStack>
+               ( W0 : W1 : WS => W0 &Int W1 : WS )
+             </wordStack>
+             <pc>
+               ( PCOUNT => ( PCOUNT +Int 1 ) )
+             </pc>
+             <gas>
+               ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) )
+             </gas>
+             ...
+           </callState>
+           ...
+         </evm>
+         ...
+       </ethereum>
+       ...
+     </kevm>
+  requires ( Gverylow < SCHED > <=Gas GAVAIL )
+   andBool ( #sizeWordStack( W0 &Int W1 : WS ) <=Int 1024 )
+    [priority(40)]
+
+
+rule <kevm>
+       <k>
+         ( #next[ LT ] => . ) ...
+       </k>
+       <schedule>
+         SCHED
+       </schedule>
+       <ethereum>
+         <evm>
+           <callState>
+             <wordStack>
+               ( W0 : W1 : WS => bool2Word( W0 <Int W1 ) : WS )
+             </wordStack>
+             <pc>
+               ( PCOUNT => ( PCOUNT +Int 1 ) )
+             </pc>
+             <gas>
+               ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) )
+             </gas>
+             ...
+           </callState>
+           ...
+         </evm>
+         ...
+       </ethereum>
+       ...
+     </kevm>
+  requires ( Gverylow < SCHED > <=Gas GAVAIL )
+   andBool ( #sizeWordStack( bool2Word( W0 <Int W1 ) : WS ) <=Int 1024 )
+    [priority(40)]
+
+
+rule <kevm>
+       <k>
+         ( #next[ GT ] => . ) ...
+       </k>
+       <schedule>
+         SCHED
+       </schedule>
+       <ethereum>
+         <evm>
+           <callState>
+             <wordStack>
+               ( W0 : W1 : WS => bool2Word( W1 <Int W0 ) : WS )
+             </wordStack>
+             <pc>
+               ( PCOUNT => ( PCOUNT +Int 1 ) )
+             </pc>
+             <gas>
+               ( GAVAIL => ( GAVAIL -Gas Gverylow < SCHED > ) )
+             </gas>
+             ...
+           </callState>
+           ...
+         </evm>
+         ...
+       </ethereum>
+       ...
+     </kevm>
+  requires ( Gverylow < SCHED > <=Gas GAVAIL )
+   andBool ( #sizeWordStack( bool2Word( W1 <Int W0 ) : WS ) <=Int 1024 )
+    [priority(40)]
+
+
+// {OPTIMIZATIONS}
+
+
+endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/schedule.md b/include/kframework/schedule.md deleted file mode 100644 index 1b176def32..0000000000 --- a/include/kframework/schedule.md +++ /dev/null @@ -1,348 +0,0 @@ -KEVM Schedules -============== - -Fee Schedule ------------- - -The `Schedule` determines the constants/modes of operation for each hard fork. -There are `ScheduleFlag`s and `ScheduleConstant`s. - -- A `ScheduleFlag` is a boolean value determining whether a certain feature is turned on. -- A `ScheduleConst` is an `Int` parameter which is used during EVM execution. - -### Schedule Flags - -A `ScheduleFlag` is a boolean determined by the fee schedule; applying a `ScheduleFlag` to a `Schedule` yields whether the flag is set or not. - -```k -requires "data.md" - -module SCHEDULE - imports EVM-DATA - - syntax Bool ::= ScheduleFlag "<<" Schedule ">>" [function, total] - // ----------------------------------------------------------------- - - syntax ScheduleFlag ::= "Gselfdestructnewaccount" | "Gstaticcalldepth" | "Gemptyisnonexistent" | "Gzerovaluenewaccountgas" - | "Ghasrevert" | "Ghasreturndata" | "Ghasstaticcall" | "Ghasshift" - | "Ghasdirtysstore" | "Ghascreate2" | "Ghasextcodehash" | "Ghasselfbalance" - | "Ghassstorestipend" | "Ghaschainid" | "Ghasaccesslist" | "Ghasbasefee" - | "Ghasrejectedfirstbyte" | "Ghasprevrandao" - // -------------------------------------------------------------------- -``` - -### Schedule Constants - -A `ScheduleConst` is a constant determined by the fee schedule. - -```k - syntax Int ::= ScheduleConst "<" Schedule ">" [function, total] - // --------------------------------------------------------------- - - syntax ScheduleConst ::= "Gzero" | "Gbase" | "Gverylow" | "Glow" | "Gmid" | "Ghigh" - | "Gextcodesize" | "Gextcodecopy" | "Gbalance" | "Gsload" | "Gjumpdest" | "Gsstoreset" - | "Gsstorereset" | "Rsstoreclear" | "Rselfdestruct" | "Gselfdestruct" | "Gcreate" | "Gcodedeposit" | "Gcall" - | "Gcallvalue" | "Gcallstipend" | "Gnewaccount" | "Gexp" | "Gexpbyte" | "Gmemory" | "Gtxcreate" - | "Gtxdatazero" | "Gtxdatanonzero" | "Gtransaction" | "Glog" | "Glogdata" | "Glogtopic" | "Gsha3" - | "Gsha3word" | "Gcopy" | "Gblockhash" | "Gquadcoeff" | "maxCodeSize" | "Rb" | "Gquaddivisor" - | "Gecadd" | "Gecmul" | "Gecpairconst" | "Gecpaircoeff" | "Gfround" | "Gcoldsload" | "Gcoldaccountaccess" - | "Gwarmstorageread" | "Gaccesslistaddress" | "Gaccessliststoragekey" | "Rmaxquotient" - // ----------------------------------------------------------------------------------------------------------------------- -``` - -### Default Schedule - -```k - syntax Schedule ::= "DEFAULT" [klabel(DEFAULT_EVM), symbol, smtlib(schedule_DEFAULT)] - // ------------------------------------------------------------------------------------- - rule Gzero < DEFAULT > => 0 - rule Gbase < DEFAULT > => 2 - rule Gverylow < DEFAULT > => 3 - rule Glow < DEFAULT > => 5 - rule Gmid < DEFAULT > => 8 - rule Ghigh < DEFAULT > => 10 - - rule Gexp < DEFAULT > => 10 - rule Gexpbyte < DEFAULT > => 10 - rule Gsha3 < DEFAULT > => 30 - rule Gsha3word < DEFAULT > => 6 - - rule Gsload < DEFAULT > => 50 - rule Gsstoreset < DEFAULT > => 20000 - rule Gsstorereset < DEFAULT > => 5000 - rule Rsstoreclear < DEFAULT > => 15000 - - rule Glog < DEFAULT > => 375 - rule Glogdata < DEFAULT > => 8 - rule Glogtopic < DEFAULT > => 375 - - rule Gcall < DEFAULT > => 40 - rule Gcallstipend < DEFAULT > => 2300 - rule Gcallvalue < DEFAULT > => 9000 - rule Gnewaccount < DEFAULT > => 25000 - - rule Gcreate < DEFAULT > => 32000 - rule Gcodedeposit < DEFAULT > => 200 - rule Gselfdestruct < DEFAULT > => 0 - rule Rselfdestruct < DEFAULT > => 24000 - - rule Gmemory < DEFAULT > => 3 - rule Gquadcoeff < DEFAULT > => 512 - rule Gcopy < DEFAULT > => 3 - rule Gquaddivisor < DEFAULT > => 20 - - rule Gtransaction < DEFAULT > => 21000 - rule Gtxcreate < DEFAULT > => 53000 - rule Gtxdatazero < DEFAULT > => 4 - rule Gtxdatanonzero < DEFAULT > => 68 - - rule Gjumpdest < DEFAULT > => 1 - rule Gbalance < DEFAULT > => 20 - rule Gblockhash < DEFAULT > => 20 - rule Gextcodesize < DEFAULT > => 20 - rule Gextcodecopy < DEFAULT > => 20 - - rule Gecadd < DEFAULT > => 500 - rule Gecmul < DEFAULT > => 40000 - rule Gecpairconst < DEFAULT > => 100000 - rule Gecpaircoeff < DEFAULT > => 80000 - rule Gfround < DEFAULT > => 1 - - rule maxCodeSize < DEFAULT > => 2 ^Int 32 -Int 1 - rule Rb < DEFAULT > => 5 *Int (10 ^Int 18) - - rule Gcoldsload < DEFAULT > => 0 - rule Gcoldaccountaccess < DEFAULT > => 0 - rule Gwarmstorageread < DEFAULT > => 0 - - rule Gaccessliststoragekey < DEFAULT > => 0 - rule Gaccesslistaddress < DEFAULT > => 0 - - rule Rmaxquotient < DEFAULT > => 2 - - rule Gselfdestructnewaccount << DEFAULT >> => false - rule Gstaticcalldepth << DEFAULT >> => true - rule Gemptyisnonexistent << DEFAULT >> => false - rule Gzerovaluenewaccountgas << DEFAULT >> => true - rule Ghasrevert << DEFAULT >> => false - rule Ghasreturndata << DEFAULT >> => false - rule Ghasstaticcall << DEFAULT >> => false - rule Ghasshift << DEFAULT >> => false - rule Ghasdirtysstore << DEFAULT >> => false - rule Ghassstorestipend << DEFAULT >> => false - rule Ghascreate2 << DEFAULT >> => false - rule Ghasextcodehash << DEFAULT >> => false - rule Ghasselfbalance << DEFAULT >> => false - rule Ghaschainid << DEFAULT >> => false - rule Ghasaccesslist << DEFAULT >> => false - rule Ghasbasefee << DEFAULT >> => false - rule Ghasrejectedfirstbyte << DEFAULT >> => false - rule Ghasprevrandao << DEFAULT >> => false -``` - -### Frontier Schedule - -```k - syntax Schedule ::= "FRONTIER" [klabel(FRONTIER_EVM), symbol, smtlib(schedule_FRONTIER)] - // ---------------------------------------------------------------------------------------- - rule Gtxcreate < FRONTIER > => 21000 - rule SCHEDCONST < FRONTIER > => SCHEDCONST < DEFAULT > requires SCHEDCONST =/=K Gtxcreate - - rule SCHEDFLAG << FRONTIER >> => SCHEDFLAG << DEFAULT >> -``` - -### Homestead Schedule - -```k - syntax Schedule ::= "HOMESTEAD" [klabel(HOMESTEAD_EVM), symbol, smtlib(schedule_HOMESTEAD)] - // ------------------------------------------------------------------------------------------- - rule SCHEDCONST < HOMESTEAD > => SCHEDCONST < DEFAULT > - - rule SCHEDFLAG << HOMESTEAD >> => SCHEDFLAG << DEFAULT >> -``` - -### Tangerine Whistle Schedule - -```k - syntax Schedule ::= "TANGERINE_WHISTLE" [klabel(TANGERINE_WHISTLE_EVM), symbol, smtlib(schedule_TANGERINE_WHISTLE)] - // ------------------------------------------------------------------------------------------------------------------- - rule Gbalance < TANGERINE_WHISTLE > => 400 - rule Gsload < TANGERINE_WHISTLE > => 200 - rule Gcall < TANGERINE_WHISTLE > => 700 - rule Gselfdestruct < TANGERINE_WHISTLE > => 5000 - rule Gextcodesize < TANGERINE_WHISTLE > => 700 - rule Gextcodecopy < TANGERINE_WHISTLE > => 700 - - rule SCHEDCONST < TANGERINE_WHISTLE > => SCHEDCONST < HOMESTEAD > - requires notBool ( SCHEDCONST ==K Gbalance orBool SCHEDCONST ==K Gsload orBool SCHEDCONST ==K Gcall - orBool SCHEDCONST ==K Gselfdestruct orBool SCHEDCONST ==K Gextcodesize orBool SCHEDCONST ==K Gextcodecopy - ) - - rule Gselfdestructnewaccount << TANGERINE_WHISTLE >> => true - rule Gstaticcalldepth << TANGERINE_WHISTLE >> => false - rule SCHEDCONST << TANGERINE_WHISTLE >> => SCHEDCONST << HOMESTEAD >> - requires notBool ( SCHEDCONST ==K Gselfdestructnewaccount orBool SCHEDCONST ==K Gstaticcalldepth ) -``` - -### Spurious Dragon Schedule - -```k - syntax Schedule ::= "SPURIOUS_DRAGON" [klabel(SPURIOUS_DRAGON_EVM), symbol, smtlib(schedule_SPURIOUS_DRAGON)] - // ------------------------------------------------------------------------------------------------------------- - rule Gexpbyte < SPURIOUS_DRAGON > => 50 - rule maxCodeSize < SPURIOUS_DRAGON > => 24576 - - rule SCHEDCONST < SPURIOUS_DRAGON > => SCHEDCONST < TANGERINE_WHISTLE > requires SCHEDCONST =/=K Gexpbyte andBool SCHEDCONST =/=K maxCodeSize - - rule Gemptyisnonexistent << SPURIOUS_DRAGON >> => true - rule Gzerovaluenewaccountgas << SPURIOUS_DRAGON >> => false - rule SCHEDCONST << SPURIOUS_DRAGON >> => SCHEDCONST << TANGERINE_WHISTLE >> - requires notBool ( SCHEDCONST ==K Gemptyisnonexistent orBool SCHEDCONST ==K Gzerovaluenewaccountgas ) -``` - -### Byzantium Schedule - -```k - syntax Schedule ::= "BYZANTIUM" [klabel(BYZANTIUM_EVM), symbol, smtlib(schedule_BYZANTIUM)] - // ------------------------------------------------------------------------------------------- - rule Rb < BYZANTIUM > => 3 *Int eth - rule SCHEDCONST < BYZANTIUM > => SCHEDCONST < SPURIOUS_DRAGON > - requires notBool ( SCHEDCONST ==K Rb ) - - rule Ghasrevert << BYZANTIUM >> => true - rule Ghasreturndata << BYZANTIUM >> => true - rule Ghasstaticcall << BYZANTIUM >> => true - rule SCHEDFLAG << BYZANTIUM >> => SCHEDFLAG << SPURIOUS_DRAGON >> - requires notBool ( SCHEDFLAG ==K Ghasrevert orBool SCHEDFLAG ==K Ghasreturndata orBool SCHEDFLAG ==K Ghasstaticcall ) -``` - -### Constantinople Schedule - -```k - syntax Schedule ::= "CONSTANTINOPLE" [klabel(CONSTANTINOPLE_EVM), symbol, smtlib(schedule_CONSTANTINOPLE)] - // ---------------------------------------------------------------------------------------------------------- - rule Rb < CONSTANTINOPLE > => 2 *Int eth - rule SCHEDCONST < CONSTANTINOPLE > => SCHEDCONST < BYZANTIUM > - requires notBool ( SCHEDCONST ==K Rb ) - - rule Ghasshift << CONSTANTINOPLE >> => true - rule Ghasdirtysstore << CONSTANTINOPLE >> => true - rule Ghascreate2 << CONSTANTINOPLE >> => true - rule Ghasextcodehash << CONSTANTINOPLE >> => true - rule SCHEDFLAG << CONSTANTINOPLE >> => SCHEDFLAG << BYZANTIUM >> - requires notBool ( SCHEDFLAG ==K Ghasshift orBool SCHEDFLAG ==K Ghasdirtysstore orBool SCHEDFLAG ==K Ghascreate2 orBool SCHEDFLAG ==K Ghasextcodehash ) -``` - -### Petersburg Schedule - -```k - syntax Schedule ::= "PETERSBURG" [klabel(PETERSBURG_EVM), symbol, smtlib(schedule_PETERSBURG)] - // ---------------------------------------------------------------------------------------------- - rule SCHEDCONST < PETERSBURG > => SCHEDCONST < CONSTANTINOPLE > - - rule Ghasdirtysstore << PETERSBURG >> => false - rule SCHEDFLAG << PETERSBURG >> => SCHEDFLAG << CONSTANTINOPLE >> - requires notBool ( SCHEDFLAG ==K Ghasdirtysstore ) -``` - -### Istanbul Schedule - -```k - syntax Schedule ::= "ISTANBUL" [klabel(ISTANBUL_EVM), symbol, smtlib(schedule_ISTANBUL)] - // ---------------------------------------------------------------------------------------- - rule Gecadd < ISTANBUL > => 150 - rule Gecmul < ISTANBUL > => 6000 - rule Gecpairconst < ISTANBUL > => 45000 - rule Gecpaircoeff < ISTANBUL > => 34000 - rule Gtxdatanonzero < ISTANBUL > => 16 - rule Gsload < ISTANBUL > => 800 - rule Gbalance < ISTANBUL > => 700 - rule SCHEDCONST < ISTANBUL > => SCHEDCONST < PETERSBURG > - requires notBool ( SCHEDCONST ==K Gecadd - orBool SCHEDCONST ==K Gecmul - orBool SCHEDCONST ==K Gecpairconst - orBool SCHEDCONST ==K Gecpaircoeff - orBool SCHEDCONST ==K Gtxdatanonzero - orBool SCHEDCONST ==K Gsload - orBool SCHEDCONST ==K Gbalance - ) - - rule Ghasselfbalance << ISTANBUL >> => true - rule Ghasdirtysstore << ISTANBUL >> => true - rule Ghassstorestipend << ISTANBUL >> => true - rule Ghaschainid << ISTANBUL >> => true - rule SCHEDFLAG << ISTANBUL >> => SCHEDFLAG << PETERSBURG >> - requires notBool ( SCHEDFLAG ==K Ghasselfbalance - orBool SCHEDFLAG ==K Ghasdirtysstore - orBool SCHEDFLAG ==K Ghassstorestipend - orBool SCHEDFLAG ==K Ghaschainid - ) -``` - -### Berlin Schedule - -```k - syntax Schedule ::= "BERLIN" [klabel(BERLIN_EVM), symbol, smtlib(schedule_BERLIN)] - // ---------------------------------------------------------------------------------- - rule Gcoldsload < BERLIN > => 2100 - rule Gcoldaccountaccess < BERLIN > => 2600 - rule Gwarmstorageread < BERLIN > => 100 - rule Gsload < BERLIN > => Gwarmstorageread < BERLIN > - rule Gsstorereset < BERLIN > => 5000 -Int Gcoldsload < BERLIN > - rule Gquaddivisor < BERLIN > => 3 - rule Gaccessliststoragekey < BERLIN > => 1900 - rule Gaccesslistaddress < BERLIN > => 2400 - - rule SCHEDCONST < BERLIN > => SCHEDCONST < ISTANBUL > - requires notBool ( SCHEDCONST ==K Gcoldsload - orBool SCHEDCONST ==K Gcoldaccountaccess - orBool SCHEDCONST ==K Gwarmstorageread - orBool SCHEDCONST ==K Gsload - orBool SCHEDCONST ==K Gsstorereset - orBool SCHEDCONST ==K Gquaddivisor - orBool SCHEDCONST ==K Gaccessliststoragekey - orBool SCHEDCONST ==K Gaccesslistaddress - ) - - rule Ghasaccesslist << BERLIN >> => true - rule SCHEDFLAG << BERLIN >> => SCHEDFLAG << ISTANBUL >> - requires notBool ( SCHEDFLAG ==K Ghasaccesslist ) -``` - -### London Schedule - -```k - syntax Schedule ::= "LONDON" [klabel(LONDON_EVM), symbol, smtlib(schedule_LONDON)] - // ---------------------------------------------------------------------------------- - rule Rselfdestruct < LONDON > => 0 - rule Rsstoreclear < LONDON > => Gsstorereset < LONDON > +Int Gaccessliststoragekey < LONDON > - rule Rmaxquotient < LONDON > => 5 - rule SCHEDCONST < LONDON > => SCHEDCONST < BERLIN > - requires notBool ( SCHEDCONST ==K Rselfdestruct - orBool SCHEDCONST ==K Rsstoreclear - orBool SCHEDCONST ==K Rmaxquotient - ) - - rule Ghasbasefee << LONDON >> => true - rule Ghasrejectedfirstbyte << LONDON >> => true - rule SCHEDFLAG << LONDON >> => SCHEDFLAG << BERLIN >> - requires notBool ( SCHEDFLAG ==K Ghasbasefee - orBool SCHEDFLAG ==K Ghasrejectedfirstbyte - ) -``` - -### Merge Schedule - -```k - syntax Schedule ::= "MERGE" [klabel(MERGE_EVM), symbol, smtlib(schedule_MERGE)] - // ------------------------------------------------------------------------------- - rule Rb < MERGE > => 0 - rule SCHEDCONST < MERGE > => SCHEDCONST < LONDON > - requires notBool SCHEDCONST ==K Rb - - rule Ghasprevrandao << MERGE >> => true - rule SCHEDFLAG << MERGE >> => SCHEDFLAG << LONDON >> - requires notBool SCHEDFLAG ==K Ghasprevrandao - -endmodule -``` \ No newline at end of file diff --git a/include/kframework/schedule/index.html b/include/kframework/schedule/index.html new file mode 100644 index 0000000000..d601ac6744 --- /dev/null +++ b/include/kframework/schedule/index.html @@ -0,0 +1,598 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

KEVM Schedules

+

Fee Schedule

+

The Schedule determines the constants/modes of operation for each hard fork. +There are ScheduleFlags and ScheduleConstants.

+
    +
  • A ScheduleFlag is a boolean value determining whether a certain feature is turned on.
  • +
  • A ScheduleConst is an Int parameter which is used during EVM execution.
  • +
+

Schedule Flags

+

A ScheduleFlag is a boolean determined by the fee schedule; applying a ScheduleFlag to a Schedule yields whether the flag is set or not.

+
requires "data.md"
+
+module SCHEDULE
+    imports EVM-DATA
+
+    syntax Bool ::= ScheduleFlag "<<" Schedule ">>" [function, total]
+ // -----------------------------------------------------------------
+
+    syntax ScheduleFlag ::= "Gselfdestructnewaccount" | "Gstaticcalldepth" | "Gemptyisnonexistent" | "Gzerovaluenewaccountgas"
+                          | "Ghasrevert"              | "Ghasreturndata"   | "Ghasstaticcall"      | "Ghasshift"
+                          | "Ghasdirtysstore"         | "Ghascreate2"      | "Ghasextcodehash"     | "Ghasselfbalance"
+                          | "Ghassstorestipend"       | "Ghaschainid"      | "Ghasaccesslist"      | "Ghasbasefee"
+                          | "Ghasrejectedfirstbyte"   | "Ghasprevrandao"
+ // --------------------------------------------------------------------
+
+

Schedule Constants

+

A ScheduleConst is a constant determined by the fee schedule.

+
    syntax Int ::= ScheduleConst "<" Schedule ">" [function, total]
+ // ---------------------------------------------------------------
+
+    syntax ScheduleConst ::= "Gzero"            | "Gbase"              | "Gverylow"      | "Glow"          | "Gmid"        | "Ghigh"
+                           | "Gextcodesize"     | "Gextcodecopy"       | "Gbalance"      | "Gsload"        | "Gjumpdest"   | "Gsstoreset"
+                           | "Gsstorereset"     | "Rsstoreclear"       | "Rselfdestruct" | "Gselfdestruct" | "Gcreate"     | "Gcodedeposit"  | "Gcall"
+                           | "Gcallvalue"       | "Gcallstipend"       | "Gnewaccount"   | "Gexp"          | "Gexpbyte"    | "Gmemory"       | "Gtxcreate"
+                           | "Gtxdatazero"      | "Gtxdatanonzero"     | "Gtransaction"  | "Glog"          | "Glogdata"    | "Glogtopic"     | "Gsha3"
+                           | "Gsha3word"        | "Gcopy"              | "Gblockhash"    | "Gquadcoeff"    | "maxCodeSize" | "Rb"            | "Gquaddivisor"
+                           | "Gecadd"           | "Gecmul"             | "Gecpairconst"  | "Gecpaircoeff"  | "Gfround"     | "Gcoldsload"    | "Gcoldaccountaccess"
+                           | "Gwarmstorageread" | "Gaccesslistaddress" | "Gaccessliststoragekey"           | "Rmaxquotient"
+ // -----------------------------------------------------------------------------------------------------------------------
+
+

Default Schedule

+
    syntax Schedule ::= "DEFAULT" [klabel(DEFAULT_EVM), symbol, smtlib(schedule_DEFAULT)]
+ // -------------------------------------------------------------------------------------
+    rule Gzero    < DEFAULT > => 0
+    rule Gbase    < DEFAULT > => 2
+    rule Gverylow < DEFAULT > => 3
+    rule Glow     < DEFAULT > => 5
+    rule Gmid     < DEFAULT > => 8
+    rule Ghigh    < DEFAULT > => 10
+
+    rule Gexp      < DEFAULT > => 10
+    rule Gexpbyte  < DEFAULT > => 10
+    rule Gsha3     < DEFAULT > => 30
+    rule Gsha3word < DEFAULT > => 6
+
+    rule Gsload       < DEFAULT > => 50
+    rule Gsstoreset   < DEFAULT > => 20000
+    rule Gsstorereset < DEFAULT > => 5000
+    rule Rsstoreclear < DEFAULT > => 15000
+
+    rule Glog      < DEFAULT > => 375
+    rule Glogdata  < DEFAULT > => 8
+    rule Glogtopic < DEFAULT > => 375
+
+    rule Gcall        < DEFAULT > => 40
+    rule Gcallstipend < DEFAULT > => 2300
+    rule Gcallvalue   < DEFAULT > => 9000
+    rule Gnewaccount  < DEFAULT > => 25000
+
+    rule Gcreate       < DEFAULT > => 32000
+    rule Gcodedeposit  < DEFAULT > => 200
+    rule Gselfdestruct < DEFAULT > => 0
+    rule Rselfdestruct < DEFAULT > => 24000
+
+    rule Gmemory      < DEFAULT > => 3
+    rule Gquadcoeff   < DEFAULT > => 512
+    rule Gcopy        < DEFAULT > => 3
+    rule Gquaddivisor < DEFAULT > => 20
+
+    rule Gtransaction   < DEFAULT > => 21000
+    rule Gtxcreate      < DEFAULT > => 53000
+    rule Gtxdatazero    < DEFAULT > => 4
+    rule Gtxdatanonzero < DEFAULT > => 68
+
+    rule Gjumpdest    < DEFAULT > => 1
+    rule Gbalance     < DEFAULT > => 20
+    rule Gblockhash   < DEFAULT > => 20
+    rule Gextcodesize < DEFAULT > => 20
+    rule Gextcodecopy < DEFAULT > => 20
+
+    rule Gecadd       < DEFAULT > => 500
+    rule Gecmul       < DEFAULT > => 40000
+    rule Gecpairconst < DEFAULT > => 100000
+    rule Gecpaircoeff < DEFAULT > => 80000
+    rule Gfround      < DEFAULT > => 1
+
+    rule maxCodeSize < DEFAULT > => 2 ^Int 32 -Int 1
+    rule Rb          < DEFAULT > => 5 *Int (10 ^Int 18)
+
+    rule Gcoldsload         < DEFAULT > => 0
+    rule Gcoldaccountaccess < DEFAULT > => 0
+    rule Gwarmstorageread   < DEFAULT > => 0
+
+    rule Gaccessliststoragekey < DEFAULT > => 0
+    rule Gaccesslistaddress    < DEFAULT > => 0
+
+    rule Rmaxquotient < DEFAULT > => 2
+
+    rule Gselfdestructnewaccount << DEFAULT >> => false
+    rule Gstaticcalldepth        << DEFAULT >> => true
+    rule Gemptyisnonexistent     << DEFAULT >> => false
+    rule Gzerovaluenewaccountgas << DEFAULT >> => true
+    rule Ghasrevert              << DEFAULT >> => false
+    rule Ghasreturndata          << DEFAULT >> => false
+    rule Ghasstaticcall          << DEFAULT >> => false
+    rule Ghasshift               << DEFAULT >> => false
+    rule Ghasdirtysstore         << DEFAULT >> => false
+    rule Ghassstorestipend       << DEFAULT >> => false
+    rule Ghascreate2             << DEFAULT >> => false
+    rule Ghasextcodehash         << DEFAULT >> => false
+    rule Ghasselfbalance         << DEFAULT >> => false
+    rule Ghaschainid             << DEFAULT >> => false
+    rule Ghasaccesslist          << DEFAULT >> => false
+    rule Ghasbasefee             << DEFAULT >> => false
+    rule Ghasrejectedfirstbyte   << DEFAULT >> => false
+    rule Ghasprevrandao          << DEFAULT >> => false
+
+

Frontier Schedule

+
    syntax Schedule ::= "FRONTIER" [klabel(FRONTIER_EVM), symbol, smtlib(schedule_FRONTIER)]
+ // ----------------------------------------------------------------------------------------
+    rule Gtxcreate  < FRONTIER > => 21000
+    rule SCHEDCONST < FRONTIER > => SCHEDCONST < DEFAULT > requires SCHEDCONST =/=K Gtxcreate
+
+    rule SCHEDFLAG << FRONTIER >> => SCHEDFLAG << DEFAULT >>
+
+

Homestead Schedule

+
    syntax Schedule ::= "HOMESTEAD" [klabel(HOMESTEAD_EVM), symbol, smtlib(schedule_HOMESTEAD)]
+ // -------------------------------------------------------------------------------------------
+    rule SCHEDCONST < HOMESTEAD > => SCHEDCONST < DEFAULT >
+
+    rule SCHEDFLAG << HOMESTEAD >> => SCHEDFLAG << DEFAULT >>
+
+

Tangerine Whistle Schedule

+
    syntax Schedule ::= "TANGERINE_WHISTLE" [klabel(TANGERINE_WHISTLE_EVM), symbol, smtlib(schedule_TANGERINE_WHISTLE)]
+ // -------------------------------------------------------------------------------------------------------------------
+    rule Gbalance      < TANGERINE_WHISTLE > => 400
+    rule Gsload        < TANGERINE_WHISTLE > => 200
+    rule Gcall         < TANGERINE_WHISTLE > => 700
+    rule Gselfdestruct < TANGERINE_WHISTLE > => 5000
+    rule Gextcodesize  < TANGERINE_WHISTLE > => 700
+    rule Gextcodecopy  < TANGERINE_WHISTLE > => 700
+
+    rule SCHEDCONST    < TANGERINE_WHISTLE > => SCHEDCONST < HOMESTEAD >
+      requires notBool      ( SCHEDCONST ==K Gbalance      orBool SCHEDCONST ==K Gsload       orBool SCHEDCONST ==K Gcall
+                       orBool SCHEDCONST ==K Gselfdestruct orBool SCHEDCONST ==K Gextcodesize orBool SCHEDCONST ==K Gextcodecopy
+                            )
+
+    rule Gselfdestructnewaccount << TANGERINE_WHISTLE >> => true
+    rule Gstaticcalldepth        << TANGERINE_WHISTLE >> => false
+    rule SCHEDCONST              << TANGERINE_WHISTLE >> => SCHEDCONST << HOMESTEAD >>
+      requires notBool      ( SCHEDCONST ==K Gselfdestructnewaccount orBool SCHEDCONST ==K Gstaticcalldepth )
+
+

Spurious Dragon Schedule

+
    syntax Schedule ::= "SPURIOUS_DRAGON" [klabel(SPURIOUS_DRAGON_EVM), symbol, smtlib(schedule_SPURIOUS_DRAGON)]
+ // -------------------------------------------------------------------------------------------------------------
+    rule Gexpbyte    < SPURIOUS_DRAGON > => 50
+    rule maxCodeSize < SPURIOUS_DRAGON > => 24576
+
+    rule SCHEDCONST  < SPURIOUS_DRAGON > => SCHEDCONST < TANGERINE_WHISTLE > requires SCHEDCONST =/=K Gexpbyte andBool SCHEDCONST =/=K maxCodeSize
+
+    rule Gemptyisnonexistent     << SPURIOUS_DRAGON >> => true
+    rule Gzerovaluenewaccountgas << SPURIOUS_DRAGON >> => false
+    rule SCHEDCONST              << SPURIOUS_DRAGON >> => SCHEDCONST << TANGERINE_WHISTLE >>
+      requires notBool      ( SCHEDCONST ==K Gemptyisnonexistent orBool SCHEDCONST ==K Gzerovaluenewaccountgas )
+
+

Byzantium Schedule

+
    syntax Schedule ::= "BYZANTIUM" [klabel(BYZANTIUM_EVM), symbol, smtlib(schedule_BYZANTIUM)]
+ // -------------------------------------------------------------------------------------------
+    rule Rb         < BYZANTIUM > => 3 *Int eth
+    rule SCHEDCONST < BYZANTIUM > => SCHEDCONST < SPURIOUS_DRAGON >
+      requires notBool ( SCHEDCONST ==K Rb )
+
+    rule Ghasrevert     << BYZANTIUM >> => true
+    rule Ghasreturndata << BYZANTIUM >> => true
+    rule Ghasstaticcall << BYZANTIUM >> => true
+    rule SCHEDFLAG      << BYZANTIUM >> => SCHEDFLAG << SPURIOUS_DRAGON >>
+      requires notBool ( SCHEDFLAG ==K Ghasrevert orBool SCHEDFLAG ==K Ghasreturndata orBool SCHEDFLAG ==K Ghasstaticcall )
+
+

Constantinople Schedule

+
    syntax Schedule ::= "CONSTANTINOPLE" [klabel(CONSTANTINOPLE_EVM), symbol, smtlib(schedule_CONSTANTINOPLE)]
+ // ----------------------------------------------------------------------------------------------------------
+    rule Rb         < CONSTANTINOPLE > => 2 *Int eth
+    rule SCHEDCONST < CONSTANTINOPLE > => SCHEDCONST < BYZANTIUM >
+      requires notBool ( SCHEDCONST ==K Rb )
+
+    rule Ghasshift       << CONSTANTINOPLE >> => true
+    rule Ghasdirtysstore << CONSTANTINOPLE >> => true
+    rule Ghascreate2     << CONSTANTINOPLE >> => true
+    rule Ghasextcodehash << CONSTANTINOPLE >> => true
+    rule SCHEDFLAG       << CONSTANTINOPLE >> => SCHEDFLAG << BYZANTIUM >>
+      requires notBool ( SCHEDFLAG ==K Ghasshift orBool SCHEDFLAG ==K Ghasdirtysstore orBool SCHEDFLAG ==K Ghascreate2 orBool SCHEDFLAG ==K Ghasextcodehash )
+
+

Petersburg Schedule

+
    syntax Schedule ::= "PETERSBURG" [klabel(PETERSBURG_EVM), symbol, smtlib(schedule_PETERSBURG)]
+ // ----------------------------------------------------------------------------------------------
+    rule SCHEDCONST < PETERSBURG > => SCHEDCONST < CONSTANTINOPLE >
+
+    rule Ghasdirtysstore << PETERSBURG >> => false
+    rule SCHEDFLAG       << PETERSBURG >> => SCHEDFLAG << CONSTANTINOPLE >>
+      requires notBool ( SCHEDFLAG ==K Ghasdirtysstore )
+
+

Istanbul Schedule

+
    syntax Schedule ::= "ISTANBUL" [klabel(ISTANBUL_EVM), symbol, smtlib(schedule_ISTANBUL)]
+ // ----------------------------------------------------------------------------------------
+    rule Gecadd         < ISTANBUL > => 150
+    rule Gecmul         < ISTANBUL > => 6000
+    rule Gecpairconst   < ISTANBUL > => 45000
+    rule Gecpaircoeff   < ISTANBUL > => 34000
+    rule Gtxdatanonzero < ISTANBUL > => 16
+    rule Gsload         < ISTANBUL > => 800
+    rule Gbalance       < ISTANBUL > => 700
+    rule SCHEDCONST     < ISTANBUL > => SCHEDCONST < PETERSBURG >
+      requires notBool ( SCHEDCONST ==K Gecadd
+                  orBool SCHEDCONST ==K Gecmul
+                  orBool SCHEDCONST ==K Gecpairconst
+                  orBool SCHEDCONST ==K Gecpaircoeff
+                  orBool SCHEDCONST ==K Gtxdatanonzero
+                  orBool SCHEDCONST ==K Gsload
+                  orBool SCHEDCONST ==K Gbalance
+                       )
+
+    rule Ghasselfbalance   << ISTANBUL >> => true
+    rule Ghasdirtysstore   << ISTANBUL >> => true
+    rule Ghassstorestipend << ISTANBUL >> => true
+    rule Ghaschainid       << ISTANBUL >> => true
+    rule SCHEDFLAG         << ISTANBUL >> => SCHEDFLAG << PETERSBURG >>
+      requires notBool ( SCHEDFLAG ==K Ghasselfbalance
+                  orBool SCHEDFLAG ==K Ghasdirtysstore
+                  orBool SCHEDFLAG ==K Ghassstorestipend
+                  orBool SCHEDFLAG ==K Ghaschainid
+                       )
+
+

Berlin Schedule

+
    syntax Schedule ::= "BERLIN" [klabel(BERLIN_EVM), symbol, smtlib(schedule_BERLIN)]
+ // ----------------------------------------------------------------------------------
+    rule Gcoldsload            < BERLIN > => 2100
+    rule Gcoldaccountaccess    < BERLIN > => 2600
+    rule Gwarmstorageread      < BERLIN > => 100
+    rule Gsload                < BERLIN > => Gwarmstorageread < BERLIN >
+    rule Gsstorereset          < BERLIN > => 5000 -Int Gcoldsload < BERLIN >
+    rule Gquaddivisor          < BERLIN > => 3
+    rule Gaccessliststoragekey < BERLIN > => 1900
+    rule Gaccesslistaddress    < BERLIN > => 2400
+
+    rule SCHEDCONST            < BERLIN > => SCHEDCONST < ISTANBUL >
+      requires notBool ( SCHEDCONST ==K Gcoldsload
+                  orBool SCHEDCONST ==K Gcoldaccountaccess
+                  orBool SCHEDCONST ==K Gwarmstorageread
+                  orBool SCHEDCONST ==K Gsload
+                  orBool SCHEDCONST ==K Gsstorereset
+                  orBool SCHEDCONST ==K Gquaddivisor
+                  orBool SCHEDCONST ==K Gaccessliststoragekey
+                  orBool SCHEDCONST ==K Gaccesslistaddress
+                       )
+
+    rule Ghasaccesslist << BERLIN >> => true
+    rule SCHEDFLAG      << BERLIN >> => SCHEDFLAG << ISTANBUL >>
+      requires notBool ( SCHEDFLAG ==K Ghasaccesslist )
+
+

London Schedule

+
    syntax Schedule ::= "LONDON" [klabel(LONDON_EVM), symbol, smtlib(schedule_LONDON)]
+ // ----------------------------------------------------------------------------------
+    rule Rselfdestruct < LONDON > => 0
+    rule Rsstoreclear  < LONDON > => Gsstorereset < LONDON > +Int Gaccessliststoragekey < LONDON >
+    rule Rmaxquotient  < LONDON > => 5
+    rule SCHEDCONST    < LONDON > => SCHEDCONST < BERLIN >
+      requires notBool ( SCHEDCONST ==K Rselfdestruct
+                  orBool SCHEDCONST ==K Rsstoreclear
+                  orBool SCHEDCONST ==K Rmaxquotient
+                       )
+
+    rule Ghasbasefee           << LONDON >> => true
+    rule Ghasrejectedfirstbyte << LONDON >> => true
+    rule SCHEDFLAG             << LONDON >> => SCHEDFLAG << BERLIN >>
+      requires notBool ( SCHEDFLAG ==K Ghasbasefee
+                  orBool SCHEDFLAG ==K Ghasrejectedfirstbyte
+                       )
+
+

Merge Schedule

+
    syntax Schedule ::= "MERGE" [klabel(MERGE_EVM), symbol, smtlib(schedule_MERGE)]
+ // -------------------------------------------------------------------------------
+    rule Rb         < MERGE > => 0
+    rule SCHEDCONST < MERGE > => SCHEDCONST < LONDON >
+      requires notBool SCHEDCONST ==K Rb
+
+    rule Ghasprevrandao << MERGE >> => true
+    rule SCHEDFLAG      << MERGE >> => SCHEDFLAG << LONDON >>
+      requires notBool SCHEDFLAG ==K Ghasprevrandao
+
+endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/serialization.md b/include/kframework/serialization.md deleted file mode 100644 index da0a2355a9..0000000000 --- a/include/kframework/serialization.md +++ /dev/null @@ -1,696 +0,0 @@ -Parsing/Unparsing -================= - -```k -requires "plugin/krypto.md" -requires "evm-types.md" -requires "json-rpc.md" -``` - -```k -module SERIALIZATION - imports KRYPTO - imports EVM-TYPES - imports STRING-BUFFER - imports JSON-EXT -``` - -Address/Hash Helpers --------------------- - -- `keccak` serves as a wrapper around the `Keccak256` in `KRYPTO`. - -```k - syntax Int ::= keccak ( Bytes ) [function, total, smtlib(smt_keccak)] - // ------------------------------------------------------------------------- - rule [keccak]: keccak(WS) => #parseHexWord(Keccak256(#unparseByteStack(WS))) [concrete] -``` - -- `#newAddr` computes the address of a new account given the address and nonce of the creating account. -- `#sender` computes the sender of the transaction from its data and signature. -- `#addrFromPrivateKey` computes the address of an account given its private key - -```k - syntax Int ::= #newAddr ( Int , Int ) [function] - | #newAddr ( Int , Int , Bytes ) [function, klabel(#newAddrCreate2)] - // --------------------------------------------------------------------------------- - rule [#newAddr]: #newAddr(ACCT, NONCE) => #addr(#parseHexWord(Keccak256(#rlpEncode([#addrBytes(ACCT), NONCE])))) [concrete] - rule [#newAddrCreate2]: #newAddr(ACCT, SALT, INITCODE) => #addr(#parseHexWord(Keccak256("\xff" +String #unparseByteStack(#addrBytes(ACCT)) +String #unparseByteStack(#wordBytes(SALT)) +String #unparseByteStack(#parseHexBytes(Keccak256(#unparseByteStack(INITCODE))))))) [concrete] - - syntax Account ::= #sender ( TxData , Int , Bytes , Bytes ) [function, klabel(#senderTxData)] - | #sender ( String , Int , String , String ) [function, klabel(#senderAux) ] - | #sender ( String ) [function, klabel(#senderAux2) ] - // ----------------------------------------------------------------------------------------------- - rule #sender(_:TxData, TW => TW +Int 27, _, _) - requires TW ==Int 0 orBool TW ==Int 1 - - rule #sender(TXDATA, TW, TR, TS) - => #sender(Hex2Raw(#hashTxData(TXDATA)), TW, #unparseByteStack(TR), #unparseByteStack(TS)) - requires TW =/=Int 0 andBool TW =/=Int 1 - - rule #sender(HT, TW, TR, TS) => #sender(ECDSARecover(HT, TW, TR, TS)) - - rule #sender("") => .Account - rule #sender(STR) => #addr(#parseHexWord(Keccak256(STR))) requires STR =/=String "" - - syntax Int ::= #addrFromPrivateKey ( String ) [function, klabel(addrFromPrivateKey)] - // ------------------------------------------------------------------------------------ - rule [addrFromPrivateKey]: #addrFromPrivateKey ( KEY ) => #addr( #parseHexWord( Keccak256 ( Hex2Raw( ECDSAPubKey( Hex2Raw( KEY ) ) ) ) ) ) [concrete] -``` - -- `#blockHeaderHash` computes the hash of a block header given all the block data. - -```k - syntax Int ::= #blockHeaderHash( Int , Int , Int , Int , Int , Int , Bytes , Int , Int , Int , Int , Int , Bytes , Int , Int ) [function, klabel(blockHeaderHash), symbol] - | #blockHeaderHash(String, String, String, String, String, String, String, String, String, String, String, String, String, String, String) [function, klabel(#blockHashHeaderStr), symbol] - | #blockHeaderHash( Int , Int , Int , Int , Int , Int , Bytes , Int , Int , Int , Int , Int , Bytes , Int , Int , Int) [function, klabel(blockHeaderHashBaseFee), symbol] - | #blockHeaderHash(String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String) [function, klabel(#blockHashHeaderBaseFeeStr), symbol] - // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - rule #blockHeaderHash(HP:String, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN) - => #parseHexWord( Keccak256( #rlpEncode( [ HP, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN ] ) ) ) - - rule #blockHeaderHash(HP:Int, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN) - => #parseHexWord( Keccak256( #rlpEncode( [ #wordBytes(HP), #wordBytes(HO), #addrBytes(HC) - , #wordBytes(HR), #wordBytes(HT), #wordBytes(HE) - , HB, HD, HI, HL, HG, HS, HX - , #wordBytes(HM), #padToWidth(8, #asByteStack(HN)) - ] - ) - ) - ) - - rule #blockHeaderHash(HP:String, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN, HF) - => #parseHexWord( Keccak256( #rlpEncode( [ HP, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN, HF ] ) ) ) - - rule #blockHeaderHash(HP:Int, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN, HF) - => #parseHexWord( Keccak256( #rlpEncode( [ #wordBytes(HP), #wordBytes(HO), #addrBytes(HC) - , #wordBytes(HR), #wordBytes(HT), #wordBytes(HE) - , HB, HD, HI, HL, HG, HS, HX - , #wordBytes(HM), #padToWidth(8, #asByteStack(HN)) - , HF - ] - ) - ) - ) -``` - -- `#hashSignedTx` Takes transaction data. Returns the hash of the rlp-encoded transaction with R S and V. - -```k - syntax String ::= #hashSignedTx( Int , Int , Int , Account , Int , Bytes , Int , Bytes , Bytes ) [function] - | #hashTxData ( TxData ) [function] - // ----------------------------------------------------------------------------------------------------------- - rule #hashSignedTx(TN, TP, TG, TT, TV, TD, TW, TR, TS) - => Keccak256( #rlpEncode([ TN, TP, TG, #addrBytes(TT), TV, TD, TW, TR, TS ]) ) - - rule #hashTxData( TXDATA ) => Keccak256( #rlpEncodeTxData(TXDATA) ) requires isLegacyTx (TXDATA) - rule #hashTxData( TXDATA ) => Keccak256( "\x01" +String #rlpEncodeTxData(TXDATA) ) requires isAccessListTx(TXDATA) - rule #hashTxData( TXDATA ) => Keccak256( "\x02" +String #rlpEncodeTxData(TXDATA) ) requires isDynamicFeeTx(TXDATA) -``` - -The EVM test-sets are represented in JSON format with hex-encoding of the data and programs. -Here we provide some standard parser/unparser functions for that format. - -Parsing -------- - -These parsers can interperet hex-encoded strings as `Int`s, `Bytes`s, and `Map`s. - -- `#parseHexWord` interprets a string as a single hex-encoded `Word`. -- `#parseHexBytes` interprets a string as a hex-encoded stack of bytes. -- `#alignHexString` makes sure that the length of a (hex)string is even. -- `#parseByteStack` interprets a string as a hex-encoded stack of bytes, but makes sure to remove the leading "0x". -- `#parseByteStackRaw` casts a string as a stack of bytes, ignoring any encoding. -- `#parseWordStack` interprets a JSON list as a stack of `Word`. -- `#parseMap` interprets a JSON key/value object as a map from `Word` to `Word`. -- `#parseAddr` interprets a string as a 160 bit hex-endcoded address. -- `#parseAccessListStorageKeys` interprets a JSON list object as a Set, casting each string element as a `Word`. - -```k - syntax Int ::= #parseHexWord ( String ) [function] - | #parseWord ( String ) [function] - // -------------------------------------------------- - rule #parseHexWord("") => 0 - rule #parseHexWord("0x") => 0 - rule #parseHexWord(S) => String2Base(replaceAll(S, "0x", ""), 16) requires (S =/=String "") andBool (S =/=String "0x") - - rule #parseWord("") => 0 - rule #parseWord(S) => #parseHexWord(S) requires lengthString(S) >=Int 2 andBool substrString(S, 0, 2) ==String "0x" - rule #parseWord(S) => String2Int(S) [owise] - - syntax String ::= #alignHexString ( String ) [function, total] - // -------------------------------------------------------------- - rule #alignHexString(S) => S requires lengthString(S) modInt 2 ==Int 0 - rule #alignHexString(S) => "0" +String S requires notBool lengthString(S) modInt 2 ==Int 0 - - syntax Bytes ::= #parseHexBytes ( String ) [function] - | #parseHexBytesAux ( String ) [function] - | #parseByteStack ( String ) [function, memo] - | #parseByteStackRaw ( String ) [function] - // --------------------------------------------------------- - rule #parseByteStack(S) => #parseHexBytes(replaceAll(S, "0x", "")) - - rule #parseHexBytes(S) => #parseHexBytesAux(#alignHexString(S)) - rule #parseHexBytesAux("") => .Bytes - rule #parseHexBytesAux(S) => Int2Bytes(lengthString(S) /Int 2, String2Base(S, 16), BE) - requires lengthString(S) >=Int 2 - - rule #parseByteStackRaw(S) => String2Bytes(S) - - syntax Map ::= #parseMap ( JSON ) [function] - // -------------------------------------------- - rule #parseMap( { .JSONs } ) => .Map - rule #parseMap( { _ : (VALUE:String) , REST } ) => #parseMap({ REST }) requires #parseHexWord(VALUE) ==K 0 - rule #parseMap( { KEY : (VALUE:String) , REST } ) => #parseMap({ REST }) [ #parseHexWord(KEY) <- #parseHexWord(VALUE) ] requires #parseHexWord(VALUE) =/=K 0 - - syntax Int ::= #parseAddr ( String ) [function] - // ----------------------------------------------- - rule #parseAddr(S) => #addr(#parseHexWord(S)) - - syntax List ::= #parseAccessListStorageKeys ( JSONs ) [function] - | #parseAccessListStorageKeys ( JSONs , List ) [function, klabel(#parseAccessListStorageKeysAux)] - // -------------------------------------------------------------------------------------------------------------- - rule #parseAccessListStorageKeys( J ) => #parseAccessListStorageKeys(J, .List) - rule #parseAccessListStorageKeys([S:String, REST], RESULT:List) => #parseAccessListStorageKeys([REST], ListItem(#asWord(#parseByteStackRaw(S))) RESULT ) - rule #parseAccessListStorageKeys([ .JSONs ], RESULT:List) => RESULT -``` - -Unparsing ---------- - -We need to interperet a `Bytes` as a `String` again so that we can call `Keccak256` on it from `KRYPTO`. - -- `#unparseByteStack` turns a stack of bytes (as a `Bytes`) into a `String`. -- `#padByte` ensures that the `String` interperetation of a `Int` is wide enough. - -```k - syntax String ::= #unparseByteStack ( Bytes ) [function, klabel(unparseByteStack), symbol] - // ------------------------------------------------------------------------------------------ - rule #unparseByteStack(WS) => Bytes2String(WS) - - syntax String ::= #padByte( String ) [function] - // ----------------------------------------------- - rule #padByte( S ) => S requires lengthString(S) ==K 2 - rule #padByte( S ) => "0" +String S requires lengthString(S) ==K 1 - - syntax String ::= #unparseQuantity( Int ) [function] - // ---------------------------------------------------- - rule #unparseQuantity( I ) => "0x" +String Base2String(I, 16) - - syntax String ::= #unparseData ( Int, Int ) [function] - | #unparseDataBytes ( Bytes ) [function] - // ------------------------------------------------------------ - rule #unparseData( DATA, LENGTH ) => #unparseDataBytes(#padToWidth(LENGTH,#asByteStack(DATA))) - - rule #unparseDataBytes( DATA ) => replaceFirst(Base2String(#asInteger(#asByteStack(1) +Bytes DATA), 16), "1", "0x") -``` - -- `#addrBytes` Takes an Account and represents it as a 20-byte wide Bytes (or an empty Bytes for a null address) -- `#wordBytes` Takes an Int and represents it as a 32-byte wide Bytes - -```k - syntax Bytes ::= #addrBytes( Account ) [function] - | #wordBytes( Int ) [function] - // ------------------------------------------------- - rule #addrBytes(.Account) => .Bytes - rule #addrBytes(ACCT) => #padToWidth(20, #asByteStack(ACCT)) requires #rangeAddress(ACCT) - rule #wordBytes(WORD) => #padToWidth(32, #asByteStack(WORD)) requires #rangeUInt(256, WORD) -``` - -String Helper Functions ------------------------ - -- `Hex2Raw` Takes a string of hex encoded bytes and converts it to a raw bytestring -- `Raw2Hex` Takes a string of raw bytes and converts it to a hex representation - -```k - syntax String ::= Hex2Raw ( String ) [function] - | Raw2Hex ( String ) [function] - // ----------------------------------------------- - rule Hex2Raw ( S ) => #unparseByteStack( #parseByteStack ( S ) ) - rule Raw2Hex ( S ) => #unparseDataBytes( #parseByteStackRaw ( S ) ) -``` - -Recursive Length Prefix (RLP) -============================= - -RLP encoding is used extensively for executing the blocks of a transaction. -For details about RLP encoding, see the [YellowPaper Appendix B](http://gavwood.com/paper.pdf). - -Encoding --------- - -- `#rlpEncodeInt` RLP encodes an arbitrary precision integer. -- `#rlpEncodeWord` RLP encodes a 256-bit wide EVM word. -- `#rlpEncodeAddress` RLP encodes a 160-bit wide Ethereum address (or the null address: .Account). -- `#rlpEncodeBytes` RLP encodes a Bytes. -- `#rlpEncodeString` RLP encodes a String. -- `#rlpEncode( JSON )` can take a JSON array and make an rlp encoding. It must be a JSON array! JSON objects aren't supported. - example: `#rlpEncode( [ 0, 1, 1, "", #parseByteStack("0xef880") ] )` - -```k - syntax String ::= #rlpEncodeInt ( Int ) [function] - | #rlpEncodeWord ( Int ) [function] - | #rlpEncodeAddress ( Account ) [function] - | #rlpEncodeBytes ( Bytes ) [function] - | #rlpEncodeString ( String ) [function] - | #rlpEncode ( JSON ) [function] - | #rlpEncode ( JSONs, StringBuffer ) [function, klabel(#rlpEncodeJsonAux)] - // ------------------------------------------------------------------------------------------ - rule #rlpEncodeInt(0) => "\x80" - rule #rlpEncodeInt(WORD) => chrChar(WORD) requires WORD >Int 0 andBool WORD #rlpEncodeBytes(#asByteStack(WORD)) requires WORD >=Int 128 - - rule #rlpEncodeWord(WORD) => #rlpEncodeBytes(#wordBytes(WORD)) - - rule #rlpEncodeAddress(ACCT) => #rlpEncodeBytes(#addrBytes(ACCT)) - - rule #rlpEncodeBytes(BYTES) => #rlpEncodeString(#unparseByteStack(BYTES)) - - rule #rlpEncodeString(STR) => "\x80" requires lengthString(STR) STR requires lengthString(STR) ==Int 1 andBool ordChar(substrString(STR, 0, 1)) #rlpEncodeLength(STR, 128) [owise] - - syntax JSON ::= Bytes - rule #rlpEncode( [ J:JSONs ] ) => #rlpEncodeLength( #rlpEncode(J, .StringBuffer) , 192 ) - - rule #rlpEncode( .JSONs , BUF ) => StringBuffer2String(BUF) - rule #rlpEncode( (J:Int, REST:JSONs), BUF ) => #rlpEncode(REST, BUF +String #rlpEncodeInt(J) ) - rule #rlpEncode( (J:String, REST:JSONs), BUF ) => #rlpEncode(REST, BUF +String #rlpEncodeString(J)) - rule #rlpEncode( (J:Bytes, REST:JSONs), BUF ) => #rlpEncode(REST, BUF +String #rlpEncodeBytes(J) ) - rule #rlpEncode( ([ J ], REST:JSONs), BUF ) => #rlpEncode(REST, BUF +String #rlpEncode([ J ]) ) - - syntax String ::= #rlpEncodeLength ( String , Int ) [function] - | #rlpEncodeLength ( String , Int , String ) [function, klabel(#rlpEncodeLengthAux)] - // ---------------------------------------------------------------------------------------------------- - rule #rlpEncodeLength(STR, OFFSET) => chrChar(lengthString(STR) +Int OFFSET) +String STR requires lengthString(STR) #rlpEncodeLength(STR, OFFSET, #unparseByteStack(#asByteStack(lengthString(STR)))) requires notBool ( lengthString(STR) chrChar(lengthString(BL) +Int OFFSET +Int 55) +String BL +String STR - - syntax String ::= #rlpEncodeFullAccount( Int, Int, Map, Bytes ) [function] - // -------------------------------------------------------------------------- - rule [rlpAcct]: #rlpEncodeFullAccount( NONCE, BAL, STORAGE, CODE ) - => #rlpEncodeLength( #rlpEncodeInt(NONCE) - +String #rlpEncodeInt(BAL) - +String #rlpEncodeString( Hex2Raw( Keccak256( #rlpEncodeMerkleTree( #storageRoot( STORAGE ) ) ) ) ) - +String #rlpEncodeString( Hex2Raw( Keccak256( #unparseByteStack( CODE ) ) ) ) - , 192 - ) - - syntax String ::= #rlpEncodeReceipt ( Int , Int , Bytes , List ) [function] - | #rlpEncodeLogs ( List ) [function] - | #rlpEncodeLogsAux ( List, StringBuffer ) [function] - | #rlpEncodeTopics ( List, StringBuffer ) [function] - // --------------------------------------------------------------------------- - rule [rlpReceipt]: #rlpEncodeReceipt(RS, RG, RB, RL) - => #rlpEncodeLength( #rlpEncodeInt(RS) - +String #rlpEncodeInt(RG) - +String #rlpEncodeString(#unparseByteStack(RB)) - +String #rlpEncodeLogs(RL) - , 192 - ) - - rule #rlpEncodeLogs( LOGS ) => #rlpEncodeLogsAux( LOGS, .StringBuffer ) - - rule #rlpEncodeLogsAux( .List, OUT ) => #rlpEncodeLength(StringBuffer2String(OUT),192) - rule #rlpEncodeLogsAux( ( ListItem({ ACCT | TOPICS | DATA }) => .List ) _ - , ( OUT => OUT +String #rlpEncodeLength( #rlpEncodeAddress(ACCT) - +String #rlpEncodeTopics(TOPICS,.StringBuffer) - +String #rlpEncodeString(#unparseByteStack(DATA)) - , 192 - ) - ) - ) - - rule #rlpEncodeTopics( .List, OUT ) => #rlpEncodeLength(StringBuffer2String(OUT),192) - rule #rlpEncodeTopics( ( ListItem( X:Int ) => .List ) _ - , ( OUT => OUT +String #rlpEncodeWord(X) ) - ) - - syntax String ::= #rlpEncodeTxData( TxData ) [function] - // ------------------------------------------------------- - rule #rlpEncodeTxData( LegacyTxData( TN, TP, TG, TT, TV, TD ) ) - => #rlpEncode( [ TN, TP, TG, #addrBytes(TT), TV, TD ] ) - - rule #rlpEncodeTxData( LegacyProtectedTxData( TN, TP, TG, TT, TV, TD, CID ) ) - => #rlpEncode( [ TN, TP, TG, #addrBytes(TT), TV, TD, CID, "", "" ] ) - - rule #rlpEncodeTxData( AccessListTxData( TN, TP, TG, TT, TV, TD, CID, [TA] ) ) - => #rlpEncode( [ CID, TN, TP, TG, #addrBytes(TT), TV, TD, [TA] ] ) - - rule #rlpEncodeTxData( DynamicFeeTxData(TN, TPF, TM, TG, TT, TV, DATA, CID, [TA]) ) - => #rlpEncode( [ CID, TN, TPF, TM, TG, #addrBytes(TT), TV, DATA, [TA] ] ) - - syntax String ::= #rlpEncodeMerkleTree ( MerkleTree ) [function] - // ---------------------------------------------------------------- - rule #rlpEncodeMerkleTree ( .MerkleTree ) => "\x80" - - rule #rlpEncodeMerkleTree ( MerkleLeaf ( PATH, VALUE ) ) - => #rlpEncodeLength( #rlpEncodeString( #unparseByteStack( #HPEncode( PATH, 1 ) ) ) - +String #rlpEncodeString( VALUE ) - , 192 - ) - - rule #rlpEncodeMerkleTree ( MerkleExtension ( PATH, TREE ) ) - => #rlpEncodeLength( #rlpEncodeString( #unparseByteStack( #HPEncode( PATH, 0 ) ) ) - +String #rlpMerkleH( #rlpEncodeMerkleTree( TREE ) ) - , 192 - ) - - rule #rlpEncodeMerkleTree ( MerkleBranch ( M , VALUE ) ) - => #rlpEncodeLength( MerkleMapRLP(M, 0) +String MerkleMapRLP(M, 1) - +String MerkleMapRLP(M, 2) +String MerkleMapRLP(M, 3) - +String MerkleMapRLP(M, 4) +String MerkleMapRLP(M, 5) - +String MerkleMapRLP(M, 6) +String MerkleMapRLP(M, 7) - +String MerkleMapRLP(M, 8) +String MerkleMapRLP(M, 9) - +String MerkleMapRLP(M,10) +String MerkleMapRLP(M,11) - +String MerkleMapRLP(M,12) +String MerkleMapRLP(M,13) - +String MerkleMapRLP(M,14) +String MerkleMapRLP(M,15) - +String #rlpEncodeString( VALUE ) - , 192 - ) - - syntax String ::= MerkleMapRLP( Map, Int ) [function] - // ----------------------------------------------------- - rule MerkleMapRLP(M, I) => #rlpMerkleH( #rlpEncodeMerkleTree( { M[I] orDefault .MerkleTree }:>MerkleTree ) ) - - syntax String ::= #rlpMerkleH ( String ) [function,klabel(MerkleRLPAux)] - // ------------------------------------------------------------------------ - rule #rlpMerkleH ( X ) => #rlpEncodeString( Hex2Raw( Keccak256( X ) ) ) - requires lengthString(X) >=Int 32 - - rule #rlpMerkleH ( X ) => X - requires notBool lengthString(X) >=Int 32 -``` - -Decoding --------- - -- `#rlpDecode` RLP decodes a single `String` into a `JSON`. -- `#rlpDecodeList` RLP decodes a single `String` into a `JSONs`, interpereting the string as the RLP encoding of a list. - -```k - syntax JSON ::= #rlpDecode(String) [function] - | #rlpDecode(String, LengthPrefix) [function, klabel(#rlpDecodeAux)] - // ---------------------------------------------------------------------------------- - rule #rlpDecode(STR) => #rlpDecode(STR, #decodeLengthPrefix(STR, 0)) - rule #rlpDecode(STR, #str( LEN, POS)) => substrString(STR, POS, POS +Int LEN) - rule #rlpDecode(STR, #list(_LEN, POS)) => [#rlpDecodeList(STR, POS)] - - syntax JSONs ::= #rlpDecodeList(String, Int) [function] - | #rlpDecodeList(String, Int, LengthPrefix) [function, klabel(#rlpDecodeListAux)] - // ------------------------------------------------------------------------------------------------ - rule #rlpDecodeList(STR, POS) => #rlpDecodeList(STR, POS, #decodeLengthPrefix(STR, POS)) requires POS .JSONs [owise] - rule #rlpDecodeList(STR, POS, _:LengthPrefixType(L, P)) => #rlpDecode(substrString(STR, POS, L +Int P)) , #rlpDecodeList(STR, L +Int P) - - syntax LengthPrefixType ::= "#str" | "#list" - syntax LengthPrefix ::= LengthPrefixType "(" Int "," Int ")" - | #decodeLengthPrefix ( String , Int ) [function] - | #decodeLengthPrefix ( String , Int , Int ) [function, klabel(#decodeLengthPrefixAux)] - | #decodeLengthPrefixLength ( LengthPrefixType , String , Int , Int ) [function] - | #decodeLengthPrefixLength ( LengthPrefixType , Int , Int , Int ) [function, klabel(#decodeLengthPrefixLengthAux)] - // -------------------------------------------------------------------------------------------------------------------------------------------- - rule #decodeLengthPrefix(STR, START) => #decodeLengthPrefix(STR, START, ordChar(substrString(STR, START, START +Int 1))) - - rule #decodeLengthPrefix( _, START, B0) => #str(1, START) requires B0 #str(B0 -Int 128, START +Int 1) requires B0 >=Int 128 andBool B0 #decodeLengthPrefixLength(#str, STR, START, B0) requires B0 >=Int (128 +Int 56) andBool B0 #list(B0 -Int 192, START +Int 1) requires B0 >=Int 192 andBool B0 #decodeLengthPrefixLength(#list, STR, START, B0) [owise] - - rule #decodeLengthPrefixLength(#str, STR, START, B0) => #decodeLengthPrefixLength(#str, START, B0 -Int 128 -Int 56 +Int 1, #asWord(#parseByteStackRaw(substrString(STR, START +Int 1, START +Int 1 +Int (B0 -Int 128 -Int 56 +Int 1))))) - rule #decodeLengthPrefixLength(#list, STR, START, B0) => #decodeLengthPrefixLength(#list, START, B0 -Int 192 -Int 56 +Int 1, #asWord(#parseByteStackRaw(substrString(STR, START +Int 1, START +Int 1 +Int (B0 -Int 192 -Int 56 +Int 1))))) - rule #decodeLengthPrefixLength(TYPE, START, LL, L) => TYPE(L, START +Int 1 +Int LL) - - syntax JSONs ::= #rlpDecodeTransaction(Bytes) [function] - // -------------------------------------------------------- - rule #rlpDecodeTransaction(T) => #unparseByteStack(#range(T, 0, 1)), #rlpDecode(#unparseByteStack(#range(T, 1, lengthBytes(T) -Int 1))) -``` - -Merkle Patricia Tree -==================== - -- Appendix C and D from the Ethereum Yellow Paper -- https://github.com/ethereum/wiki/wiki/Patricia-Tree - -```k - syntax KItem ::= Int | MerkleTree // For testing purposes - - syntax MerkleTree ::= ".MerkleTree" - | MerkleBranch ( Map, String ) - | MerkleExtension ( Bytes, MerkleTree ) - | MerkleLeaf ( Bytes, String ) - // ------------------------------------------------------- - - syntax MerkleTree ::= MerkleUpdate ( MerkleTree, String, String ) [function] - | MerkleUpdate ( MerkleTree, Bytes, String ) [function,klabel(MerkleUpdateAux)] - | MerklePut ( MerkleTree, Bytes, String ) [function] - | MerkleDelete ( MerkleTree, Bytes ) [function] - // ---------------------------------------------------------------------------- - rule MerkleUpdate ( TREE, S:String, VALUE ) => MerkleUpdate ( TREE, #nibbleize ( #parseByteStackRaw( S ) ), VALUE ) - - rule MerkleUpdate ( TREE, PATH:Bytes, VALUE ) => MerklePut ( TREE, PATH, VALUE ) requires VALUE =/=String "" - rule MerkleUpdate ( TREE, PATH:Bytes, "" ) => MerkleDelete ( TREE, PATH ) - - rule MerklePut ( .MerkleTree, PATH:Bytes, VALUE ) => MerkleLeaf ( PATH, VALUE ) - - rule MerklePut ( MerkleLeaf ( LEAFPATH, _ ), PATH, VALUE ) - => MerkleLeaf( LEAFPATH, VALUE ) - requires LEAFPATH ==K PATH - - rule MerklePut ( MerkleLeaf ( LEAFPATH, LEAFVALUE ), PATH, VALUE ) - => MerklePut ( MerklePut ( MerkleBranch( .Map, "" ), LEAFPATH, LEAFVALUE ), PATH, VALUE ) - requires lengthBytes( LEAFPATH ) >Int 0 - andBool lengthBytes( PATH ) >Int 0 - andBool LEAFPATH[0] =/=Int PATH[0] - - rule MerklePut ( MerkleLeaf ( LEAFPATH, LEAFVALUE ), PATH, VALUE ) - => #merkleExtensionBuilder( .Bytes, LEAFPATH, LEAFVALUE, PATH, VALUE ) - requires #unparseByteStack( LEAFPATH ) =/=String #unparseByteStack( PATH ) - andBool lengthBytes( LEAFPATH ) >Int 0 - andBool lengthBytes( PATH ) >Int 0 - andBool LEAFPATH[0] ==Int PATH[0] - - rule MerklePut ( MerkleExtension ( EXTPATH, EXTTREE ), PATH, VALUE ) - => MerkleExtension ( EXTPATH, MerklePut ( EXTTREE, .Bytes, VALUE ) ) - requires EXTPATH ==K PATH - - rule MerklePut ( MerkleExtension ( EXTPATH, EXTTREE ), PATH, VALUE ) - => #merkleExtensionBrancher( MerklePut( MerkleBranch( .Map, "" ), PATH, VALUE ), EXTPATH, EXTTREE ) - requires lengthBytes( PATH ) >Int 0 - andBool EXTPATH[0] =/=Int PATH[0] - - rule MerklePut ( MerkleExtension ( EXTPATH, EXTTREE ), PATH, VALUE ) - => #merkleExtensionSplitter( .Bytes, EXTPATH, EXTTREE, PATH, VALUE ) - requires #unparseByteStack( EXTPATH ) =/=String #unparseByteStack( PATH ) - andBool lengthBytes( PATH ) >Int 0 - andBool EXTPATH[0] ==Int PATH[0] - - rule MerklePut ( MerkleBranch( M, _ ), PATH, VALUE ) - => MerkleBranch( M, VALUE ) - requires lengthBytes( PATH ) ==Int 0 - - rule MerklePut ( MerkleBranch( M, BRANCHVALUE ), PATH, VALUE ) - => #merkleUpdateBranch ( M, BRANCHVALUE, PATH[0], #range(PATH, 1, lengthBytes(PATH) -Int 1), VALUE ) - requires lengthBytes( PATH ) >Int 0 - - rule MerkleDelete( .MerkleTree, _ ) => .MerkleTree - - rule MerkleDelete( MerkleLeaf( LPATH, _V ), PATH ) => .MerkleTree requires LPATH ==K PATH - rule MerkleDelete( MerkleLeaf( LPATH, V ), PATH ) => MerkleCheck( MerkleLeaf( LPATH, V ) ) requires LPATH =/=K PATH - - rule MerkleDelete( MerkleExtension( EXTPATH, TREE ), PATH ) => MerkleExtension( EXTPATH, TREE ) requires notBool (lengthBytes(EXTPATH) <=Int lengthBytes(PATH) andBool #range(PATH, 0, lengthBytes(EXTPATH)) ==K EXTPATH) - rule MerkleDelete( MerkleExtension( EXTPATH, TREE ), PATH ) - => MerkleCheck( MerkleExtension( EXTPATH, MerkleDelete( TREE, #range(PATH, lengthBytes(EXTPATH), lengthBytes(PATH) -Int lengthBytes(EXTPATH)) ) ) ) - requires lengthBytes(EXTPATH) <=Int lengthBytes(PATH) andBool #range(PATH, 0, lengthBytes(EXTPATH)) ==K EXTPATH - - rule MerkleDelete( MerkleBranch( M, _V ), PATH ) => MerkleCheck( MerkleBranch( M, "" ) ) requires lengthBytes(PATH) ==Int 0 - rule MerkleDelete( MerkleBranch( M, V ), PATH ) => MerkleBranch( M, V ) requires lengthBytes(PATH) >Int 0 andBool notBool PATH[0] in_keys(M) - rule MerkleDelete( MerkleBranch( M, V ), PATH ) - => MerkleCheck( MerkleBranch( M[PATH[0] <- MerkleDelete( {M[PATH[0]]}:>MerkleTree, #range(PATH, 1, lengthBytes(PATH) -Int 1) )], V ) ) - requires lengthBytes(PATH) >Int 0 andBool PATH[0] in_keys(M) - - syntax MerkleTree ::= MerkleCheck( MerkleTree ) [function] - // ---------------------------------------------------------- - rule MerkleCheck( TREE ) => TREE [owise] - - rule MerkleCheck( MerkleLeaf( _, "" ) => .MerkleTree ) - - rule MerkleCheck( MerkleBranch( .Map , V ) => MerkleLeaf( .Bytes, V ) ) - rule MerkleCheck( MerkleBranch( X |-> T , "" ) => MerkleExtension( #range(#asByteStack(X), 0, 1), T ) ) requires T =/=K .MerkleTree - rule MerkleCheck( MerkleBranch( M => #cleanBranchMap(M), _ ) ) requires .MerkleTree in values(M) - - rule MerkleCheck( MerkleExtension( _, .MerkleTree ) => .MerkleTree ) - rule MerkleCheck( MerkleExtension( P1, MerkleLeaf( P2, V ) ) => MerkleLeaf( P1 +Bytes P2, V ) ) - rule MerkleCheck( MerkleExtension( P1 => P1 +Bytes P2, MerkleExtension( P2, TREE ) => TREE ) ) -``` - -- `MerkleUpdateMap` Takes a mapping of `Bytes |-> String` and generates a trie - -```k - syntax MerkleTree ::= MerkleUpdateMap ( MerkleTree , Map ) [function] - | MerkleUpdateMapAux ( MerkleTree , Map , List ) [function] - // ------------------------------------------------------------------------------- - rule MerkleUpdateMap(TREE, MMAP) => MerkleUpdateMapAux(TREE, MMAP, keys_list(MMAP)) - - rule MerkleUpdateMapAux(TREE, _, .List ) => TREE - rule MerkleUpdateMapAux(TREE , MMAP, ListItem(KEY) REST) - => MerkleUpdateMapAux(MerkleUpdate(TREE, #nibbleize(KEY), {MMAP[KEY]}:>String), MMAP, REST) -``` - -Merkle Tree Aux Functions -------------------------- - -```k - syntax Bytes ::= #nibbleize ( Bytes ) [function] - | #byteify ( Bytes ) [function] - // ------------------------------------------------ - rule #nibbleize ( B ) => ( #range( #asByteStack ( B [ 0 ] /Int 16 ), 0, 1 ) - +Bytes ( #range( #asByteStack ( B [ 0 ] %Int 16 ), 0, 1 ) ) - ) +Bytes #nibbleize ( #range(B, 1, lengthBytes(B) -Int 1) ) - requires lengthBytes(B) >Int 0 - - rule #nibbleize ( B ) => .Bytes requires notBool lengthBytes(B) >Int 0 - - rule #byteify ( B ) => #range( #asByteStack ( B[0] *Int 16 +Int B[1] ), 0, 1 ) - +Bytes #byteify ( #range( B, 2, lengthBytes(B) -Int 2 ) ) - requires lengthBytes(B) >Int 0 - - rule #byteify ( B ) => .Bytes requires notBool lengthBytes(B) >Int 0 - - syntax Bytes ::= #HPEncode ( Bytes, Int ) [function] - // ---------------------------------------------------- - rule #HPEncode ( X, T ) => #asByteStack ( ( HPEncodeAux(T) +Int 1 ) *Int 16 +Int X[0] ) +Bytes #byteify( #range(X, 1, lengthBytes(X) -Int 1) ) - requires lengthBytes(X) %Int 2 =/=Int 0 - - rule #HPEncode ( X, T ) => #range(#asByteStack ( HPEncodeAux(T) *Int 16 ), 0, 1) +Bytes #byteify( X ) - requires notBool lengthBytes(X) %Int 2 =/=Int 0 - - syntax Int ::= HPEncodeAux ( Int ) [function] - // --------------------------------------------- - rule HPEncodeAux ( X ) => 0 requires X ==Int 0 - rule HPEncodeAux ( X ) => 2 requires notBool X ==Int 0 - - syntax Map ::= #cleanBranchMap ( Map ) [function] - | #cleanBranchMapAux ( Map, List, Set ) [function] - // --------------------------------------------------------------- - rule #cleanBranchMap( M ) => #cleanBranchMapAux( M, keys_list(M), .Set ) - - rule #cleanBranchMapAux( M, .List, S ) => removeAll( M, S ) - rule #cleanBranchMapAux( X |-> .MerkleTree _, (ListItem(X) => .List) _ , (.Set => SetItem(X)) _ ) - rule #cleanBranchMapAux( _, (ListItem(_) => .List) _ , _ ) [owise] - - syntax MerkleTree ::= #merkleUpdateBranch ( Map, String, Int, Bytes, String ) [function] - // ---------------------------------------------------------------------------------------- - rule #merkleUpdateBranch ( X |-> TREE M, BRANCHVALUE, X, PATH, VALUE ) - => MerkleBranch( M[X <- MerklePut( TREE, PATH, VALUE )], BRANCHVALUE ) - - rule #merkleUpdateBranch ( M, BRANCHVALUE, X, PATH, VALUE ) - => MerkleBranch( M[X <- MerkleLeaf( PATH, VALUE )], BRANCHVALUE ) [owise] - - syntax MerkleTree ::= #merkleExtensionBuilder( Bytes , Bytes , String , Bytes , String ) [function] - | #merkleExtensionBuilderAux( Bytes , Bytes , String , Bytes , String ) [function] - // ------------------------------------------------------------------------------------------------------ - rule #merkleExtensionBuilder(PATH, P1, V1, P2, V2) - => #merkleExtensionBuilderAux(PATH, P1, V1, P2, V2) - requires lengthBytes(P1) >Int 0 - andBool lengthBytes(P2) >Int 0 - - rule #merkleExtensionBuilder(PATH, P1, V1, P2, V2) - => MerkleExtension( PATH, MerklePut( MerklePut( MerkleBranch( .Map, "" ), P1, V1 ), P2, V2 ) ) - [owise] - - rule #merkleExtensionBuilderAux( PATH, P1, V1, P2, V2 ) - => #merkleExtensionBuilder( PATH +Bytes (#range(P1, 0, 1)) - , #range(P1, 1, lengthBytes(P1) -Int 1), V1 - , #range(P2, 1, lengthBytes(P2) -Int 1), V2 - ) - requires P1[0] ==Int P2[0] - - rule #merkleExtensionBuilderAux( PATH, P1, V1, P2, V2 ) - => MerkleExtension( PATH, MerklePut( MerklePut( MerkleBranch( .Map, "" ), P1, V1 ), P2, V2 ) ) - [owise] - - syntax MerkleTree ::= #merkleExtensionBrancher ( MerkleTree, Bytes, MerkleTree ) [function] - // ------------------------------------------------------------------------------------------- - rule #merkleExtensionBrancher( MerkleBranch(M, VALUE), PATH, EXTTREE ) - => MerkleBranch( M[PATH[0] <- MerkleExtension( #range(PATH, 1, lengthBytes(PATH) -Int 1), EXTTREE )], VALUE ) - requires lengthBytes(PATH) >Int 1 - - rule #merkleExtensionBrancher( MerkleBranch(M, VALUE), PATH, EXTTREE ) - => MerkleBranch( M[PATH[0] <- EXTTREE], VALUE ) - requires lengthBytes(PATH) ==Int 1 - - syntax MerkleTree ::= #merkleExtensionSplitter ( Bytes, Bytes, MerkleTree, Bytes, String ) [function] - // ----------------------------------------------------------------------------------------------------- - rule #merkleExtensionSplitter( PATH => PATH +Bytes (#range(P1, 0, 1)) - , P1 => #range(P1, 1, lengthBytes(P1) -Int 1), _ - , P2 => #range(P2, 1, lengthBytes(P2) -Int 1), _ - ) - requires lengthBytes(P1) >Int 0 - andBool lengthBytes(P2) >Int 0 - andBool P1[0] ==Int P2[0] - - rule #merkleExtensionSplitter( PATH, P1, TREE, P2, VALUE ) - => MerkleExtension( PATH, #merkleExtensionBrancher( MerklePut( MerkleBranch( .Map, "" ), P2, VALUE ), P1, TREE ) ) - requires lengthBytes(P1) >Int 0 - andBool lengthBytes(P2) >Int 0 - andBool P1[0] =/=Int P2[0] - - rule #merkleExtensionSplitter( PATH, P1, TREE, P2, VALUE ) - => MerkleExtension( PATH, MerklePut( TREE, P2, VALUE ) ) - requires lengthBytes(P1) ==Int 0 - - rule #merkleExtensionSplitter( PATH, P1, TREE, P2, VALUE ) - => MerkleExtension( PATH, #merkleExtensionBrancher( MerklePut( MerkleBranch( .Map, "" ), P2, VALUE ), P1, TREE ) ) - requires lengthBytes(P2) ==Int 0 -``` - -Tree Root Helper Functions --------------------------- - -### Storage Root - -```k - syntax Map ::= #intMap2StorageMap( Map ) [function] - | #intMap2StorageMapAux( Map, Map, List ) [function] - // ----------------------------------------------------------------- - rule #intMap2StorageMap( M ) => #intMap2StorageMapAux( .Map, M, keys_list(M) ) - - rule #intMap2StorageMapAux( SMAP, _, .List ) => SMAP - rule #intMap2StorageMapAux( SMAP, IMAP, ListItem(K) REST ) - => #intMap2StorageMapAux( #wordBytes(K) |-> #rlpEncodeInt({IMAP[K]}:>Int) SMAP, IMAP, REST ) - requires {IMAP[K]}:>Int =/=Int 0 - - rule #intMap2StorageMapAux( SMAP, IMAP, ListItem(K) REST ) - => #intMap2StorageMapAux( SMAP, IMAP, REST ) - requires {IMAP[K]}:>Int ==Int 0 - - - syntax MerkleTree ::= #storageRoot( Map ) [function] - // ---------------------------------------------------- - rule #storageRoot( STORAGE ) => MerkleUpdateMap( .MerkleTree, #intMap2StorageMap( STORAGE ) ) -``` - -### State Root - -```k - syntax Map ::= #precompiledAccountsMap ( Set ) [function] - | #precompiledAccountsMapAux( List, Map ) [function] - // ----------------------------------------------------------------- - rule #precompiledAccountsMap( ACCTS ) => #precompiledAccountsMapAux( Set2List( ACCTS ), .Map ) - - rule #precompiledAccountsMapAux( .List, M ) => M - rule #precompiledAccountsMapAux( (ListItem( ACCT ) => .List) _, M => M[#parseByteStackRaw( Hex2Raw( #unparseData( ACCT, 20 ) ) ) <- #emptyContractRLP] ) - - syntax String ::= "#emptyContractRLP" [function] - // ------------------------------------------------ - rule #emptyContractRLP => #rlpEncodeLength( #rlpEncodeInt(0) - +String #rlpEncodeInt(0) - +String #rlpEncodeString( Hex2Raw( Keccak256("\x80") ) ) - +String #rlpEncodeString( Hex2Raw( Keccak256("") ) ) - , 192 - ) -endmodule -``` diff --git a/include/kframework/serialization/index.html b/include/kframework/serialization/index.html new file mode 100644 index 0000000000..aa5dd167de --- /dev/null +++ b/include/kframework/serialization/index.html @@ -0,0 +1,925 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Parsing/Unparsing

+
requires "plugin/krypto.md"
+requires "evm-types.md"
+requires "json-rpc.md"
+
+
module SERIALIZATION
+    imports KRYPTO
+    imports EVM-TYPES
+    imports STRING-BUFFER
+    imports JSON-EXT
+
+

Address/Hash Helpers

+
    +
  • keccak serves as a wrapper around the Keccak256 in KRYPTO.
  • +
+
    syntax Int ::= keccak ( Bytes ) [function, total, smtlib(smt_keccak)]
+ // -------------------------------------------------------------------------
+    rule [keccak]: keccak(WS) => #parseHexWord(Keccak256(#unparseByteStack(WS))) [concrete]
+
+
    +
  • #newAddr computes the address of a new account given the address and nonce of the creating account.
  • +
  • #sender computes the sender of the transaction from its data and signature.
  • +
  • #addrFromPrivateKey computes the address of an account given its private key
  • +
+
    syntax Int ::= #newAddr ( Int , Int )         [function]
+                 | #newAddr ( Int , Int , Bytes ) [function, klabel(#newAddrCreate2)]
+ // ---------------------------------------------------------------------------------
+    rule [#newAddr]:        #newAddr(ACCT, NONCE) => #addr(#parseHexWord(Keccak256(#rlpEncode([#addrBytes(ACCT), NONCE]))))                                                                                                                                                     [concrete]
+    rule [#newAddrCreate2]: #newAddr(ACCT, SALT, INITCODE) => #addr(#parseHexWord(Keccak256("\xff" +String #unparseByteStack(#addrBytes(ACCT)) +String #unparseByteStack(#wordBytes(SALT)) +String #unparseByteStack(#parseHexBytes(Keccak256(#unparseByteStack(INITCODE))))))) [concrete]
+
+    syntax Account ::= #sender ( TxData , Int , Bytes , Bytes )   [function, klabel(#senderTxData)]
+                     | #sender ( String , Int , String , String ) [function, klabel(#senderAux)   ]
+                     | #sender ( String )                         [function, klabel(#senderAux2)  ]
+ // -----------------------------------------------------------------------------------------------
+    rule #sender(_:TxData, TW => TW +Int 27, _, _)
+      requires TW ==Int 0 orBool TW ==Int 1
+
+    rule #sender(TXDATA, TW, TR, TS)
+      => #sender(Hex2Raw(#hashTxData(TXDATA)), TW, #unparseByteStack(TR), #unparseByteStack(TS))
+      requires TW =/=Int 0 andBool TW =/=Int 1
+
+    rule #sender(HT, TW, TR, TS) => #sender(ECDSARecover(HT, TW, TR, TS))
+
+    rule #sender("")  => .Account
+    rule #sender(STR) => #addr(#parseHexWord(Keccak256(STR))) requires STR =/=String ""
+
+    syntax Int ::= #addrFromPrivateKey ( String ) [function, klabel(addrFromPrivateKey)]
+ // ------------------------------------------------------------------------------------
+    rule [addrFromPrivateKey]: #addrFromPrivateKey ( KEY ) => #addr( #parseHexWord( Keccak256 ( Hex2Raw( ECDSAPubKey( Hex2Raw( KEY ) ) ) ) ) ) [concrete]
+
+
    +
  • #blockHeaderHash computes the hash of a block header given all the block data.
  • +
+
    syntax Int ::= #blockHeaderHash( Int , Int , Int , Int , Int , Int , Bytes , Int , Int , Int , Int , Int , Bytes , Int , Int ) [function, klabel(blockHeaderHash), symbol]
+                 | #blockHeaderHash(String, String, String, String, String, String, String, String, String, String, String, String, String, String, String) [function, klabel(#blockHashHeaderStr), symbol]
+                 | #blockHeaderHash( Int , Int , Int , Int , Int , Int , Bytes , Int , Int , Int , Int , Int , Bytes , Int , Int , Int) [function, klabel(blockHeaderHashBaseFee), symbol]
+                 | #blockHeaderHash(String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String) [function, klabel(#blockHashHeaderBaseFeeStr), symbol]
+ // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+    rule #blockHeaderHash(HP:String, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN)
+         => #parseHexWord( Keccak256( #rlpEncode( [ HP, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN ] ) ) )
+
+    rule #blockHeaderHash(HP:Int, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN)
+         => #parseHexWord( Keccak256( #rlpEncode( [ #wordBytes(HP), #wordBytes(HO), #addrBytes(HC)
+                                                  , #wordBytes(HR), #wordBytes(HT), #wordBytes(HE)
+                                                  , HB, HD, HI, HL, HG, HS, HX
+                                                  , #wordBytes(HM), #padToWidth(8, #asByteStack(HN))
+                                                  ]
+                                                )
+                                    )
+                         )
+
+    rule #blockHeaderHash(HP:String, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN, HF)
+         => #parseHexWord( Keccak256( #rlpEncode( [ HP, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN, HF ] ) ) )
+
+    rule #blockHeaderHash(HP:Int, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN, HF)
+         => #parseHexWord( Keccak256( #rlpEncode( [ #wordBytes(HP), #wordBytes(HO), #addrBytes(HC)
+                                                  , #wordBytes(HR), #wordBytes(HT), #wordBytes(HE)
+                                                  , HB, HD, HI, HL, HG, HS, HX
+                                                  , #wordBytes(HM), #padToWidth(8, #asByteStack(HN))
+                                                  , HF
+                                                  ]
+                                                )
+                                    )
+                         )
+
+
    +
  • #hashSignedTx Takes transaction data. Returns the hash of the rlp-encoded transaction with R S and V.
  • +
+
    syntax String ::= #hashSignedTx( Int , Int , Int , Account , Int , Bytes , Int , Bytes , Bytes ) [function]
+                    | #hashTxData  ( TxData )                                                        [function]
+ // -----------------------------------------------------------------------------------------------------------
+    rule #hashSignedTx(TN, TP, TG, TT, TV, TD, TW, TR, TS)
+      => Keccak256( #rlpEncode([ TN, TP, TG, #addrBytes(TT), TV, TD, TW, TR, TS ]) )
+
+    rule #hashTxData( TXDATA ) => Keccak256(                #rlpEncodeTxData(TXDATA) ) requires isLegacyTx    (TXDATA)
+    rule #hashTxData( TXDATA ) => Keccak256( "\x01" +String #rlpEncodeTxData(TXDATA) ) requires isAccessListTx(TXDATA)
+    rule #hashTxData( TXDATA ) => Keccak256( "\x02" +String #rlpEncodeTxData(TXDATA) ) requires isDynamicFeeTx(TXDATA)
+
+

The EVM test-sets are represented in JSON format with hex-encoding of the data and programs. +Here we provide some standard parser/unparser functions for that format.

+

Parsing

+

These parsers can interperet hex-encoded strings as Ints, Bytess, and Maps.

+
    +
  • #parseHexWord interprets a string as a single hex-encoded Word.
  • +
  • #parseHexBytes interprets a string as a hex-encoded stack of bytes.
  • +
  • #alignHexString makes sure that the length of a (hex)string is even.
  • +
  • #parseByteStack interprets a string as a hex-encoded stack of bytes, but makes sure to remove the leading "0x".
  • +
  • #parseByteStackRaw casts a string as a stack of bytes, ignoring any encoding.
  • +
  • #parseWordStack interprets a JSON list as a stack of Word.
  • +
  • #parseMap interprets a JSON key/value object as a map from Word to Word.
  • +
  • #parseAddr interprets a string as a 160 bit hex-endcoded address.
  • +
  • #parseAccessListStorageKeys interprets a JSON list object as a Set, casting each string element as a Word.
  • +
+
    syntax Int ::= #parseHexWord ( String ) [function]
+                 | #parseWord    ( String ) [function]
+ // --------------------------------------------------
+    rule #parseHexWord("")   => 0
+    rule #parseHexWord("0x") => 0
+    rule #parseHexWord(S)    => String2Base(replaceAll(S, "0x", ""), 16) requires (S =/=String "") andBool (S =/=String "0x")
+
+    rule #parseWord("") => 0
+    rule #parseWord(S)  => #parseHexWord(S) requires lengthString(S) >=Int 2 andBool substrString(S, 0, 2) ==String "0x"
+    rule #parseWord(S)  => String2Int(S) [owise]
+
+    syntax String ::= #alignHexString ( String ) [function, total]
+ // --------------------------------------------------------------
+    rule #alignHexString(S) => S             requires         lengthString(S) modInt 2 ==Int 0
+    rule #alignHexString(S) => "0" +String S requires notBool lengthString(S) modInt 2 ==Int 0
+
+    syntax Bytes ::= #parseHexBytes     ( String ) [function]
+                   | #parseHexBytesAux  ( String ) [function]
+                   | #parseByteStack    ( String ) [function, memo]
+                   | #parseByteStackRaw ( String ) [function]
+ // ---------------------------------------------------------
+    rule #parseByteStack(S) => #parseHexBytes(replaceAll(S, "0x", ""))
+
+    rule #parseHexBytes(S)  => #parseHexBytesAux(#alignHexString(S))
+    rule #parseHexBytesAux("") => .Bytes
+    rule #parseHexBytesAux(S)  => Int2Bytes(lengthString(S) /Int 2, String2Base(S, 16), BE)
+      requires lengthString(S) >=Int 2
+
+    rule #parseByteStackRaw(S) => String2Bytes(S)
+
+    syntax Map ::= #parseMap ( JSON ) [function]
+ // --------------------------------------------
+    rule #parseMap( { .JSONs                      } ) => .Map
+    rule #parseMap( { _   : (VALUE:String) , REST } ) => #parseMap({ REST })                                                requires #parseHexWord(VALUE) ==K 0
+    rule #parseMap( { KEY : (VALUE:String) , REST } ) => #parseMap({ REST }) [ #parseHexWord(KEY) <- #parseHexWord(VALUE) ] requires #parseHexWord(VALUE) =/=K 0
+
+    syntax Int ::= #parseAddr ( String ) [function]
+ // -----------------------------------------------
+    rule #parseAddr(S) => #addr(#parseHexWord(S))
+
+   syntax List ::= #parseAccessListStorageKeys ( JSONs )        [function]
+                 | #parseAccessListStorageKeys ( JSONs , List ) [function, klabel(#parseAccessListStorageKeysAux)]
+ // --------------------------------------------------------------------------------------------------------------
+    rule #parseAccessListStorageKeys( J                           ) => #parseAccessListStorageKeys(J, .List)
+    rule #parseAccessListStorageKeys([S:String, REST], RESULT:List) => #parseAccessListStorageKeys([REST], ListItem(#asWord(#parseByteStackRaw(S))) RESULT )
+    rule #parseAccessListStorageKeys([ .JSONs       ], RESULT:List) => RESULT
+
+

Unparsing

+

We need to interperet a Bytes as a String again so that we can call Keccak256 on it from KRYPTO.

+
    +
  • #unparseByteStack turns a stack of bytes (as a Bytes) into a String.
  • +
  • #padByte ensures that the String interperetation of a Int is wide enough.
  • +
+
    syntax String ::= #unparseByteStack ( Bytes ) [function, klabel(unparseByteStack), symbol]
+ // ------------------------------------------------------------------------------------------
+    rule #unparseByteStack(WS) => Bytes2String(WS)
+
+    syntax String ::= #padByte( String ) [function]
+ // -----------------------------------------------
+    rule #padByte( S ) => S             requires lengthString(S) ==K 2
+    rule #padByte( S ) => "0" +String S requires lengthString(S) ==K 1
+
+    syntax String ::= #unparseQuantity( Int ) [function]
+ // ----------------------------------------------------
+    rule #unparseQuantity( I ) => "0x" +String Base2String(I, 16)
+
+    syntax String ::= #unparseData      ( Int, Int  ) [function]
+                    | #unparseDataBytes ( Bytes )     [function]
+ // ------------------------------------------------------------
+    rule #unparseData( DATA, LENGTH ) => #unparseDataBytes(#padToWidth(LENGTH,#asByteStack(DATA)))
+
+    rule #unparseDataBytes( DATA ) => replaceFirst(Base2String(#asInteger(#asByteStack(1) +Bytes DATA), 16), "1", "0x")
+
+
    +
  • #addrBytes Takes an Account and represents it as a 20-byte wide Bytes (or an empty Bytes for a null address)
  • +
  • #wordBytes Takes an Int and represents it as a 32-byte wide Bytes
  • +
+
    syntax Bytes ::= #addrBytes( Account ) [function]
+                   | #wordBytes( Int )     [function]
+ // -------------------------------------------------
+    rule #addrBytes(.Account) => .Bytes
+    rule #addrBytes(ACCT)     => #padToWidth(20, #asByteStack(ACCT)) requires #rangeAddress(ACCT)
+    rule #wordBytes(WORD)     => #padToWidth(32, #asByteStack(WORD)) requires #rangeUInt(256, WORD)
+
+

String Helper Functions

+
    +
  • Hex2Raw Takes a string of hex encoded bytes and converts it to a raw bytestring
  • +
  • Raw2Hex Takes a string of raw bytes and converts it to a hex representation
  • +
+
    syntax String ::= Hex2Raw ( String ) [function]
+                    | Raw2Hex ( String ) [function]
+ // -----------------------------------------------
+    rule Hex2Raw ( S ) => #unparseByteStack( #parseByteStack ( S ) )
+    rule Raw2Hex ( S ) => #unparseDataBytes( #parseByteStackRaw ( S ) )
+
+

Recursive Length Prefix (RLP)

+

RLP encoding is used extensively for executing the blocks of a transaction. +For details about RLP encoding, see the YellowPaper Appendix B.

+

Encoding

+
    +
  • #rlpEncodeInt RLP encodes an arbitrary precision integer.
  • +
  • #rlpEncodeWord RLP encodes a 256-bit wide EVM word.
  • +
  • #rlpEncodeAddress RLP encodes a 160-bit wide Ethereum address (or the null address: .Account).
  • +
  • #rlpEncodeBytes RLP encodes a Bytes.
  • +
  • #rlpEncodeString RLP encodes a String.
  • +
  • #rlpEncode( JSON ) can take a JSON array and make an rlp encoding. It must be a JSON array! JSON objects aren't supported. +example: #rlpEncode( [ 0, 1, 1, "", #parseByteStack("0xef880") ] )
  • +
+
    syntax String ::= #rlpEncodeInt ( Int )              [function]
+                    | #rlpEncodeWord ( Int )             [function]
+                    | #rlpEncodeAddress ( Account )      [function]
+                    | #rlpEncodeBytes ( Bytes )      [function]
+                    | #rlpEncodeString ( String )        [function]
+                    | #rlpEncode ( JSON )                [function]
+                    | #rlpEncode ( JSONs, StringBuffer ) [function, klabel(#rlpEncodeJsonAux)]
+ // ------------------------------------------------------------------------------------------
+    rule #rlpEncodeInt(0) => "\x80"
+    rule #rlpEncodeInt(WORD) => chrChar(WORD) requires WORD >Int 0 andBool WORD <Int 128
+    rule #rlpEncodeInt(WORD) => #rlpEncodeBytes(#asByteStack(WORD)) requires WORD >=Int 128
+
+    rule #rlpEncodeWord(WORD) => #rlpEncodeBytes(#wordBytes(WORD))
+
+    rule #rlpEncodeAddress(ACCT) => #rlpEncodeBytes(#addrBytes(ACCT))
+
+    rule #rlpEncodeBytes(BYTES) => #rlpEncodeString(#unparseByteStack(BYTES))
+
+    rule #rlpEncodeString(STR) => "\x80"                     requires lengthString(STR)  <Int 1
+    rule #rlpEncodeString(STR) => STR                        requires lengthString(STR) ==Int 1 andBool ordChar(substrString(STR, 0, 1)) <Int 128
+    rule #rlpEncodeString(STR) => #rlpEncodeLength(STR, 128) [owise]
+
+    syntax JSON ::= Bytes
+    rule #rlpEncode( [ J:JSONs ] ) => #rlpEncodeLength( #rlpEncode(J, .StringBuffer) , 192 )
+
+    rule #rlpEncode( .JSONs                   , BUF ) => StringBuffer2String(BUF)
+    rule #rlpEncode( (J:Int,       REST:JSONs), BUF ) => #rlpEncode(REST, BUF +String #rlpEncodeInt(J)   )
+    rule #rlpEncode( (J:String,    REST:JSONs), BUF ) => #rlpEncode(REST, BUF +String #rlpEncodeString(J))
+    rule #rlpEncode( (J:Bytes,     REST:JSONs), BUF ) => #rlpEncode(REST, BUF +String #rlpEncodeBytes(J) )
+    rule #rlpEncode( ([ J ],       REST:JSONs), BUF ) => #rlpEncode(REST, BUF +String #rlpEncode([ J ])  )
+
+    syntax String ::= #rlpEncodeLength ( String , Int )          [function]
+                    | #rlpEncodeLength ( String , Int , String ) [function, klabel(#rlpEncodeLengthAux)]
+ // ----------------------------------------------------------------------------------------------------
+    rule #rlpEncodeLength(STR, OFFSET) => chrChar(lengthString(STR) +Int OFFSET) +String STR                                requires           lengthString(STR) <Int 56
+    rule #rlpEncodeLength(STR, OFFSET) => #rlpEncodeLength(STR, OFFSET, #unparseByteStack(#asByteStack(lengthString(STR)))) requires notBool ( lengthString(STR) <Int 56 )
+    rule #rlpEncodeLength(STR, OFFSET, BL) => chrChar(lengthString(BL) +Int OFFSET +Int 55) +String BL +String STR
+
+    syntax String ::= #rlpEncodeFullAccount( Int, Int, Map, Bytes ) [function]
+ // --------------------------------------------------------------------------
+    rule [rlpAcct]: #rlpEncodeFullAccount( NONCE, BAL, STORAGE, CODE )
+                 => #rlpEncodeLength(         #rlpEncodeInt(NONCE)
+                                      +String #rlpEncodeInt(BAL)
+                                      +String #rlpEncodeString( Hex2Raw( Keccak256( #rlpEncodeMerkleTree( #storageRoot( STORAGE ) ) ) ) )
+                                      +String #rlpEncodeString( Hex2Raw( Keccak256( #unparseByteStack( CODE ) ) ) )
+                                    , 192
+                                    )
+
+    syntax String ::= #rlpEncodeReceipt ( Int , Int , Bytes , List ) [function]
+                    | #rlpEncodeLogs    ( List )                     [function]
+                    | #rlpEncodeLogsAux ( List, StringBuffer )       [function]
+                    | #rlpEncodeTopics  ( List, StringBuffer )       [function]
+ // ---------------------------------------------------------------------------
+    rule [rlpReceipt]: #rlpEncodeReceipt(RS, RG, RB, RL)
+                    => #rlpEncodeLength(         #rlpEncodeInt(RS)
+                                         +String #rlpEncodeInt(RG)
+                                         +String #rlpEncodeString(#unparseByteStack(RB))
+                                         +String #rlpEncodeLogs(RL)
+                                       , 192
+                                       )
+
+    rule #rlpEncodeLogs( LOGS ) => #rlpEncodeLogsAux( LOGS, .StringBuffer )
+
+    rule #rlpEncodeLogsAux( .List, OUT ) => #rlpEncodeLength(StringBuffer2String(OUT),192)
+    rule #rlpEncodeLogsAux( ( ListItem({ ACCT | TOPICS | DATA }) => .List ) _
+                          , ( OUT => OUT +String #rlpEncodeLength(         #rlpEncodeAddress(ACCT)
+                                                                   +String #rlpEncodeTopics(TOPICS,.StringBuffer)
+                                                                   +String #rlpEncodeString(#unparseByteStack(DATA))
+                                                                 , 192
+                                                                 )
+                            )
+                          )
+
+    rule #rlpEncodeTopics( .List, OUT ) => #rlpEncodeLength(StringBuffer2String(OUT),192)
+    rule #rlpEncodeTopics( ( ListItem( X:Int ) => .List ) _
+                         , ( OUT => OUT +String #rlpEncodeWord(X) )
+                         )
+
+    syntax String ::= #rlpEncodeTxData( TxData ) [function]
+ // -------------------------------------------------------
+    rule #rlpEncodeTxData( LegacyTxData( TN, TP, TG, TT, TV, TD ) )
+      => #rlpEncode( [ TN, TP, TG, #addrBytes(TT), TV, TD ] )
+
+    rule #rlpEncodeTxData( LegacyProtectedTxData( TN, TP, TG, TT, TV, TD, CID ) )
+      => #rlpEncode( [ TN, TP, TG, #addrBytes(TT), TV, TD, CID, "", "" ] )
+
+    rule #rlpEncodeTxData( AccessListTxData( TN, TP, TG, TT, TV, TD, CID, [TA] ) )
+      => #rlpEncode( [ CID, TN, TP, TG, #addrBytes(TT), TV, TD, [TA] ] )
+
+    rule #rlpEncodeTxData( DynamicFeeTxData(TN, TPF, TM, TG, TT, TV, DATA, CID, [TA]) )
+      => #rlpEncode( [ CID, TN, TPF, TM, TG, #addrBytes(TT), TV, DATA, [TA] ] )
+
+    syntax String ::= #rlpEncodeMerkleTree ( MerkleTree ) [function]
+ // ----------------------------------------------------------------
+    rule #rlpEncodeMerkleTree ( .MerkleTree ) => "\x80"
+
+    rule #rlpEncodeMerkleTree ( MerkleLeaf ( PATH, VALUE ) )
+      => #rlpEncodeLength(         #rlpEncodeString( #unparseByteStack( #HPEncode( PATH, 1 ) ) )
+                           +String #rlpEncodeString( VALUE )
+                         , 192
+                         )
+
+    rule #rlpEncodeMerkleTree ( MerkleExtension ( PATH, TREE ) )
+      => #rlpEncodeLength(         #rlpEncodeString( #unparseByteStack( #HPEncode( PATH, 0 ) ) )
+                           +String #rlpMerkleH( #rlpEncodeMerkleTree( TREE ) )
+                         , 192
+                         )
+
+    rule #rlpEncodeMerkleTree ( MerkleBranch ( M , VALUE ) )
+      => #rlpEncodeLength(         MerkleMapRLP(M, 0) +String MerkleMapRLP(M, 1)
+                           +String MerkleMapRLP(M, 2) +String MerkleMapRLP(M, 3)
+                           +String MerkleMapRLP(M, 4) +String MerkleMapRLP(M, 5)
+                           +String MerkleMapRLP(M, 6) +String MerkleMapRLP(M, 7)
+                           +String MerkleMapRLP(M, 8) +String MerkleMapRLP(M, 9)
+                           +String MerkleMapRLP(M,10) +String MerkleMapRLP(M,11)
+                           +String MerkleMapRLP(M,12) +String MerkleMapRLP(M,13)
+                           +String MerkleMapRLP(M,14) +String MerkleMapRLP(M,15)
+                           +String #rlpEncodeString( VALUE )
+                         , 192
+                         )
+
+    syntax String ::= MerkleMapRLP( Map, Int ) [function]
+ // -----------------------------------------------------
+    rule MerkleMapRLP(M, I) => #rlpMerkleH( #rlpEncodeMerkleTree( { M[I] orDefault .MerkleTree }:>MerkleTree ) )
+
+    syntax String ::= #rlpMerkleH ( String ) [function,klabel(MerkleRLPAux)]
+ // ------------------------------------------------------------------------
+    rule #rlpMerkleH ( X ) => #rlpEncodeString( Hex2Raw( Keccak256( X ) ) )
+      requires lengthString(X) >=Int 32
+
+    rule #rlpMerkleH ( X ) => X
+      requires notBool lengthString(X) >=Int 32
+
+

Decoding

+
    +
  • #rlpDecode RLP decodes a single String into a JSON.
  • +
  • #rlpDecodeList RLP decodes a single String into a JSONs, interpereting the string as the RLP encoding of a list.
  • +
+
    syntax JSON ::= #rlpDecode(String)               [function]
+                  | #rlpDecode(String, LengthPrefix) [function, klabel(#rlpDecodeAux)]
+ // ----------------------------------------------------------------------------------
+    rule #rlpDecode(STR) => #rlpDecode(STR, #decodeLengthPrefix(STR, 0))
+    rule #rlpDecode(STR,  #str( LEN, POS)) => substrString(STR, POS, POS +Int LEN)
+    rule #rlpDecode(STR, #list(_LEN, POS)) => [#rlpDecodeList(STR, POS)]
+
+    syntax JSONs ::= #rlpDecodeList(String, Int)               [function]
+                   | #rlpDecodeList(String, Int, LengthPrefix) [function, klabel(#rlpDecodeListAux)]
+ // ------------------------------------------------------------------------------------------------
+    rule #rlpDecodeList(STR, POS) => #rlpDecodeList(STR, POS, #decodeLengthPrefix(STR, POS)) requires POS <Int lengthString(STR)
+    rule #rlpDecodeList(  _,   _) => .JSONs [owise]
+    rule #rlpDecodeList(STR, POS, _:LengthPrefixType(L, P)) => #rlpDecode(substrString(STR, POS, L +Int P)) , #rlpDecodeList(STR, L +Int P)
+
+    syntax LengthPrefixType ::= "#str" | "#list"
+    syntax LengthPrefix ::= LengthPrefixType "(" Int "," Int ")"
+                          | #decodeLengthPrefix ( String , Int )                                [function]
+                          | #decodeLengthPrefix ( String , Int , Int )                          [function, klabel(#decodeLengthPrefixAux)]
+                          | #decodeLengthPrefixLength ( LengthPrefixType , String , Int , Int ) [function]
+                          | #decodeLengthPrefixLength ( LengthPrefixType , Int    , Int , Int ) [function, klabel(#decodeLengthPrefixLengthAux)]
+ // --------------------------------------------------------------------------------------------------------------------------------------------
+    rule #decodeLengthPrefix(STR, START) => #decodeLengthPrefix(STR, START, ordChar(substrString(STR, START, START +Int 1)))
+
+    rule #decodeLengthPrefix(  _, START, B0) => #str(1, START)                                   requires B0 <Int 128
+    rule #decodeLengthPrefix(  _, START, B0) => #str(B0 -Int 128, START +Int 1)                  requires B0 >=Int 128 andBool B0 <Int (128 +Int 56)
+    rule #decodeLengthPrefix(STR, START, B0) => #decodeLengthPrefixLength(#str, STR, START, B0)  requires B0 >=Int (128 +Int 56) andBool B0 <Int 192
+    rule #decodeLengthPrefix(  _, START, B0) => #list(B0 -Int 192, START +Int 1)                 requires B0 >=Int 192 andBool B0 <Int 192 +Int 56
+    rule #decodeLengthPrefix(STR, START, B0) => #decodeLengthPrefixLength(#list, STR, START, B0) [owise]
+
+    rule #decodeLengthPrefixLength(#str,  STR, START, B0) => #decodeLengthPrefixLength(#str,  START, B0 -Int 128 -Int 56 +Int 1, #asWord(#parseByteStackRaw(substrString(STR, START +Int 1, START +Int 1 +Int (B0 -Int 128 -Int 56 +Int 1)))))
+    rule #decodeLengthPrefixLength(#list, STR, START, B0) => #decodeLengthPrefixLength(#list, START, B0 -Int 192 -Int 56 +Int 1, #asWord(#parseByteStackRaw(substrString(STR, START +Int 1, START +Int 1 +Int (B0 -Int 192 -Int 56 +Int 1)))))
+    rule #decodeLengthPrefixLength(TYPE, START, LL, L) => TYPE(L, START +Int 1 +Int LL)
+
+    syntax JSONs ::= #rlpDecodeTransaction(Bytes) [function]
+ // --------------------------------------------------------
+    rule #rlpDecodeTransaction(T) => #unparseByteStack(#range(T, 0, 1)), #rlpDecode(#unparseByteStack(#range(T, 1,  lengthBytes(T) -Int 1)))
+
+

Merkle Patricia Tree

+
    +
  • Appendix C and D from the Ethereum Yellow Paper
  • +
  • https://github.com/ethereum/wiki/wiki/Patricia-Tree
  • +
+
    syntax KItem ::= Int | MerkleTree // For testing purposes
+
+    syntax MerkleTree ::= ".MerkleTree"
+                        | MerkleBranch    ( Map, String )
+                        | MerkleExtension ( Bytes, MerkleTree )
+                        | MerkleLeaf      ( Bytes, String )
+ // -------------------------------------------------------
+
+    syntax MerkleTree ::= MerkleUpdate ( MerkleTree, String, String ) [function]
+                        | MerkleUpdate ( MerkleTree,  Bytes, String ) [function,klabel(MerkleUpdateAux)]
+                        | MerklePut    ( MerkleTree,  Bytes, String ) [function]
+                        | MerkleDelete ( MerkleTree,  Bytes )         [function]
+ // ----------------------------------------------------------------------------
+    rule MerkleUpdate ( TREE, S:String, VALUE ) => MerkleUpdate ( TREE, #nibbleize ( #parseByteStackRaw( S ) ), VALUE )
+
+    rule MerkleUpdate ( TREE, PATH:Bytes, VALUE ) => MerklePut ( TREE, PATH, VALUE ) requires VALUE =/=String ""
+    rule MerkleUpdate ( TREE, PATH:Bytes, ""    ) => MerkleDelete ( TREE, PATH )
+
+    rule MerklePut ( .MerkleTree, PATH:Bytes, VALUE ) => MerkleLeaf ( PATH, VALUE )
+
+    rule MerklePut ( MerkleLeaf ( LEAFPATH, _ ), PATH, VALUE )
+      => MerkleLeaf( LEAFPATH, VALUE )
+      requires LEAFPATH ==K PATH
+
+    rule MerklePut ( MerkleLeaf ( LEAFPATH, LEAFVALUE ), PATH, VALUE )
+      => MerklePut ( MerklePut ( MerkleBranch( .Map, "" ), LEAFPATH, LEAFVALUE ), PATH, VALUE )
+      requires lengthBytes( LEAFPATH ) >Int 0
+       andBool lengthBytes( PATH ) >Int 0
+       andBool LEAFPATH[0] =/=Int PATH[0]
+
+    rule MerklePut ( MerkleLeaf ( LEAFPATH, LEAFVALUE ), PATH, VALUE )
+      => #merkleExtensionBuilder( .Bytes, LEAFPATH, LEAFVALUE, PATH, VALUE )
+      requires #unparseByteStack( LEAFPATH ) =/=String #unparseByteStack( PATH )
+       andBool lengthBytes( LEAFPATH ) >Int 0
+       andBool lengthBytes( PATH )     >Int 0
+       andBool LEAFPATH[0] ==Int PATH[0]
+
+    rule MerklePut ( MerkleExtension ( EXTPATH, EXTTREE ), PATH, VALUE )
+      => MerkleExtension ( EXTPATH, MerklePut ( EXTTREE, .Bytes, VALUE ) )
+      requires EXTPATH ==K PATH
+
+    rule MerklePut ( MerkleExtension ( EXTPATH, EXTTREE ), PATH, VALUE )
+      => #merkleExtensionBrancher( MerklePut( MerkleBranch( .Map, "" ), PATH, VALUE ), EXTPATH, EXTTREE )
+      requires lengthBytes( PATH ) >Int 0
+       andBool EXTPATH[0] =/=Int PATH[0]
+
+    rule MerklePut ( MerkleExtension ( EXTPATH, EXTTREE ), PATH, VALUE )
+      => #merkleExtensionSplitter( .Bytes, EXTPATH, EXTTREE, PATH, VALUE )
+      requires #unparseByteStack( EXTPATH ) =/=String #unparseByteStack( PATH )
+       andBool lengthBytes( PATH ) >Int 0
+       andBool EXTPATH[0] ==Int PATH[0]
+
+    rule MerklePut ( MerkleBranch( M, _ ), PATH, VALUE )
+      => MerkleBranch( M, VALUE )
+      requires lengthBytes( PATH ) ==Int 0
+
+    rule MerklePut ( MerkleBranch( M, BRANCHVALUE ), PATH, VALUE )
+      => #merkleUpdateBranch ( M, BRANCHVALUE, PATH[0], #range(PATH, 1, lengthBytes(PATH) -Int 1), VALUE )
+      requires lengthBytes( PATH ) >Int 0
+
+    rule MerkleDelete( .MerkleTree, _ ) => .MerkleTree
+
+    rule MerkleDelete( MerkleLeaf( LPATH, _V ), PATH ) => .MerkleTree                           requires LPATH ==K  PATH
+    rule MerkleDelete( MerkleLeaf( LPATH,  V ), PATH ) => MerkleCheck( MerkleLeaf( LPATH, V ) ) requires LPATH =/=K PATH
+
+    rule MerkleDelete( MerkleExtension( EXTPATH, TREE ), PATH ) => MerkleExtension( EXTPATH, TREE ) requires notBool (lengthBytes(EXTPATH) <=Int lengthBytes(PATH) andBool #range(PATH, 0, lengthBytes(EXTPATH)) ==K EXTPATH)
+    rule MerkleDelete( MerkleExtension( EXTPATH, TREE ), PATH )
+      => MerkleCheck( MerkleExtension( EXTPATH, MerkleDelete( TREE, #range(PATH, lengthBytes(EXTPATH), lengthBytes(PATH) -Int lengthBytes(EXTPATH)) ) ) )
+      requires lengthBytes(EXTPATH) <=Int lengthBytes(PATH) andBool #range(PATH, 0, lengthBytes(EXTPATH)) ==K EXTPATH
+
+    rule MerkleDelete( MerkleBranch( M, _V ), PATH ) => MerkleCheck( MerkleBranch( M, "" ) ) requires lengthBytes(PATH) ==Int 0
+    rule MerkleDelete( MerkleBranch( M,  V ), PATH ) => MerkleBranch( M, V )                 requires lengthBytes(PATH) >Int 0 andBool notBool PATH[0] in_keys(M)
+    rule MerkleDelete( MerkleBranch( M,  V ), PATH )
+      => MerkleCheck( MerkleBranch( M[PATH[0] <- MerkleDelete( {M[PATH[0]]}:>MerkleTree, #range(PATH, 1, lengthBytes(PATH) -Int 1) )], V ) )
+      requires lengthBytes(PATH) >Int 0 andBool PATH[0] in_keys(M)
+
+    syntax MerkleTree ::= MerkleCheck( MerkleTree ) [function]
+ // ----------------------------------------------------------
+    rule MerkleCheck( TREE ) => TREE [owise]
+
+    rule MerkleCheck( MerkleLeaf( _, "" ) => .MerkleTree )
+
+    rule MerkleCheck( MerkleBranch( .Map                   , V  ) => MerkleLeaf( .Bytes, V )                             )
+    rule MerkleCheck( MerkleBranch( X |-> T                , "" ) => MerkleExtension( #range(#asByteStack(X), 0, 1), T ) ) requires T =/=K .MerkleTree
+    rule MerkleCheck( MerkleBranch( M => #cleanBranchMap(M), _  )                                                        ) requires .MerkleTree in values(M)
+
+    rule MerkleCheck( MerkleExtension( _, .MerkleTree                                      ) => .MerkleTree               )
+    rule MerkleCheck( MerkleExtension( P1, MerkleLeaf( P2, V )                             ) => MerkleLeaf( P1 +Bytes P2, V ) )
+    rule MerkleCheck( MerkleExtension( P1 => P1 +Bytes P2, MerkleExtension( P2, TREE ) => TREE )                              )
+
+
    +
  • MerkleUpdateMap Takes a mapping of Bytes |-> String and generates a trie
  • +
+
    syntax MerkleTree ::= MerkleUpdateMap    ( MerkleTree , Map        ) [function]
+                        | MerkleUpdateMapAux ( MerkleTree , Map , List ) [function]
+ // -------------------------------------------------------------------------------
+    rule MerkleUpdateMap(TREE, MMAP) => MerkleUpdateMapAux(TREE, MMAP, keys_list(MMAP))
+
+    rule MerkleUpdateMapAux(TREE, _, .List ) => TREE
+    rule MerkleUpdateMapAux(TREE                                                    , MMAP, ListItem(KEY) REST)
+      => MerkleUpdateMapAux(MerkleUpdate(TREE, #nibbleize(KEY), {MMAP[KEY]}:>String), MMAP,               REST)
+
+

Merkle Tree Aux Functions

+
    syntax Bytes ::= #nibbleize ( Bytes ) [function]
+                   | #byteify   ( Bytes ) [function]
+ // ------------------------------------------------
+    rule #nibbleize ( B ) => (          #range( #asByteStack ( B [ 0 ] /Int 16 ), 0, 1 )
+                               +Bytes ( #range( #asByteStack ( B [ 0 ] %Int 16 ), 0, 1 ) )
+                             ) +Bytes #nibbleize ( #range(B, 1, lengthBytes(B) -Int 1) )
+      requires lengthBytes(B) >Int 0
+
+    rule #nibbleize ( B ) => .Bytes requires notBool lengthBytes(B) >Int 0
+
+    rule #byteify ( B ) =>    #range( #asByteStack ( B[0] *Int 16 +Int B[1] ), 0, 1 )
+                       +Bytes #byteify ( #range( B, 2, lengthBytes(B) -Int 2 ) )
+      requires lengthBytes(B) >Int 0
+
+    rule #byteify ( B ) => .Bytes requires notBool lengthBytes(B) >Int 0
+
+    syntax Bytes ::= #HPEncode ( Bytes, Int ) [function]
+ // ----------------------------------------------------
+    rule #HPEncode ( X, T ) => #asByteStack ( ( HPEncodeAux(T) +Int 1 ) *Int 16 +Int X[0] ) +Bytes #byteify( #range(X, 1, lengthBytes(X) -Int 1) )
+      requires lengthBytes(X) %Int 2 =/=Int 0
+
+    rule #HPEncode ( X, T ) => #range(#asByteStack ( HPEncodeAux(T) *Int 16 ), 0, 1) +Bytes #byteify( X )
+      requires notBool lengthBytes(X) %Int 2 =/=Int 0
+
+    syntax Int ::= HPEncodeAux ( Int ) [function]
+ // ---------------------------------------------
+    rule HPEncodeAux ( X ) => 0 requires         X ==Int 0
+    rule HPEncodeAux ( X ) => 2 requires notBool X ==Int 0
+
+    syntax Map ::= #cleanBranchMap    ( Map )            [function]
+                 | #cleanBranchMapAux ( Map, List, Set ) [function]
+ // ---------------------------------------------------------------
+    rule #cleanBranchMap( M ) => #cleanBranchMapAux( M, keys_list(M), .Set )
+
+    rule #cleanBranchMapAux(                   M,                        .List,                      S ) => removeAll( M, S )
+    rule #cleanBranchMapAux( X |-> .MerkleTree _, (ListItem(X) => .List) _    , (.Set => SetItem(X)) _ )
+    rule #cleanBranchMapAux(                   _, (ListItem(_) => .List) _    ,                      _ ) [owise]
+
+    syntax MerkleTree ::= #merkleUpdateBranch ( Map, String, Int, Bytes, String ) [function]
+ // ----------------------------------------------------------------------------------------
+    rule #merkleUpdateBranch ( X |-> TREE M, BRANCHVALUE, X, PATH, VALUE )
+      => MerkleBranch( M[X <- MerklePut( TREE, PATH, VALUE )], BRANCHVALUE )
+
+    rule #merkleUpdateBranch ( M, BRANCHVALUE, X, PATH, VALUE )
+      => MerkleBranch( M[X <- MerkleLeaf( PATH, VALUE )], BRANCHVALUE ) [owise]
+
+    syntax MerkleTree ::= #merkleExtensionBuilder(    Bytes , Bytes , String , Bytes , String ) [function]
+                        | #merkleExtensionBuilderAux( Bytes , Bytes , String , Bytes , String ) [function]
+ // ------------------------------------------------------------------------------------------------------
+    rule #merkleExtensionBuilder(PATH, P1, V1, P2, V2)
+      => #merkleExtensionBuilderAux(PATH, P1, V1, P2, V2)
+      requires lengthBytes(P1) >Int 0
+       andBool lengthBytes(P2) >Int 0
+
+    rule #merkleExtensionBuilder(PATH, P1, V1, P2, V2)
+      => MerkleExtension( PATH, MerklePut( MerklePut( MerkleBranch( .Map, "" ), P1, V1 ), P2, V2 ) )
+      [owise]
+
+    rule #merkleExtensionBuilderAux( PATH, P1, V1, P2, V2 )
+      => #merkleExtensionBuilder( PATH +Bytes (#range(P1, 0, 1))
+                                , #range(P1, 1, lengthBytes(P1) -Int 1), V1
+                                , #range(P2, 1, lengthBytes(P2) -Int 1), V2
+                                )
+      requires P1[0] ==Int P2[0]
+
+    rule #merkleExtensionBuilderAux( PATH, P1, V1, P2, V2 )
+      => MerkleExtension( PATH, MerklePut( MerklePut( MerkleBranch( .Map, "" ), P1, V1 ), P2, V2 ) )
+      [owise]
+
+    syntax MerkleTree ::= #merkleExtensionBrancher ( MerkleTree, Bytes, MerkleTree ) [function]
+ // -------------------------------------------------------------------------------------------
+    rule #merkleExtensionBrancher( MerkleBranch(M, VALUE), PATH, EXTTREE )
+      => MerkleBranch( M[PATH[0] <- MerkleExtension( #range(PATH, 1, lengthBytes(PATH) -Int 1), EXTTREE )], VALUE )
+      requires lengthBytes(PATH) >Int 1
+
+    rule #merkleExtensionBrancher( MerkleBranch(M, VALUE), PATH, EXTTREE )
+      => MerkleBranch( M[PATH[0] <- EXTTREE], VALUE )
+      requires lengthBytes(PATH) ==Int 1
+
+    syntax MerkleTree ::= #merkleExtensionSplitter ( Bytes, Bytes, MerkleTree, Bytes, String ) [function]
+ // -----------------------------------------------------------------------------------------------------
+    rule #merkleExtensionSplitter( PATH => PATH +Bytes (#range(P1, 0, 1))
+                                 , P1   => #range(P1, 1, lengthBytes(P1) -Int 1), _
+                                 , P2   => #range(P2, 1, lengthBytes(P2) -Int 1), _
+                                 )
+      requires lengthBytes(P1) >Int 0
+       andBool lengthBytes(P2) >Int 0
+       andBool P1[0] ==Int P2[0]
+
+    rule #merkleExtensionSplitter( PATH, P1, TREE, P2, VALUE )
+      => MerkleExtension( PATH, #merkleExtensionBrancher( MerklePut( MerkleBranch( .Map, "" ), P2, VALUE ), P1, TREE ) )
+      requires lengthBytes(P1) >Int 0
+       andBool lengthBytes(P2) >Int 0
+       andBool P1[0] =/=Int P2[0]
+
+    rule #merkleExtensionSplitter( PATH, P1, TREE, P2, VALUE )
+      => MerkleExtension( PATH, MerklePut( TREE, P2, VALUE ) )
+      requires lengthBytes(P1) ==Int 0
+
+    rule #merkleExtensionSplitter( PATH, P1, TREE, P2, VALUE )
+      => MerkleExtension( PATH, #merkleExtensionBrancher( MerklePut( MerkleBranch( .Map, "" ), P2, VALUE ), P1, TREE ) )
+      requires lengthBytes(P2) ==Int 0
+
+

Tree Root Helper Functions

+

Storage Root

+
    syntax Map ::= #intMap2StorageMap( Map )               [function]
+                 | #intMap2StorageMapAux( Map, Map, List ) [function]
+ // -----------------------------------------------------------------
+    rule #intMap2StorageMap( M ) => #intMap2StorageMapAux( .Map, M, keys_list(M) )
+
+    rule #intMap2StorageMapAux( SMAP, _, .List ) => SMAP
+    rule #intMap2StorageMapAux( SMAP, IMAP, ListItem(K) REST )
+      => #intMap2StorageMapAux( #wordBytes(K) |-> #rlpEncodeInt({IMAP[K]}:>Int) SMAP, IMAP, REST )
+      requires {IMAP[K]}:>Int =/=Int 0
+
+    rule #intMap2StorageMapAux( SMAP, IMAP, ListItem(K) REST )
+      => #intMap2StorageMapAux( SMAP, IMAP, REST )
+      requires {IMAP[K]}:>Int ==Int 0
+
+
+    syntax MerkleTree ::= #storageRoot( Map ) [function]
+ // ----------------------------------------------------
+    rule #storageRoot( STORAGE ) => MerkleUpdateMap( .MerkleTree, #intMap2StorageMap( STORAGE ) )
+
+

State Root

+
    syntax Map ::= #precompiledAccountsMap   ( Set )       [function]
+                 | #precompiledAccountsMapAux( List, Map ) [function]
+ // -----------------------------------------------------------------
+    rule #precompiledAccountsMap( ACCTS ) => #precompiledAccountsMapAux( Set2List( ACCTS ), .Map )
+
+    rule #precompiledAccountsMapAux( .List, M ) => M
+    rule #precompiledAccountsMapAux( (ListItem( ACCT ) => .List) _, M => M[#parseByteStackRaw( Hex2Raw( #unparseData( ACCT, 20 ) ) ) <- #emptyContractRLP] )
+
+    syntax String ::= "#emptyContractRLP" [function]
+ // ------------------------------------------------
+    rule #emptyContractRLP => #rlpEncodeLength(         #rlpEncodeInt(0)
+                                                +String #rlpEncodeInt(0)
+                                                +String #rlpEncodeString( Hex2Raw( Keccak256("\x80") ) )
+                                                +String #rlpEncodeString( Hex2Raw( Keccak256("") ) )
+                                              , 192
+                                              )
+endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/state-utils.md b/include/kframework/state-utils.md deleted file mode 100644 index b1be2f7b94..0000000000 --- a/include/kframework/state-utils.md +++ /dev/null @@ -1,455 +0,0 @@ -State Manager -------------- - -```k -requires "evm.md" -requires "asm.md" - -module STATE-UTILS - imports EVM - imports EVM-ASSEMBLY - - syntax JSON ::= Bytes | OpCodes | Map | SubstateLogEntry | Account - // ------------------------------------------------------------------ - -``` - -### Clearing State - -- `clear` clears all the execution state of the machine. -- `clearX` clears the substate `X`, for `TX`, `BLOCK`, and `NETWORK`. - -```k - syntax EthereumCommand ::= "clear" - // ---------------------------------- - rule clear => clearTX ~> clearBLOCK ~> clearNETWORK ... - - syntax EthereumCommand ::= "clearTX" - // ------------------------------------ - rule clearTX => . ... - _ => .Bytes - _ => 0 - _ => 0 - _ => .List - _ => .Bytes - _ => .Set - _ => .Account - _ => .Account - _ => .Bytes - _ => 0 - _ => .WordStack - _ => .Bytes - _ => 0 - _ => 0 - _ => 0 - _ => .Set - _ => .List - _ => 0 - _ => 0 - _ => .Account - _ => .Set - _ => .Set - - syntax EthereumCommand ::= "clearBLOCK" - // --------------------------------------- - rule clearBLOCK => . ... - _ => 0 - _ => 0 - _ => 0 - _ => 0 - _ => 0 - _ => 0 - _ => .Bytes - _ => 0 - _ => 0 - _ => 0 - _ => 0 - _ => 0 - _ => .Bytes - _ => 0 - _ => 0 - _ => [ .JSONs ] - _ => .List - _ => 0 - - syntax EthereumCommand ::= "clearNETWORK" - // ----------------------------------------- - rule clearNETWORK => . ... - _ => .StatusCode - _ => .Bag - _ => .Bag - _ => DEFAULT -``` - -### Loading State - -- `mkAcct_` creates an account with the supplied ID (assuming it's already been chopped to 160 bits). - -```k - syntax EthereumCommand ::= "mkAcct" Int - // --------------------------------------- - rule mkAcct ACCT => #newAccount ACCT ... -``` - -- `load` loads an account or transaction into the world state. - -```k - syntax EthereumCommand ::= "load" JSON - // -------------------------------------- - rule load _DATA : { .JSONs } => . ... - rule load DATA : { KEY : VALUE , REST } => load DATA : { KEY : VALUE } ~> load DATA : { REST } ... - requires REST =/=K .JSONs andBool DATA =/=String "transaction" - - rule load _DATA : [ .JSONs ] => . ... - rule load DATA : [ { TEST } , REST ] => load DATA : { TEST } ~> load DATA : [ REST ] ... -``` - -Here we perform pre-proccesing on account data which allows "pretty" specification of input. - -```k - rule load "pre" : { (ACCTID:String) : ACCT } => mkAcct #parseAddr(ACCTID) ~> loadAccount #parseAddr(ACCTID) ACCT ... - - syntax EthereumCommand ::= "loadAccount" Int JSON - // ------------------------------------------------- - rule loadAccount _ { .JSONs } => . ... - - rule loadAccount ACCT { "balance" : (BAL:Int), REST => REST } ... - ACCT _ => BAL ... - - rule loadAccount ACCT { "code" : (CODE:Bytes), REST => REST } ... - ACCT _ => CODE ... - - rule loadAccount ACCT { "nonce" : (NONCE:Int), REST => REST } ... - ACCT _ => NONCE ... - - rule loadAccount ACCT { "storage" : (STORAGE:Map), REST => REST } ... - ACCT _ => STORAGE _ => STORAGE ... -``` - -Here we load the environmental information. - -```k - rule load "env" : { KEY : ((VAL:String) => #parseWord(VAL)) } ... - requires KEY in (SetItem("currentTimestamp") SetItem("currentGasLimit") SetItem("currentNumber") SetItem("currentDifficulty") SetItem("currentBaseFee")) - rule load "env" : { KEY : ((VAL:String) => #parseHexWord(VAL)) } ... - requires KEY in (SetItem("currentCoinbase") SetItem("previousHash")) - // ---------------------------------------------------------------------- - rule load "env" : { "currentCoinbase" : (CB:Int) } => . ... _ => CB - rule load "env" : { "currentDifficulty" : (DIFF:Int) } => . ... _ => DIFF - rule load "env" : { "currentGasLimit" : (GLIMIT:Int) } => . ... _ => GLIMIT - rule load "env" : { "currentNumber" : (NUM:Int) } => . ... _ => NUM - rule load "env" : { "previousHash" : (HASH:Int) } => . ... _ => HASH - rule load "env" : { "currentTimestamp" : (TS:Int) } => . ... _ => TS - rule load "env" : { "currentBaseFee" : (BF:Int) } => . ... _ => BF - - syntax KItem ::= "loadCallState" JSON - // ------------------------------------- - rule loadCallState { "data" : ( DATA:String => #parseByteStack( DATA ) ), _REST } ... - - rule loadCallState { "code" : CODE:Bytes, REST } => #loadProgram CODE ~> loadCallState { REST } ... - - rule loadCallState { "gas" : GLIMIT:Int, REST => REST } ... _ => GLIMIT - rule loadCallState { "gasPrice" : GPRICE:Int, REST => REST } ... _ => GPRICE - rule loadCallState { "value" : VALUE:Int , REST => REST } ... _ => VALUE - rule loadCallState { "data" : DATA:Bytes, REST => REST } ... _ => DATA - - rule loadCallState { .JSONs } => . ... -``` - -The `"network"` key allows setting the fee schedule inside the test. - -```k - rule load "network" : SCHEDSTRING => . ... - _ => #asScheduleString(SCHEDSTRING) - - syntax Schedule ::= #asScheduleString ( String ) [function] - // ----------------------------------------------------------- - rule #asScheduleString("Frontier") => FRONTIER - rule #asScheduleString("Homestead") => HOMESTEAD - rule #asScheduleString("EIP150") => TANGERINE_WHISTLE - rule #asScheduleString("EIP158") => SPURIOUS_DRAGON - rule #asScheduleString("Byzantium") => BYZANTIUM - rule #asScheduleString("Constantinople") => CONSTANTINOPLE - rule #asScheduleString("ConstantinopleFix") => PETERSBURG - rule #asScheduleString("Istanbul") => ISTANBUL - rule #asScheduleString("Berlin") => BERLIN - rule #asScheduleString("London") => LONDON - rule #asScheduleString("Merge") => MERGE -``` - -The `"rlp"` key loads the block information. - -```k - rule load "rlp" : (VAL:String => #rlpDecode(#unparseByteStack(#parseByteStack(VAL)))) ... - rule load "genesisRLP" : (VAL:String => #rlpDecode(#unparseByteStack(#parseByteStack(VAL)))) ... - // --------------------------------------------------------------------------------------------------------- - rule load "rlp" : [ [ HP , HO , HC , HR , HT , HE , HB , HD , HI , HL , HG , HS , HX , HM , HN , .JSONs ] , BT , BU , .JSONs ] - => load "transaction" : BT - ... - - _ => #asWord(#parseByteStackRaw(HP)) - _ => #asWord(#parseByteStackRaw(HO)) - _ => #asWord(#parseByteStackRaw(HC)) - _ => #asWord(#parseByteStackRaw(HR)) - _ => #asWord(#parseByteStackRaw(HT)) - _ => #asWord(#parseByteStackRaw(HE)) - _ => #parseByteStackRaw(HB) - _ => #asWord(#parseByteStackRaw(HD)) - _ => #asWord(#parseByteStackRaw(HI)) - _ => #asWord(#parseByteStackRaw(HL)) - _ => #asWord(#parseByteStackRaw(HG)) - _ => #asWord(#parseByteStackRaw(HS)) - _ => #parseByteStackRaw(HX) - _ => #asWord(#parseByteStackRaw(HM)) - _ => #asWord(#parseByteStackRaw(HN)) - _ => BU - - rule load "rlp" : [ [ HP , HO , HC , HR , HT , HE , HB , HD , HI , HL , HG , HS , HX , HM , HN , HF , .JSONs ] , BT , BU , .JSONs ] - => load "transaction" : BT - ... - - _ => #asWord(#parseByteStackRaw(HP)) - _ => #asWord(#parseByteStackRaw(HO)) - _ => #asWord(#parseByteStackRaw(HC)) - _ => #asWord(#parseByteStackRaw(HR)) - _ => #asWord(#parseByteStackRaw(HT)) - _ => #asWord(#parseByteStackRaw(HE)) - _ => #parseByteStackRaw(HB) - _ => #asWord(#parseByteStackRaw(HD)) - _ => #asWord(#parseByteStackRaw(HI)) - _ => #asWord(#parseByteStackRaw(HL)) - _ => #asWord(#parseByteStackRaw(HG)) - _ => #asWord(#parseByteStackRaw(HS)) - _ => #parseByteStackRaw(HX) - _ => #asWord(#parseByteStackRaw(HM)) - _ => #asWord(#parseByteStackRaw(HN)) - _ => #asWord(#parseByteStackRaw(HF)) - _ => BU - - rule load "genesisRLP": [ [ HP, HO, HC, HR, HT, HE:String, HB, HD, HI, HL, HG, HS, HX, HM, HN, .JSONs ], _, _, .JSONs ] => .K ... - .List => ListItem(#blockHeaderHash(HP, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN)) ListItem(#asWord(#parseByteStackRaw(HP))) ... - - rule load "genesisRLP": [ [ HP, HO, HC, HR, HT, HE:String, HB, HD, HI, HL, HG, HS, HX, HM, HN, HF, .JSONs ], _, _, .JSONs ] => .K ... - .List => ListItem(#blockHeaderHash(HP, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN, HF)) ListItem(#asWord(#parseByteStackRaw(HP))) ... - - syntax EthereumCommand ::= "mkTX" Int - // ------------------------------------- - rule mkTX TXID => . ... - CID - ... (.List => ListItem(TXID)) - ... (.List => ListItem(TXID)) - - ( .Bag - => - TXID:Int - 20000000000 - 90000 - CID - ... - - ) - ... - - - rule load "transaction" : [ (T => [#rlpDecodeTransaction(#parseByteStackRaw(T))]) , _ ] ... - - rule load "transaction" : [ [ TN , TP , TG , TT , TV , TI , TW , TR , TS ] , REST ] - => mkTX !ID:Int - ~> loadTransaction !ID { "data" : TI , "gasLimit" : TG , "gasPrice" : TP - , "nonce" : TN , "r" : TR , "s" : TS - , "to" : TT , "v" : TW , "value" : TV - , "type" : #dasmTxPrefix(Legacy) , "maxPriorityFeePerGas" : TP - , "maxFeePerGas": TP , .JSONs - } - ~> load "transaction" : [ REST ] - ... - - - rule load "transaction" : [ [TYPE , [TC, TN, TP, TG, TT, TV, TI, TA, TY , TR, TS ]] , REST ] - => mkTX !ID:Int - ~> loadTransaction !ID { "data" : TI , "gasLimit" : TG , "gasPrice" : TP - , "nonce" : TN , "r" : TR , "s" : TS - , "to" : TT , "v" : TY , "value" : TV - , "accessList" : TA , "type" : TYPE , "chainID" : TC - , "maxPriorityFeePerGas" : TP , "maxFeePerGas": TP - , .JSONs - } - ~> load "transaction" : [ REST ] - ... - - requires #asWord(#parseByteStackRaw(TYPE)) ==Int #dasmTxPrefix(AccessList) - - - rule load "transaction" : [ [TYPE , [TC, TN, TP, TF, TG, TT, TV, TI, TA, TY , TR, TS ]] , REST ] - => mkTX !ID:Int - ~> loadTransaction !ID { "data" : TI , "gasLimit" : TG , "maxPriorityFeePerGas" : TP - , "nonce" : TN , "r" : TR , "s" : TS - , "to" : TT , "v" : TY , "value" : TV - , "accessList" : TA , "type" : TYPE , "chainID" : TC - , "maxFeePerGas" : TF , .JSONs - } - ~> load "transaction" : [ REST ] - ... - - requires #asWord(#parseByteStackRaw(TYPE)) ==Int #dasmTxPrefix(DynamicFee) - - syntax EthereumCommand ::= "loadTransaction" Int JSON - // ----------------------------------------------------- - rule loadTransaction _ { .JSONs } => . ... - - rule loadTransaction TXID { GLIMIT : TG:Int, REST => REST } ... - TXID _ => TG ... - requires GLIMIT in (SetItem("gas") SetItem("gasLimit")) - - rule loadTransaction TXID { "gasPrice" : TP:Int, REST => REST } ... - TXID _ => TP ... - - rule loadTransaction TXID { "nonce" : TN:Int, REST => REST } ... - TXID _ => TN ... - - rule loadTransaction TXID { "value" : TV:Int, REST => REST } ... - TXID _ => TV ... - - rule loadTransaction TXID { "to" : TT:Account, REST => REST } ... - TXID _ => TT ... - - rule loadTransaction TXID { "data" : TI:Bytes, REST => REST } ... - TXID _ => TI ... - - rule loadTransaction TXID { "v" : TW:Int, REST => REST } ... - TXID _ => TW ... - - rule loadTransaction TXID { "r" : TR:Bytes, REST => REST } ... - TXID _ => TR ... - - rule loadTransaction TXID { "s" : TS:Bytes, REST => REST } ... - TXID _ => TS ... - - rule loadTransaction TXID { "type" : T:Int, REST => REST } ... - TXID _ => #asmTxPrefix(T) ... - - rule loadTransaction TXID { "chainID" : TC:Int, REST => REST } ... - TXID _ => TC ... - - rule loadTransaction TXID { "accessList" : [TA:JSONs], REST => REST } ... - TXID _ => [TA] ... - - rule loadTransaction TXID { "maxPriorityFeePerGas" : TP:Int, REST => REST } ... - TXID _ => TP ... - - rule loadTransaction TXID { "maxFeePerGas" : TF:Int, REST => REST } ... - TXID _ => TF ... -``` - -### Getting State - -- `#getTxData` will pull the parameters of TXID into an appropriate `TxData` symbol -- `#effectiveGasPrice` will compute the gas price for TXID, as specified by EIP-1559 - -```k - syntax TxData ::= #getTxData( Int ) [function] - // ---------------------------------------------- - rule [[ #getTxData( TXID ) => LegacyTxData(TN, TP, TG, TT, TV, DATA) ]] - - TXID - TN - TP - TG - TT - TV - TW - DATA - Legacy - ... - - requires TW ==Int 0 orBool TW ==Int 1 orBool TW ==Int 27 orBool TW ==Int 28 - - rule [[ #getTxData( TXID ) => LegacyProtectedTxData(TN, TP, TG, TT, TV, DATA, CID) ]] - - TXID - TN - TP - TG - TT - TV - TW - DATA - CID - Legacy - ... - - requires notBool (TW ==Int 0 orBool TW ==Int 1 orBool TW ==Int 27 orBool TW ==Int 28) - - rule [[ #getTxData( TXID ) => AccessListTxData(TN, TP, TG, TT, TV, DATA, CID, TA) ]] - - TXID - TN - TP - TG - TT - TV - DATA - CID - TA - AccessList - ... - - - rule [[ #getTxData( TXID ) => DynamicFeeTxData(TN, TPF, TM, TG, TT, TV, DATA, CID, TA) ]] - - TXID - TN - TG - TT - TV - DATA - CID - TA - TPF - TM - DynamicFee - ... - - - syntax Int ::= #effectiveGasPrice( Int ) [function] - // --------------------------------------------------- - rule [[ #effectiveGasPrice( TXID ) - => #if ( notBool Ghasbasefee << SCHED >> ) - orBool TXTYPE ==K Legacy - orBool TXTYPE ==K AccessList - #then GPRICE - #else BFEE +Int minInt(TPF, TM -Int BFEE) - #fi - ]] - SCHED - BFEE - - TXID - GPRICE - TXTYPE - TPF - TM - ... - -``` - -### Block Identifiers - -```k - syntax BlockIdentifier ::= Int - | "LATEST" - | "PENDING" - | "EARLIEST" - // ------------------------------------- - - syntax BlockIdentifier ::= #parseBlockIdentifier ( JSON ) [function] - // -------------------------------------------------------------------- - rule #parseBlockIdentifier(BLOCKNUM:Int) => BLOCKNUM - rule #parseBlockIdentifier("pending") => PENDING - rule #parseBlockIdentifier("latest") => LATEST - rule #parseBlockIdentifier("earliest") => EARLIEST - rule #parseBlockIdentifier(BLOCKNUM) => #parseWord(BLOCKNUM) [owise] -``` -```k -endmodule -``` diff --git a/include/kframework/state-utils/index.html b/include/kframework/state-utils/index.html new file mode 100644 index 0000000000..4b1135eec4 --- /dev/null +++ b/include/kframework/state-utils/index.html @@ -0,0 +1,648 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

State Manager

+
requires "evm.md"
+requires "asm.md"
+
+module STATE-UTILS
+    imports EVM
+    imports EVM-ASSEMBLY
+
+    syntax JSON ::= Bytes | OpCodes | Map | SubstateLogEntry | Account
+ // ------------------------------------------------------------------
+
+
+

Clearing State

+
    +
  • clear clears all the execution state of the machine.
  • +
  • clearX clears the substate X, for TX, BLOCK, and NETWORK.
  • +
+
    syntax EthereumCommand ::= "clear"
+ // ----------------------------------
+    rule <k> clear => clearTX ~> clearBLOCK ~> clearNETWORK ... </k>
+
+    syntax EthereumCommand ::= "clearTX"
+ // ------------------------------------
+    rule <k> clearTX => . ... </k>
+         <output>           _ => .Bytes     </output>
+         <memoryUsed>       _ => 0          </memoryUsed>
+         <callDepth>        _ => 0          </callDepth>
+         <callStack>        _ => .List      </callStack>
+         <program>          _ => .Bytes     </program>
+         <jumpDests>        _ => .Set       </jumpDests>
+         <id>               _ => .Account   </id>
+         <caller>           _ => .Account   </caller>
+         <callData>         _ => .Bytes     </callData>
+         <callValue>        _ => 0          </callValue>
+         <wordStack>        _ => .WordStack </wordStack>
+         <localMem>         _ => .Bytes     </localMem>
+         <pc>               _ => 0          </pc>
+         <gas>              _ => 0          </gas>
+         <callGas>          _ => 0          </callGas>
+         <selfDestruct>     _ => .Set       </selfDestruct>
+         <log>              _ => .List      </log>
+         <refund>           _ => 0          </refund>
+         <gasPrice>         _ => 0          </gasPrice>
+         <origin>           _ => .Account   </origin>
+         <touchedAccounts>  _ => .Set       </touchedAccounts>
+         <accessedAccounts> _ => .Set       </accessedAccounts>
+
+    syntax EthereumCommand ::= "clearBLOCK"
+ // ---------------------------------------
+    rule <k> clearBLOCK => . ... </k>
+         <previousHash>      _ => 0          </previousHash>
+         <ommersHash>        _ => 0          </ommersHash>
+         <coinbase>          _ => 0          </coinbase>
+         <stateRoot>         _ => 0          </stateRoot>
+         <transactionsRoot>  _ => 0          </transactionsRoot>
+         <receiptsRoot>      _ => 0          </receiptsRoot>
+         <logsBloom>         _ => .Bytes     </logsBloom>
+         <difficulty>        _ => 0          </difficulty>
+         <number>            _ => 0          </number>
+         <gasLimit>          _ => 0          </gasLimit>
+         <gasUsed>           _ => 0          </gasUsed>
+         <timestamp>         _ => 0          </timestamp>
+         <extraData>         _ => .Bytes     </extraData>
+         <mixHash>           _ => 0          </mixHash>
+         <blockNonce>        _ => 0          </blockNonce>
+         <ommerBlockHeaders> _ => [ .JSONs ] </ommerBlockHeaders>
+         <blockhashes>       _ => .List      </blockhashes>
+         <baseFee>           _ => 0          </baseFee>
+
+    syntax EthereumCommand ::= "clearNETWORK"
+ // -----------------------------------------
+    rule <k> clearNETWORK => . ... </k>
+         <statusCode>     _ => .StatusCode </statusCode>
+         <accounts>       _ => .Bag        </accounts>
+         <messages>       _ => .Bag        </messages>
+         <schedule>       _ => DEFAULT     </schedule>
+
+

Loading State

+
    +
  • mkAcct_ creates an account with the supplied ID (assuming it's already been chopped to 160 bits).
  • +
+
    syntax EthereumCommand ::= "mkAcct" Int
+ // ---------------------------------------
+    rule <k> mkAcct ACCT => #newAccount ACCT ... </k>
+
+
    +
  • load loads an account or transaction into the world state.
  • +
+
    syntax EthereumCommand ::= "load" JSON
+ // --------------------------------------
+    rule <k> load _DATA : { .JSONs }             => .                                                   ... </k>
+    rule <k> load  DATA : { KEY : VALUE , REST } => load DATA : { KEY : VALUE } ~> load DATA : { REST } ... </k>
+      requires REST =/=K .JSONs andBool DATA =/=String "transaction"
+
+    rule <k> load _DATA : [ .JSONs ]          => .                                            ... </k>
+    rule <k> load  DATA : [ { TEST } , REST ] => load DATA : { TEST } ~> load DATA : [ REST ] ... </k>
+
+

Here we perform pre-proccesing on account data which allows "pretty" specification of input.

+
    rule <k> load "pre" : { (ACCTID:String) : ACCT } => mkAcct #parseAddr(ACCTID) ~> loadAccount #parseAddr(ACCTID) ACCT ... </k>
+
+    syntax EthereumCommand ::= "loadAccount" Int JSON
+ // -------------------------------------------------
+    rule <k> loadAccount _ { .JSONs } => . ... </k>
+
+    rule <k> loadAccount ACCT { "balance" : (BAL:Int), REST => REST } ... </k>
+         <account> <acctID> ACCT </acctID> <balance> _ => BAL </balance> ... </account>
+
+    rule <k> loadAccount ACCT { "code" : (CODE:Bytes), REST => REST } ... </k>
+         <account> <acctID> ACCT </acctID> <code> _ => CODE </code> ... </account>
+
+    rule <k> loadAccount ACCT { "nonce" : (NONCE:Int), REST => REST } ... </k>
+         <account> <acctID> ACCT </acctID> <nonce> _ => NONCE </nonce> ... </account>
+
+    rule <k> loadAccount ACCT { "storage" : (STORAGE:Map), REST => REST } ... </k>
+         <account> <acctID> ACCT </acctID> <origStorage> _ => STORAGE </origStorage> <storage> _ => STORAGE </storage> ... </account>
+
+

Here we load the environmental information.

+
    rule <k> load "env" : { KEY : ((VAL:String) => #parseWord(VAL)) } ... </k>
+      requires KEY in (SetItem("currentTimestamp") SetItem("currentGasLimit") SetItem("currentNumber") SetItem("currentDifficulty") SetItem("currentBaseFee"))
+    rule <k> load "env" : { KEY : ((VAL:String) => #parseHexWord(VAL)) } ... </k>
+      requires KEY in (SetItem("currentCoinbase") SetItem("previousHash"))
+ // ----------------------------------------------------------------------
+    rule <k> load "env" : { "currentCoinbase"   : (CB:Int)     } => . ... </k> <coinbase>     _ => CB     </coinbase>
+    rule <k> load "env" : { "currentDifficulty" : (DIFF:Int)   } => . ... </k> <difficulty>   _ => DIFF   </difficulty>
+    rule <k> load "env" : { "currentGasLimit"   : (GLIMIT:Int) } => . ... </k> <gasLimit>     _ => GLIMIT </gasLimit>
+    rule <k> load "env" : { "currentNumber"     : (NUM:Int)    } => . ... </k> <number>       _ => NUM    </number>
+    rule <k> load "env" : { "previousHash"      : (HASH:Int)   } => . ... </k> <previousHash> _ => HASH   </previousHash>
+    rule <k> load "env" : { "currentTimestamp"  : (TS:Int)     } => . ... </k> <timestamp>    _ => TS     </timestamp>
+    rule <k> load "env" : { "currentBaseFee"    : (BF:Int)     } => . ... </k> <baseFee>      _ => BF     </baseFee>
+
+    syntax KItem ::= "loadCallState" JSON
+ // -------------------------------------
+    rule <k> loadCallState { "data" : ( DATA:String => #parseByteStack( DATA ) ), _REST } ... </k>
+
+    rule <k> loadCallState { "code" : CODE:Bytes, REST } => #loadProgram CODE ~> loadCallState { REST } ... </k>
+
+    rule <k> loadCallState { "gas"      : GLIMIT:Int, REST => REST } ... </k> <gas>       _ => GLIMIT </gas>
+    rule <k> loadCallState { "gasPrice" : GPRICE:Int, REST => REST } ... </k> <gasPrice>  _ => GPRICE </gasPrice>
+    rule <k> loadCallState { "value"    : VALUE:Int , REST => REST } ... </k> <callValue> _ => VALUE  </callValue>
+    rule <k> loadCallState { "data"     : DATA:Bytes, REST => REST } ... </k> <callData>  _ => DATA   </callData>
+
+    rule <k> loadCallState { .JSONs } => . ... </k>
+
+

The "network" key allows setting the fee schedule inside the test.

+
    rule <k> load "network" : SCHEDSTRING => . ... </k>
+         <schedule> _ => #asScheduleString(SCHEDSTRING) </schedule>
+
+    syntax Schedule ::= #asScheduleString ( String ) [function]
+ // -----------------------------------------------------------
+    rule #asScheduleString("Frontier")          => FRONTIER
+    rule #asScheduleString("Homestead")         => HOMESTEAD
+    rule #asScheduleString("EIP150")            => TANGERINE_WHISTLE
+    rule #asScheduleString("EIP158")            => SPURIOUS_DRAGON
+    rule #asScheduleString("Byzantium")         => BYZANTIUM
+    rule #asScheduleString("Constantinople")    => CONSTANTINOPLE
+    rule #asScheduleString("ConstantinopleFix") => PETERSBURG
+    rule #asScheduleString("Istanbul")          => ISTANBUL
+    rule #asScheduleString("Berlin")            => BERLIN
+    rule #asScheduleString("London")            => LONDON
+    rule #asScheduleString("Merge")             => MERGE
+
+

The "rlp" key loads the block information.

+
    rule <k> load "rlp"        : (VAL:String => #rlpDecode(#unparseByteStack(#parseByteStack(VAL)))) ... </k>
+    rule <k> load "genesisRLP" : (VAL:String => #rlpDecode(#unparseByteStack(#parseByteStack(VAL)))) ... </k>
+ // ---------------------------------------------------------------------------------------------------------
+    rule <k> load "rlp" : [ [ HP , HO , HC , HR , HT , HE , HB , HD , HI , HL , HG , HS , HX , HM , HN , .JSONs ] , BT , BU , .JSONs ]
+          => load "transaction" : BT
+         ...
+         </k>
+         <previousHash>      _ => #asWord(#parseByteStackRaw(HP)) </previousHash>
+         <ommersHash>        _ => #asWord(#parseByteStackRaw(HO)) </ommersHash>
+         <coinbase>          _ => #asWord(#parseByteStackRaw(HC)) </coinbase>
+         <stateRoot>         _ => #asWord(#parseByteStackRaw(HR)) </stateRoot>
+         <transactionsRoot>  _ => #asWord(#parseByteStackRaw(HT)) </transactionsRoot>
+         <receiptsRoot>      _ => #asWord(#parseByteStackRaw(HE)) </receiptsRoot>
+         <logsBloom>         _ => #parseByteStackRaw(HB)          </logsBloom>
+         <difficulty>        _ => #asWord(#parseByteStackRaw(HD)) </difficulty>
+         <number>            _ => #asWord(#parseByteStackRaw(HI)) </number>
+         <gasLimit>          _ => #asWord(#parseByteStackRaw(HL)) </gasLimit>
+         <gasUsed>           _ => #asWord(#parseByteStackRaw(HG)) </gasUsed>
+         <timestamp>         _ => #asWord(#parseByteStackRaw(HS)) </timestamp>
+         <extraData>         _ => #parseByteStackRaw(HX)          </extraData>
+         <mixHash>           _ => #asWord(#parseByteStackRaw(HM)) </mixHash>
+         <blockNonce>        _ => #asWord(#parseByteStackRaw(HN)) </blockNonce>
+         <ommerBlockHeaders> _ => BU                              </ommerBlockHeaders>
+
+    rule <k> load "rlp" : [ [ HP , HO , HC , HR , HT , HE , HB , HD , HI , HL , HG , HS , HX , HM , HN , HF , .JSONs ] , BT , BU , .JSONs ]
+          => load "transaction" : BT
+         ...
+         </k>
+         <previousHash>      _ => #asWord(#parseByteStackRaw(HP)) </previousHash>
+         <ommersHash>        _ => #asWord(#parseByteStackRaw(HO)) </ommersHash>
+         <coinbase>          _ => #asWord(#parseByteStackRaw(HC)) </coinbase>
+         <stateRoot>         _ => #asWord(#parseByteStackRaw(HR)) </stateRoot>
+         <transactionsRoot>  _ => #asWord(#parseByteStackRaw(HT)) </transactionsRoot>
+         <receiptsRoot>      _ => #asWord(#parseByteStackRaw(HE)) </receiptsRoot>
+         <logsBloom>         _ => #parseByteStackRaw(HB)          </logsBloom>
+         <difficulty>        _ => #asWord(#parseByteStackRaw(HD)) </difficulty>
+         <number>            _ => #asWord(#parseByteStackRaw(HI)) </number>
+         <gasLimit>          _ => #asWord(#parseByteStackRaw(HL)) </gasLimit>
+         <gasUsed>           _ => #asWord(#parseByteStackRaw(HG)) </gasUsed>
+         <timestamp>         _ => #asWord(#parseByteStackRaw(HS)) </timestamp>
+         <extraData>         _ => #parseByteStackRaw(HX)          </extraData>
+         <mixHash>           _ => #asWord(#parseByteStackRaw(HM)) </mixHash>
+         <blockNonce>        _ => #asWord(#parseByteStackRaw(HN)) </blockNonce>
+         <baseFee>           _ => #asWord(#parseByteStackRaw(HF)) </baseFee>
+         <ommerBlockHeaders> _ => BU                              </ommerBlockHeaders>
+
+    rule <k> load "genesisRLP": [ [ HP, HO, HC, HR, HT, HE:String, HB, HD, HI, HL, HG, HS, HX, HM, HN, .JSONs ], _, _, .JSONs ] => .K ... </k>
+         <blockhashes> .List => ListItem(#blockHeaderHash(HP, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN)) ListItem(#asWord(#parseByteStackRaw(HP))) ... </blockhashes>
+
+    rule <k> load "genesisRLP": [ [ HP, HO, HC, HR, HT, HE:String, HB, HD, HI, HL, HG, HS, HX, HM, HN, HF, .JSONs ], _, _, .JSONs ] => .K ... </k>
+         <blockhashes> .List => ListItem(#blockHeaderHash(HP, HO, HC, HR, HT, HE, HB, HD, HI, HL, HG, HS, HX, HM, HN, HF)) ListItem(#asWord(#parseByteStackRaw(HP))) ... </blockhashes>
+
+    syntax EthereumCommand ::= "mkTX" Int
+ // -------------------------------------
+    rule <k> mkTX TXID => . ... </k>
+         <chainID> CID </chainID>
+         <txOrder>   ... (.List => ListItem(TXID)) </txOrder>
+         <txPending> ... (.List => ListItem(TXID)) </txPending>
+         <messages>
+            ( .Bag
+           => <message>
+                <msgID>      TXID:Int </msgID>
+                <txGasPrice> 20000000000   </txGasPrice>
+                <txGasLimit> 90000         </txGasLimit>
+                <txChainID>  CID           </txChainID>
+                ...
+              </message>
+            )
+          ...
+          </messages>
+
+    rule <k> load "transaction" : [ (T => [#rlpDecodeTransaction(#parseByteStackRaw(T))]) , _ ] ... </k>
+
+    rule <k> load "transaction" : [ [ TN , TP , TG , TT , TV , TI , TW , TR , TS ] , REST ]
+          => mkTX !ID:Int
+          ~> loadTransaction !ID { "data"  : TI   ,   "gasLimit" : TG   ,   "gasPrice"             : TP
+                                 , "nonce" : TN   ,   "r"        : TR   ,   "s"                    : TS
+                                 , "to"    : TT   ,   "v"        : TW   ,   "value"                : TV
+                                 , "type"  : #dasmTxPrefix(Legacy)      ,   "maxPriorityFeePerGas" : TP
+                                 , "maxFeePerGas": TP                   , .JSONs
+                                 }
+          ~> load "transaction" : [ REST ]
+          ...
+          </k>
+
+    rule <k> load "transaction" : [ [TYPE , [TC, TN, TP, TG, TT, TV, TI, TA, TY , TR, TS ]] , REST ]
+          => mkTX !ID:Int
+          ~> loadTransaction !ID { "data"       : TI   ,   "gasLimit" : TG   ,   "gasPrice"  : TP
+                                 , "nonce"      : TN   ,   "r"        : TR   ,   "s"         : TS
+                                 , "to"         : TT   ,   "v"        : TY   ,   "value"     : TV
+                                 , "accessList" : TA   ,   "type"     : TYPE ,   "chainID"   : TC
+                                 , "maxPriorityFeePerGas" : TP               , "maxFeePerGas": TP
+                                 , .JSONs
+                                 }
+          ~> load "transaction" : [ REST ]
+          ...
+         </k>
+    requires #asWord(#parseByteStackRaw(TYPE)) ==Int #dasmTxPrefix(AccessList)
+
+
+    rule <k> load "transaction" : [ [TYPE , [TC, TN, TP, TF, TG, TT, TV, TI, TA, TY , TR, TS ]] , REST ]
+          => mkTX !ID:Int
+          ~> loadTransaction !ID { "data"         : TI   ,   "gasLimit" : TG   ,   "maxPriorityFeePerGas" : TP
+                                 , "nonce"        : TN   ,   "r"        : TR   ,   "s"                    : TS
+                                 , "to"           : TT   ,   "v"        : TY   ,   "value"                : TV
+                                 , "accessList"   : TA   ,   "type"     : TYPE ,   "chainID"              : TC
+                                 , "maxFeePerGas" : TF   , .JSONs
+                                 }
+          ~> load "transaction" : [ REST ]
+          ...
+         </k>
+    requires #asWord(#parseByteStackRaw(TYPE)) ==Int #dasmTxPrefix(DynamicFee)
+
+    syntax EthereumCommand ::= "loadTransaction" Int JSON
+ // -----------------------------------------------------
+    rule <k> loadTransaction _ { .JSONs } => . ... </k>
+
+    rule <k> loadTransaction TXID { GLIMIT : TG:Int, REST => REST } ... </k>
+         <message> <msgID> TXID </msgID> <txGasLimit> _ => TG </txGasLimit> ... </message>
+      requires GLIMIT in (SetItem("gas") SetItem("gasLimit"))
+
+    rule <k> loadTransaction TXID { "gasPrice" : TP:Int, REST => REST } ... </k>
+         <message> <msgID> TXID </msgID> <txGasPrice> _ => TP </txGasPrice> ... </message>
+
+    rule <k> loadTransaction TXID { "nonce" : TN:Int, REST => REST } ... </k>
+         <message> <msgID> TXID </msgID> <txNonce> _ => TN </txNonce> ... </message>
+
+    rule <k> loadTransaction TXID { "value" : TV:Int, REST => REST } ... </k>
+         <message> <msgID> TXID </msgID> <value> _ => TV </value> ... </message>
+
+    rule <k> loadTransaction TXID { "to" : TT:Account, REST => REST } ... </k>
+         <message> <msgID> TXID </msgID> <to> _ => TT </to> ... </message>
+
+    rule <k> loadTransaction TXID { "data" : TI:Bytes, REST => REST } ... </k>
+         <message> <msgID> TXID </msgID> <data> _ => TI </data> ... </message>
+
+    rule <k> loadTransaction TXID { "v" : TW:Int, REST => REST } ... </k>
+         <message> <msgID> TXID </msgID> <sigV> _ => TW </sigV> ... </message>
+
+    rule <k> loadTransaction TXID { "r" : TR:Bytes, REST => REST } ... </k>
+         <message> <msgID> TXID </msgID> <sigR> _ => TR </sigR> ... </message>
+
+    rule <k> loadTransaction TXID { "s" : TS:Bytes, REST => REST } ... </k>
+         <message> <msgID> TXID </msgID> <sigS> _ => TS </sigS> ... </message>
+
+    rule <k> loadTransaction TXID { "type" : T:Int, REST => REST } ... </k>
+         <message> <msgID> TXID </msgID> <txType> _ => #asmTxPrefix(T) </txType> ... </message>
+
+    rule <k> loadTransaction TXID { "chainID" : TC:Int, REST => REST } ... </k>
+         <message> <msgID> TXID </msgID> <txChainID> _ => TC </txChainID> ... </message>
+
+    rule <k> loadTransaction TXID { "accessList" : [TA:JSONs], REST => REST } ... </k>
+         <message> <msgID> TXID </msgID> <txAccess> _ => [TA] </txAccess> ... </message>
+
+    rule <k> loadTransaction TXID { "maxPriorityFeePerGas" : TP:Int, REST => REST } ... </k>
+         <message> <msgID> TXID </msgID> <txPriorityFee> _ => TP </txPriorityFee> ... </message>
+
+    rule <k> loadTransaction TXID { "maxFeePerGas" : TF:Int, REST => REST } ... </k>
+         <message> <msgID> TXID </msgID> <txMaxFee> _ => TF </txMaxFee> ... </message>
+
+

Getting State

+
    +
  • #getTxData will pull the parameters of TXID into an appropriate TxData symbol
  • +
  • #effectiveGasPrice will compute the gas price for TXID, as specified by EIP-1559
  • +
+
    syntax TxData ::= #getTxData( Int ) [function]
+ // ----------------------------------------------
+    rule [[ #getTxData( TXID ) => LegacyTxData(TN, TP, TG, TT, TV, DATA) ]]
+         <message>
+           <msgID>      TXID </msgID>
+           <txNonce>    TN   </txNonce>
+           <txGasPrice> TP   </txGasPrice>
+           <txGasLimit> TG   </txGasLimit>
+           <to>         TT   </to>
+           <value>      TV   </value>
+           <sigV>       TW   </sigV>
+           <data>       DATA </data>
+           <txType> Legacy </txType>
+           ...
+         </message>
+      requires TW ==Int 0 orBool TW ==Int 1 orBool TW ==Int 27 orBool TW ==Int 28
+
+    rule [[ #getTxData( TXID ) => LegacyProtectedTxData(TN, TP, TG, TT, TV, DATA, CID) ]]
+         <message>
+           <msgID>      TXID </msgID>
+           <txNonce>    TN   </txNonce>
+           <txGasPrice> TP   </txGasPrice>
+           <txGasLimit> TG   </txGasLimit>
+           <to>         TT   </to>
+           <value>      TV   </value>
+           <sigV>       TW   </sigV>
+           <data>       DATA </data>
+           <txChainID>  CID  </txChainID>
+           <txType> Legacy </txType>
+           ...
+         </message>
+      requires notBool (TW ==Int 0 orBool TW ==Int 1 orBool TW ==Int 27 orBool TW ==Int 28)
+
+    rule [[ #getTxData( TXID ) => AccessListTxData(TN, TP, TG, TT, TV, DATA, CID, TA) ]]
+         <message>
+           <msgID>      TXID </msgID>
+           <txNonce>    TN   </txNonce>
+           <txGasPrice> TP   </txGasPrice>
+           <txGasLimit> TG   </txGasLimit>
+           <to>         TT   </to>
+           <value>      TV   </value>
+           <data>       DATA </data>
+           <txChainID>  CID  </txChainID>
+           <txAccess>   TA   </txAccess>
+           <txType> AccessList </txType>
+           ...
+         </message>
+
+    rule [[ #getTxData( TXID ) => DynamicFeeTxData(TN, TPF, TM, TG, TT, TV, DATA, CID, TA) ]]
+         <message>
+           <msgID>         TXID </msgID>
+           <txNonce>       TN   </txNonce>
+           <txGasLimit>    TG   </txGasLimit>
+           <to>            TT   </to>
+           <value>         TV   </value>
+           <data>          DATA </data>
+           <txChainID>     CID  </txChainID>
+           <txAccess>      TA   </txAccess>
+           <txPriorityFee> TPF  </txPriorityFee>
+           <txMaxFee>      TM   </txMaxFee>
+           <txType> DynamicFee </txType>
+           ...
+         </message>
+
+    syntax Int ::= #effectiveGasPrice( Int ) [function]
+ // ---------------------------------------------------
+    rule [[ #effectiveGasPrice( TXID )
+         => #if ( notBool Ghasbasefee << SCHED >> )
+                orBool TXTYPE ==K Legacy
+                orBool TXTYPE ==K AccessList
+              #then GPRICE
+              #else BFEE +Int minInt(TPF, TM -Int BFEE)
+            #fi
+         ]]
+         <schedule> SCHED </schedule>
+         <baseFee> BFEE </baseFee>
+         <message>
+           <msgID>         TXID   </msgID>
+           <txGasPrice>    GPRICE </txGasPrice>
+           <txType>        TXTYPE </txType>
+           <txPriorityFee> TPF    </txPriorityFee>
+           <txMaxFee>      TM     </txMaxFee>
+           ...
+         </message>
+
+

Block Identifiers

+
    syntax BlockIdentifier ::= Int
+                             | "LATEST"
+                             | "PENDING"
+                             | "EARLIEST"
+ // -------------------------------------
+
+    syntax BlockIdentifier ::= #parseBlockIdentifier ( JSON ) [function]
+ // --------------------------------------------------------------------
+    rule #parseBlockIdentifier(BLOCKNUM:Int) => BLOCKNUM
+    rule #parseBlockIdentifier("pending")    => PENDING
+    rule #parseBlockIdentifier("latest")     => LATEST
+    rule #parseBlockIdentifier("earliest")   => EARLIEST
+    rule #parseBlockIdentifier(BLOCKNUM)     => #parseWord(BLOCKNUM) [owise]
+
+
endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/include/kframework/word.md b/include/kframework/word.md deleted file mode 100644 index d104f4bf71..0000000000 --- a/include/kframework/word.md +++ /dev/null @@ -1,571 +0,0 @@ -Core definitions for `Word` -=========================== - -In this file are defined the basic components for EVM words. - -```k -module WORD - imports INT - imports BOOL - imports BYTES -``` - -Important Powers ----------------- - -Some important numbers that are referred to often during execution. -These can be used for pattern-matching on the LHS of rules as well (`alias` attribute expands all occurances of these in rules). - -```k - syntax Int ::= "pow256" [alias] /* 2 ^Int 256 */ - | "pow255" [alias] /* 2 ^Int 255 */ - | "pow248" [alias] /* 2 ^Int 248" */ - | "pow240" [alias] /* 2 ^Int 240" */ - | "pow232" [alias] /* 2 ^Int 232" */ - | "pow224" [alias] /* 2 ^Int 224" */ - | "pow216" [alias] /* 2 ^Int 216" */ - | "pow208" [alias] /* 2 ^Int 208" */ - | "pow200" [alias] /* 2 ^Int 200" */ - | "pow192" [alias] /* 2 ^Int 192" */ - | "pow184" [alias] /* 2 ^Int 184" */ - | "pow176" [alias] /* 2 ^Int 176" */ - | "pow168" [alias] /* 2 ^Int 168" */ - | "pow160" [alias] /* 2 ^Int 160" */ - | "pow152" [alias] /* 2 ^Int 152" */ - | "pow144" [alias] /* 2 ^Int 144" */ - | "pow136" [alias] /* 2 ^Int 136" */ - | "pow128" [alias] /* 2 ^Int 128" */ - | "pow120" [alias] /* 2 ^Int 120" */ - | "pow112" [alias] /* 2 ^Int 112" */ - | "pow104" [alias] /* 2 ^Int 104" */ - | "pow96" [alias] /* 2 ^Int 96" */ - | "pow88" [alias] /* 2 ^Int 88" */ - | "pow80" [alias] /* 2 ^Int 80" */ - | "pow72" [alias] /* 2 ^Int 72" */ - | "pow64" [alias] /* 2 ^Int 64" */ - | "pow56" [alias] /* 2 ^Int 56" */ - | "pow48" [alias] /* 2 ^Int 48" */ - | "pow40" [alias] /* 2 ^Int 40" */ - | "pow32" [alias] /* 2 ^Int 32" */ - | "pow24" [alias] /* 2 ^Int 24" */ - | "pow16" [alias] /* 2 ^Int 16" */ - | "pow8" [macro] /* 2 ^Int 8" */ - // ------------------------------------------------ - rule pow256 => 115792089237316195423570985008687907853269984665640564039457584007913129639936 - rule pow255 => 57896044618658097711785492504343953926634992332820282019728792003956564819968 - rule pow248 => 452312848583266388373324160190187140051835877600158453279131187530910662656 - rule pow240 => 1766847064778384329583297500742918515827483896875618958121606201292619776 - rule pow232 => 6901746346790563787434755862277025452451108972170386555162524223799296 - rule pow224 => 26959946667150639794667015087019630673637144422540572481103610249216 - rule pow216 => 105312291668557186697918027683670432318895095400549111254310977536 - rule pow208 => 411376139330301510538742295639337626245683966408394965837152256 - rule pow200 => 1606938044258990275541962092341162602522202993782792835301376 - rule pow192 => 6277101735386680763835789423207666416102355444464034512896 - rule pow184 => 24519928653854221733733552434404946937899825954937634816 - rule pow176 => 95780971304118053647396689196894323976171195136475136 - rule pow168 => 374144419156711147060143317175368453031918731001856 - rule pow160 => 1461501637330902918203684832716283019655932542976 - rule pow152 => 5708990770823839524233143877797980545530986496 - rule pow144 => 22300745198530623141535718272648361505980416 - rule pow136 => 87112285931760246646623899502532662132736 - rule pow128 => 340282366920938463463374607431768211456 - rule pow120 => 1329227995784915872903807060280344576 - rule pow112 => 5192296858534827628530496329220096 - rule pow104 => 20282409603651670423947251286016 - rule pow96 => 79228162514264337593543950336 - rule pow88 => 309485009821345068724781056 - rule pow80 => 1208925819614629174706176 - rule pow72 => 4722366482869645213696 - rule pow64 => 18446744073709551616 - rule pow56 => 72057594037927936 - rule pow48 => 281474976710656 - rule pow40 => 1099511627776 - rule pow32 => 4294967296 - rule pow24 => 16777216 - rule pow16 => 65536 - rule pow8 => 256 -``` - -Maximums and minimums ---------------------- - -The maximum and minimum values of each type are defined below. - -```k - syntax Int ::= "minSInt8" [alias] - | "minSInt8Word" [alias] - | "maxSInt8" [alias] - | "minSInt16" [alias] - | "minSInt16Word" [alias] - | "maxSInt16" [alias] - | "minSInt24" [alias] - | "minSInt24Word" [alias] - | "maxSInt24" [alias] - | "minSInt32" [alias] - | "minSInt32Word" [alias] - | "maxSInt32" [alias] - | "minSInt40" [alias] - | "minSInt40Word" [alias] - | "maxSInt40" [alias] - | "minSInt48" [alias] - | "minSInt48Word" [alias] - | "maxSInt48" [alias] - | "minSInt56" [alias] - | "minSInt56Word" [alias] - | "maxSInt56" [alias] - | "minSInt64" [alias] - | "minSInt64Word" [alias] - | "maxSInt64" [alias] - | "minSInt72" [alias] - | "minSInt72Word" [alias] - | "maxSInt72" [alias] - | "minSInt80" [alias] - | "minSInt80Word" [alias] - | "maxSInt80" [alias] - | "minSInt88" [alias] - | "minSInt88Word" [alias] - | "maxSInt88" [alias] - | "minSInt96" [alias] - | "minSInt96Word" [alias] - | "maxSInt96" [alias] - | "minSInt104" [alias] - | "minSInt104Word" [alias] - | "maxSInt104" [alias] - | "minSInt112" [alias] - | "minSInt112Word" [alias] - | "maxSInt112" [alias] - | "minSInt120" [alias] - | "minSInt120Word" [alias] - | "maxSInt120" [alias] - | "minSInt128" [alias] - | "minSInt128Word" [alias] - | "maxSInt128" [alias] - | "minSInt136" [alias] - | "minSInt136Word" [alias] - | "maxSInt136" [alias] - | "minSInt144" [alias] - | "minSInt144Word" [alias] - | "maxSInt144" [alias] - | "minSInt152" [alias] - | "minSInt152Word" [alias] - | "maxSInt152" [alias] - | "minSInt160" [alias] - | "minSInt160Word" [alias] - | "maxSInt160" [alias] - | "minSInt168" [alias] - | "minSInt168Word" [alias] - | "maxSInt168" [alias] - | "minSInt176" [alias] - | "minSInt176Word" [alias] - | "maxSInt176" [alias] - | "minSInt184" [alias] - | "minSInt184Word" [alias] - | "maxSInt184" [alias] - | "minSInt192" [alias] - | "minSInt192Word" [alias] - | "maxSInt192" [alias] - | "minSInt200" [alias] - | "minSInt200Word" [alias] - | "maxSInt200" [alias] - | "minSInt208" [alias] - | "minSInt208Word" [alias] - | "maxSInt208" [alias] - | "minSInt216" [alias] - | "minSInt216Word" [alias] - | "maxSInt216" [alias] - | "minSInt224" [alias] - | "minSInt224Word" [alias] - | "maxSInt224" [alias] - | "minSInt232" [alias] - | "minSInt232Word" [alias] - | "maxSInt232" [alias] - | "minSInt240" [alias] - | "minSInt240Word" [alias] - | "maxSInt240" [alias] - | "minSInt248" [alias] - | "minSInt248Word" [alias] - | "maxSInt248" [alias] - | "minSInt256" [alias] - | "minSInt256Word" [alias] - | "maxSInt256" [alias] - | "minUInt8" [macro] - | "maxUInt8" [alias] - | "minUInt16" [macro] - | "maxUInt16" [alias] - | "minUInt24" [macro] - | "maxUInt24" [alias] - | "minUInt32" [macro] - | "maxUInt32" [alias] - | "minUInt40" [macro] - | "maxUInt40" [alias] - | "minUInt48" [macro] - | "maxUInt48" [alias] - | "minUInt56" [macro] - | "maxUInt56" [alias] - | "minUInt64" [macro] - | "maxUInt64" [alias] - | "minUInt72" [macro] - | "maxUInt72" [alias] - | "minUInt80" [macro] - | "maxUInt80" [alias] - | "minUInt88" [macro] - | "maxUInt88" [alias] - | "minUInt96" [macro] - | "maxUInt96" [alias] - | "minUInt104" [macro] - | "maxUInt104" [alias] - | "minUInt112" [macro] - | "maxUInt112" [alias] - | "minUInt120" [macro] - | "maxUInt120" [alias] - | "minUInt128" [macro] - | "maxUInt128" [alias] - | "minUInt136" [macro] - | "maxUInt136" [alias] - | "minUInt144" [macro] - | "maxUInt144" [alias] - | "minUInt152" [macro] - | "maxUInt152" [alias] - | "minUInt160" [macro] - | "maxUInt160" [alias] - | "minUInt168" [macro] - | "maxUInt168" [alias] - | "minUInt176" [macro] - | "maxUInt176" [alias] - | "minUInt184" [macro] - | "maxUInt184" [alias] - | "minUInt192" [macro] - | "maxUInt192" [alias] - | "minUInt200" [macro] - | "maxUInt200" [alias] - | "minUInt208" [macro] - | "maxUInt208" [alias] - | "minUInt216" [macro] - | "maxUInt216" [alias] - | "minUInt224" [macro] - | "maxUInt224" [alias] - | "minUInt232" [macro] - | "maxUInt232" [alias] - | "minUInt240" [macro] - | "maxUInt240" [alias] - | "minUInt248" [macro] - | "maxUInt248" [alias] - | "minUInt256" [macro] - | "maxUInt256" [alias] - | "minSFixed128x10" [alias] - | "maxSFixed128x10" [alias] - | "minUFixed128x10" [macro] - | "maxUFixed128x10" [alias] - // ---------------------------------------- - rule minSInt8 => -128 /* -2^7 */ - rule minSInt8Word => 115792089237316195423570985008687907853269984665640564039457584007913129639808 /* -2^7 as evm word */ - rule maxSInt8 => 127 /* 2^7 - 1 */ - rule minSInt16 => -32768 /* -2^15 */ - rule minSInt16Word => 115792089237316195423570985008687907853269984665640564039457584007913129607168 /* -2^15 as evm word */ - rule maxSInt16 => 32767 /* 2^15 - 1 */ - rule minSInt24 => -8388608 /* -2^23 */ - rule minSInt24Word => 115792089237316195423570985008687907853269984665640564039457584007913121251328 /* -2^23 as evm word */ - rule maxSInt24 => 8388607 /* 2^23 - 1 */ - rule minSInt32 => -2147483648 /* -2^31 */ - rule minSInt32Word => 115792089237316195423570985008687907853269984665640564039457584007910982156288 /* -2^31 as evm word */ - rule maxSInt32 => 2147483647 /* 2^31 - 1 */ - rule minSInt40 => -549755813888 /* -2^39 */ - rule minSInt40Word => 115792089237316195423570985008687907853269984665640564039457584007363373826048 /* -2^39 as evm word */ - rule maxSInt40 => 549755813887 /* 2^39 - 1 */ - rule minSInt48 => -140737488355328 /* -2^47 */ - rule minSInt48Word => 115792089237316195423570985008687907853269984665640564039457583867175641284608 /* -2^47 as evm word */ - rule maxSInt48 => 140737488355327 /* 2^47 - 1 */ - rule minSInt56 => -36028797018963968 /* -2^55 */ - rule minSInt56Word => 115792089237316195423570985008687907853269984665640564039457547979116110675968 /* -2^55 as evm word */ - rule maxSInt56 => 36028797018963967 /* 2^55 - 1 */ - rule minSInt64 => -9223372036854775808 /* -2^63 */ - rule minSInt64Word => 115792089237316195423570985008687907853269984665640564039448360635876274864128 /* -2^63 as evm word */ - rule maxSInt64 => 9223372036854775807 /* 2^63 - 1 */ - rule minSInt72 => -2361183241434822606848 /* -2^71 */ - rule minSInt72Word => 115792089237316195423570985008687907853269984665640564037096400766478307033088 /* -2^71 as evm word */ - rule maxSInt72 => 2361183241434822606847 /* 2^71 - 1 */ - rule minSInt80 => -604462909807314587353088 /* -2^79 */ - rule minSInt80Word => 115792089237316195423570985008687907853269984665640563434994674200598542286848 /* -2^79 as evm word */ - rule maxSInt80 => 604462909807314587353087 /* 2^79 - 1 */ - rule minSInt88 => -154742504910672534362390528 /* -2^87 */ - rule minSInt88Word => 115792089237316195423570985008687907853269984665640409296952673335378767249408 /* -2^87 as evm word */ - rule maxSInt88 => 154742504910672534362390527 /* 2^87 - 1 */ - rule minSInt96 => -39614081257132168796771975168 /* -2^95 */ - rule minSInt96Word => 115792089237316195423570985008687907853269984665600949958200451839116357664768 /* -2^95 as evm word */ - rule maxSInt96 => 39614081257132168796771975167 /* 2^95 - 1 */ - rule minSInt104 => -10141204801825835211973625643008 /* -2^103 */ - rule minSInt104Word => 115792089237316195423570985008687907853269984655499359237631748795939503996928 /* -2^103 as evm word */ - rule maxSInt104 => 10141204801825835211973625643007 /* 2^103 - 1 */ - rule minSInt112 => -2596148429267413814265248164610048 /* -2^111 */ - rule minSInt112Word => 115792089237316195423570985008687907853269982069492134772043769742664965029888 /* -2^111 as evm word */ - rule maxSInt112 => 2596148429267413814265248164610047 /* 2^111 - 1 */ - rule minSInt120 => -664613997892457936451903530140172288 /* -2^119 */ - rule minSInt120Word => 115792089237316195423570985008687907853269320051642671581521132104382989467648 /* -2^119 as evm word */ - rule maxSInt120 => 664613997892457936451903530140172287 /* 2^119 - 1 */ - rule minSInt128 => -170141183460469231731687303715884105728 /* -2^127 */ - rule minSInt128Word => 115792089237316195423570985008687907853099843482180094807725896704197245534208 /* -2^127 as evm word */ - rule maxSInt128 => 170141183460469231731687303715884105727 /* 2^127 as evm word */ - rule minSInt136 => -43556142965880123323311949751266331066368 /* -2^135 */ - rule minSInt136Word => 115792089237316195423570985008687907809713841699760440716145634256646798573568 /* -2^135 as evm word */ - rule maxSInt136 => 43556142965880123323311949751266331066367 /* 2^135 - 1 */ - rule minSInt144 => -11150372599265311570767859136324180752990208 /* -2^143 */ - rule minSInt144Word => 115792089237316195423570985008687896702897385400328993271598447683732376649728 /* -2^143 as evm word */ - rule maxSInt144 => 11150372599265311570767859136324180752990207 /* 2^143 - 1 */ - rule minSInt152 => -2854495385411919762116571938898990272765493248 /* -2^151 */ - rule minSInt152Word => 115792089237316195423570985008685053357884572745878447467518685017640364146688 /* -2^151 as evm word */ - rule maxSInt152 => 2854495385411919762116571938898990272765493247 /* 2^151 - 1 */ - rule minSInt160 => -730750818665451459101842416358141509827966271488 /* -2^159 */ - rule minSInt160Word => 115792089237316195423570985007957157034604533206538721623099442498085163368448 /* -2^159 as evm word */ - rule maxSInt160 => 730750818665451459101842416358141509827966271487 /* 2^159 - 1 */ - rule minSInt168 => -187072209578355573530071658587684226515959365500928 /* -2^167 */ - rule minSInt168Word => 115792089237316195423570984821615698274914411135568905451773357491953764139008 /* -2^167 as evm word */ - rule maxSInt168 => 187072209578355573530071658587684226515959365500927 /* 2^167 - 1 */ - rule minSInt176 => -47890485652059026823698344598447161988085597568237568 /* -2^175 */ - rule minSInt176Word => 115792089237316195423570937118202255794243160967295965592295595922315561402368 /* -2^175 as evm word */ - rule maxSInt176 => 47890485652059026823698344598447161988085597568237567 /* 2^175 - 1 */ - rule minSInt184 => -12259964326927110866866776217202473468949912977468817408 /* -2^183 */ - rule minSInt184Word => 115792089237316195423558725044360980742403117889423361565988634094935660822528 /* -2^183 as evm word */ - rule maxSInt184 => 12259964326927110866866776217202473468949912977468817407 /* 2^183 - 1 */ - rule minSInt192 => -3138550867693340381917894711603833208051177722232017256448 /* -2^191 */ - rule minSInt192Word => 115792089237316195420432434140994567471352089954036730831406406285681112383488 /* -2^191 as evm word */ - rule maxSInt192 => 3138550867693340381917894711603833208051177722232017256447 /* 2^191 - 1 */ - rule minSInt200 => -803469022129495137770981046170581301261101496891396417650688 /* -2^199 */ - rule minSInt200Word => 115792089237316194620101962879192770082288938495059262778356087116516711989248 /* -2^199 as evm word */ - rule maxSInt200 => 803469022129495137770981046170581301261101496891396417650687 /* 2^199 - 1 */ - rule minSInt208 => -205688069665150755269371147819668813122841983204197482918576128 /* -2^207 */ - rule minSInt208Word => 115792089237315989735501319857932638482122164996827441197474379810430211063808 /* -2^207 as evm word */ - rule maxSInt208 => 205688069665150755269371147819668813122841983204197482918576127 /* 2^207 - 1 */ - rule minSInt216 => -52656145834278593348959013841835216159447547700274555627155488768 /* -2^215 */ - rule minSInt216Word => 115792089237263539277736706415338948839428149449481116491757309452285974151168 /* -2^215 as evm word */ - rule maxSInt216 => 52656145834278593348959013841835216159447547700274555627155488767 /* 2^215 - 1 */ - rule minSInt224 => -13479973333575319897333507543509815336818572211270286240551805124608 /* -2^223 */ - rule minSInt224Word => 115792089223836222089995665111354400309760169328821991828187297767361324515328 /* -2^223 as evm word */ - rule maxSInt224 => 13479973333575319897333507543509815336818572211270286240551805124607 /* 2^223 - 1 */ - rule minSInt232 => -3450873173395281893717377931138512726225554486085193277581262111899648 /* -2^231 */ - rule minSInt232Word => 115792085786443022028289091291309976714757258440086077954264306426651017740288 /* -2^231 as evm word */ - rule maxSInt232 => 3450873173395281893717377931138512726225554486085193277581262111899647 /* 2^231 - 1 */ - rule minSInt240 => -883423532389192164791648750371459257913741948437809479060803100646309888 /* -2^239 */ - rule minSInt240Word => 115791205813783806231406193359937536394012070923692126229978523204812483330048 /* -2^239 as evm word */ - rule maxSInt240 => 883423532389192164791648750371459257913741948437809479060803100646309887 /* 2^239 - 1 */ - rule minSInt248 => -226156424291633194186662080095093570025917938800079226639565593765455331328 /* -2^247 */ - rule minSInt248Word => 115565932813024562229384322928592814283244066726840484812818018414147674308608 /* -2^247 as evm word */ - rule maxSInt248 => 226156424291633194186662080095093570025917938800079226639565593765455331327 /* 2^247 - 1 */ - rule minSInt256 => -57896044618658097711785492504343953926634992332820282019728792003956564819968 /* -2^255 */ - rule minSInt256Word => 57896044618658097711785492504343953926634992332820282019728792003956564819968 /* -2^255 as evm word */ - rule maxSInt256 => 57896044618658097711785492504343953926634992332820282019728792003956564819967 /* 2^255 - 1 */ - - rule minSFixed128x10 => -1701411834604692317316873037158841057280000000000 /* (-2^487 ) * 10^10 */ - rule maxSFixed128x10 => 1701411834604692317316873037158841057270000000000 /* ( 2^487 - 1) * 10^10 */ - - rule minUInt8 => 0 - rule maxUInt8 => 255 /* 2^8 - 1 */ - rule minUInt16 => 0 - rule maxUInt16 => 65535 /* 2^16 - 1 */ - rule minUInt24 => 0 - rule maxUInt24 => 16777215 /* 2^24 - 1 */ - rule minUInt32 => 0 - rule maxUInt32 => 4294967295 /* 2^32 - 1 */ - rule minUInt40 => 0 - rule maxUInt40 => 1099511627775 /* 2^40 - 1 */ - rule minUInt48 => 0 - rule maxUInt48 => 281474976710655 /* 2^48 - 1 */ - rule minUInt56 => 0 - rule maxUInt56 => 72057594037927935 /* 2^56 - 1 */ - rule minUInt64 => 0 - rule maxUInt64 => 18446744073709551615 /* 2^64 - 1 */ - rule minUInt72 => 0 - rule maxUInt72 => 4722366482869645213695 /* 2^72 - 1 */ - rule minUInt80 => 0 - rule maxUInt80 => 1208925819614629174706175 /* 2^80 - 1 */ - rule minUInt88 => 0 - rule maxUInt88 => 309485009821345068724781055 /* 2^88 - 1 */ - rule minUInt96 => 0 - rule maxUInt96 => 79228162514264337593543950335 /* 2^96 - 1 */ - rule minUInt104 => 0 - rule maxUInt104 => 20282409603651670423947251286015 /* 2^104 - 1 */ - rule minUInt112 => 0 - rule maxUInt112 => 5192296858534827628530496329220095 /* 2^112 - 1 */ - rule minUInt120 => 0 - rule maxUInt120 => 1329227995784915872903807060280344575 /* 2^120 - 1 */ - rule minUInt128 => 0 - rule maxUInt128 => 340282366920938463463374607431768211455 /* 2^128 - 1 */ - rule minUInt136 => 0 - rule maxUInt136 => 87112285931760246646623899502532662132735 /* 2^136 - 1 */ - rule minUInt144 => 0 - rule maxUInt144 => 22300745198530623141535718272648361505980415 /* 2^144 - 1 */ - rule minUInt152 => 0 - rule maxUInt152 => 5708990770823839524233143877797980545530986495 /* 2^152 - 1 */ - rule minUInt160 => 0 - rule maxUInt160 => 1461501637330902918203684832716283019655932542975 /* 2^160 - 1 */ - rule minUInt168 => 0 - rule maxUInt168 => 374144419156711147060143317175368453031918731001855 /* 2^168 - 1 */ - rule minUInt176 => 0 - rule maxUInt176 => 95780971304118053647396689196894323976171195136475135 /* 2^176 - 1 */ - rule minUInt184 => 0 - rule maxUInt184 => 24519928653854221733733552434404946937899825954937634815 /* 2^184 - 1 */ - rule minUInt192 => 0 - rule maxUInt192 => 6277101735386680763835789423207666416102355444464034512895 /* 2^192 - 1 */ - rule minUInt200 => 0 - rule maxUInt200 => 1606938044258990275541962092341162602522202993782792835301375 /* 2^200 - 1 */ - rule minUInt208 => 0 - rule maxUInt208 => 411376139330301510538742295639337626245683966408394965837152255 /* 2^208 - 1 */ - rule minUInt216 => 0 - rule maxUInt216 => 105312291668557186697918027683670432318895095400549111254310977535 /* 2^216 - 1 */ - rule minUInt224 => 0 - rule maxUInt224 => 26959946667150639794667015087019630673637144422540572481103610249215 /* 2^224 - 1 */ - rule minUInt232 => 0 - rule maxUInt232 => 6901746346790563787434755862277025452451108972170386555162524223799295 /* 2^232 - 1 */ - rule minUInt240 => 0 - rule maxUInt240 => 1766847064778384329583297500742918515827483896875618958121606201292619775 /* 2^240 - 1 */ - rule minUInt248 => 0 - rule maxUInt248 => 452312848583266388373324160190187140051835877600158453279131187530910662655 /* 2^248 - 1 */ - rule minUInt256 => 0 - rule maxUInt256 => 115792089237316195423570985008687907853269984665640564039457584007913129639935 /* 2^256 - 1 */ - - rule minUFixed128x10 => 0 - rule maxUFixed128x10 => 3402823669209384634633746074317682114550000000000 /* ( 2^128 - 1) * 10^10 */ - - syntax Int ::= "notMaxUInt5" [alias] /* FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 */ - | "notMaxUInt96" [alias] /* FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 */ - | "notMaxUInt128" [alias] /* FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 */ - | "notMaxUInt160" [alias] /* FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 */ - | "notMaxUInt192" [alias] /* FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 */ - | "notMaxUInt208" [alias] /* FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000 */ - | "notMaxUInt224" [alias] /* FFFFFFFF00000000000000000000000000000000000000000000000000000000 */ - // ------------------------------------------------------------------------------------------------------------- - rule notMaxUInt5 => 115792089237316195423570985008687907853269984665640564039457584007913129639904 - rule notMaxUInt96 => 115792089237316195423570985008687907853269984665561335876943319670319585689600 - rule notMaxUInt128 => 115792089237316195423570985008687907852929702298719625575994209400481361428480 - rule notMaxUInt160 => 115792089237316195423570985007226406215939081747436879206741300988257197096960 - rule notMaxUInt192 => 115792089237316195417293883273301227089434195242432897623355228563449095127040 - rule notMaxUInt208 => 115792089237315784047431654707177369110974345328014318355491175612947292487680 - rule notMaxUInt224 => 115792089210356248756420345214020892766250353992003419616917011526809519390720 - - syntax Int ::= "eth" [macro] - | "maxBlockNum" [macro] /* 7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF == (2 ^ 256) - (2 ^ 255) - 1 */ - // ---------------------------------------------------------------------------------------------------------------------------------------- - rule eth => 1000000000000000000 - rule maxBlockNum => 57896044618658097711785492504343953926634992332820282019728792003956564819967 -``` - -Range of types --------------- - -```k - syntax Bool ::= #rangeBool ( Int ) [alias] - | #rangeSInt ( Int , Int ) [alias] - | #rangeUInt ( Int , Int ) [alias] - | #rangeSFixed ( Int , Int , Int ) [alias] - | #rangeUFixed ( Int , Int , Int ) [alias] - | #rangeAddress ( Int ) [alias] - | #rangeBytes ( Int , Int ) [alias] - | #rangeNonce ( Int ) [alias] - | #rangeSmall ( Int ) [alias] - | #rangeBlockNum ( Int ) [alias] - // ---------------------------------------------------------- - rule #rangeBool ( X ) => X ==Int 0 orBool X ==Int 1 - - rule #rangeSInt ( 8 , X ) => #range ( minSInt8 <= X < maxSInt8 ) - rule #rangeSInt ( 16 , X ) => #range ( minSInt16 <= X < maxSInt16 ) - rule #rangeSInt ( 24 , X ) => #range ( minSInt24 <= X < maxSInt24 ) - rule #rangeSInt ( 32 , X ) => #range ( minSInt32 <= X < maxSInt32 ) - rule #rangeSInt ( 40 , X ) => #range ( minSInt40 <= X < maxSInt40 ) - rule #rangeSInt ( 48 , X ) => #range ( minSInt48 <= X < maxSInt48 ) - rule #rangeSInt ( 56 , X ) => #range ( minSInt56 <= X < maxSInt56 ) - rule #rangeSInt ( 64 , X ) => #range ( minSInt64 <= X < maxSInt64 ) - rule #rangeSInt ( 72 , X ) => #range ( minSInt72 <= X < maxSInt72 ) - rule #rangeSInt ( 80 , X ) => #range ( minSInt80 <= X < maxSInt80 ) - rule #rangeSInt ( 88 , X ) => #range ( minSInt88 <= X < maxSInt88 ) - rule #rangeSInt ( 96 , X ) => #range ( minSInt96 <= X < maxSInt96 ) - rule #rangeSInt ( 104 , X ) => #range ( minSInt104 <= X < maxSInt104 ) - rule #rangeSInt ( 112 , X ) => #range ( minSInt112 <= X < maxSInt112 ) - rule #rangeSInt ( 120 , X ) => #range ( minSInt120 <= X < maxSInt120 ) - rule #rangeSInt ( 128 , X ) => #range ( minSInt128 <= X < maxSInt128 ) - rule #rangeSInt ( 136 , X ) => #range ( minSInt136 <= X < maxSInt136 ) - rule #rangeSInt ( 144 , X ) => #range ( minSInt144 <= X < maxSInt144 ) - rule #rangeSInt ( 152 , X ) => #range ( minSInt152 <= X < maxSInt152 ) - rule #rangeSInt ( 160 , X ) => #range ( minSInt160 <= X < maxSInt160 ) - rule #rangeSInt ( 168 , X ) => #range ( minSInt168 <= X < maxSInt168 ) - rule #rangeSInt ( 176 , X ) => #range ( minSInt176 <= X < maxSInt176 ) - rule #rangeSInt ( 184 , X ) => #range ( minSInt184 <= X < maxSInt184 ) - rule #rangeSInt ( 192 , X ) => #range ( minSInt192 <= X < maxSInt192 ) - rule #rangeSInt ( 200 , X ) => #range ( minSInt200 <= X < maxSInt200 ) - rule #rangeSInt ( 208 , X ) => #range ( minSInt208 <= X < maxSInt208 ) - rule #rangeSInt ( 216 , X ) => #range ( minSInt216 <= X < maxSInt216 ) - rule #rangeSInt ( 224 , X ) => #range ( minSInt224 <= X < maxSInt224 ) - rule #rangeSInt ( 232 , X ) => #range ( minSInt232 <= X < maxSInt232 ) - rule #rangeSInt ( 240 , X ) => #range ( minSInt240 <= X < maxSInt240 ) - rule #rangeSInt ( 248 , X ) => #range ( minSInt248 <= X < maxSInt248 ) - rule #rangeSInt ( 256 , X ) => #range ( minSInt256 <= X <= maxSInt256 ) - - rule #rangeUInt ( 8 , X ) => #range ( minUInt8 <= X < pow8 ) - rule #rangeUInt ( 16 , X ) => #range ( minUInt16 <= X < pow16 ) - rule #rangeUInt ( 24 , X ) => #range ( minUInt24 <= X < pow24 ) - rule #rangeUInt ( 32 , X ) => #range ( minUInt32 <= X < pow32 ) - rule #rangeUInt ( 40 , X ) => #range ( minUInt40 <= X < pow40 ) - rule #rangeUInt ( 48 , X ) => #range ( minUInt48 <= X < pow48 ) - rule #rangeUInt ( 56 , X ) => #range ( minUInt56 <= X < pow56 ) - rule #rangeUInt ( 64 , X ) => #range ( minUInt64 <= X < pow64 ) - rule #rangeUInt ( 72 , X ) => #range ( minUInt72 <= X < pow72 ) - rule #rangeUInt ( 80 , X ) => #range ( minUInt80 <= X < pow80 ) - rule #rangeUInt ( 88 , X ) => #range ( minUInt88 <= X < pow88 ) - rule #rangeUInt ( 96 , X ) => #range ( minUInt96 <= X < pow96 ) - rule #rangeUInt ( 104 , X ) => #range ( minUInt104 <= X < pow104 ) - rule #rangeUInt ( 112 , X ) => #range ( minUInt112 <= X < pow112 ) - rule #rangeUInt ( 120 , X ) => #range ( minUInt120 <= X < pow120 ) - rule #rangeUInt ( 128 , X ) => #range ( minUInt128 <= X < pow128 ) - rule #rangeUInt ( 136 , X ) => #range ( minUInt136 <= X < pow136 ) - rule #rangeUInt ( 144 , X ) => #range ( minUInt144 <= X < pow144 ) - rule #rangeUInt ( 152 , X ) => #range ( minUInt152 <= X < pow152 ) - rule #rangeUInt ( 160 , X ) => #range ( minUInt160 <= X < pow160 ) - rule #rangeUInt ( 168 , X ) => #range ( minUInt168 <= X < pow168 ) - rule #rangeUInt ( 176 , X ) => #range ( minUInt176 <= X < pow176 ) - rule #rangeUInt ( 184 , X ) => #range ( minUInt184 <= X < pow184 ) - rule #rangeUInt ( 192 , X ) => #range ( minUInt192 <= X < pow192 ) - rule #rangeUInt ( 200 , X ) => #range ( minUInt200 <= X < pow200 ) - rule #rangeUInt ( 208 , X ) => #range ( minUInt208 <= X < pow208 ) - rule #rangeUInt ( 216 , X ) => #range ( minUInt216 <= X < pow216 ) - rule #rangeUInt ( 224 , X ) => #range ( minUInt224 <= X < pow224 ) - rule #rangeUInt ( 232 , X ) => #range ( minUInt232 <= X < pow232 ) - rule #rangeUInt ( 240 , X ) => #range ( minUInt240 <= X < pow240 ) - rule #rangeUInt ( 248 , X ) => #range ( minUInt248 <= X < pow248 ) - rule #rangeUInt ( 256 , X ) => #range ( minUInt256 <= X < pow256 ) - - rule #rangeSFixed ( 128 , 10 , X ) => #range ( minSFixed128x10 <= X <= maxSFixed128x10 ) - rule #rangeUFixed ( 128 , 10 , X ) => #range ( minUFixed128x10 <= X <= maxUFixed128x10 ) - rule #rangeAddress ( X ) => #range ( minUInt160 <= X < pow160 ) - rule #rangeBytes ( N , X ) => #range ( 0 <= X < 1 < #range ( 0 <= X < maxUInt64 ) - rule #rangeSmall ( X ) => #range ( 0 <= X < 10 ) - rule #rangeBlockNum ( X ) => #range ( 0 <= X <= maxBlockNum ) - - syntax Bool ::= "#range" "(" Int "<" Int "<" Int ")" [macro] - | "#range" "(" Int "<" Int "<=" Int ")" [macro] - | "#range" "(" Int "<=" Int "<" Int ")" [macro] - | "#range" "(" Int "<=" Int "<=" Int ")" [macro] - // -------------------------------------------------------------- - rule #range ( LB < X < UB ) => LB LB LB <=Int X andBool X LB <=Int X andBool X <=Int UB -``` - -- `chop` interprets an integer modulo `2^256`. - -```k - syntax Int ::= chop ( Int ) [function, total, smtlib(chop)] - // ----------------------------------------------------------- - rule chop ( I:Int ) => I modInt pow256 [concrete, smt-lemma] -``` -- `_<>Byte_` shifts an integer 8 bits to the right. - -```k - syntax Int ::= Int "<>Byte" Int [function] - // ------------------------------------------ - rule N < N <>Byte M => N >>Int (8 *Int M) - -endmodule -``` diff --git a/include/kframework/word/index.html b/include/kframework/word/index.html new file mode 100644 index 0000000000..dd26dd212a --- /dev/null +++ b/include/kframework/word/index.html @@ -0,0 +1,764 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Core definitions for Word

+

In this file are defined the basic components for EVM words.

+
module WORD
+    imports INT
+    imports BOOL
+    imports BYTES
+
+

Important Powers

+

Some important numbers that are referred to often during execution. +These can be used for pattern-matching on the LHS of rules as well (alias attribute expands all occurances of these in rules).

+
    syntax Int ::= "pow256" [alias] /* 2 ^Int 256 */
+                 | "pow255" [alias] /* 2 ^Int 255 */
+                 | "pow248" [alias] /* 2 ^Int 248" */
+                 | "pow240" [alias] /* 2 ^Int 240" */
+                 | "pow232" [alias] /* 2 ^Int 232" */
+                 | "pow224" [alias] /* 2 ^Int 224" */
+                 | "pow216" [alias] /* 2 ^Int 216" */
+                 | "pow208" [alias] /* 2 ^Int 208" */
+                 | "pow200" [alias] /* 2 ^Int 200" */
+                 | "pow192" [alias] /* 2 ^Int 192" */
+                 | "pow184" [alias] /* 2 ^Int 184" */
+                 | "pow176" [alias] /* 2 ^Int 176" */
+                 | "pow168" [alias] /* 2 ^Int 168" */
+                 | "pow160" [alias] /* 2 ^Int 160" */
+                 | "pow152" [alias] /* 2 ^Int 152" */
+                 | "pow144" [alias] /* 2 ^Int 144" */
+                 | "pow136" [alias] /* 2 ^Int 136" */
+                 | "pow128" [alias] /* 2 ^Int 128" */
+                 | "pow120" [alias] /* 2 ^Int 120" */
+                 | "pow112" [alias] /* 2 ^Int 112" */
+                 | "pow104" [alias] /* 2 ^Int 104" */
+                 | "pow96"  [alias] /* 2 ^Int 96"  */
+                 | "pow88"  [alias] /* 2 ^Int 88"  */
+                 | "pow80"  [alias] /* 2 ^Int 80"  */
+                 | "pow72"  [alias] /* 2 ^Int 72"  */
+                 | "pow64"  [alias] /* 2 ^Int 64"  */
+                 | "pow56"  [alias] /* 2 ^Int 56"  */
+                 | "pow48"  [alias] /* 2 ^Int 48"  */
+                 | "pow40"  [alias] /* 2 ^Int 40"  */
+                 | "pow32"  [alias] /* 2 ^Int 32"  */
+                 | "pow24"  [alias] /* 2 ^Int 24"  */
+                 | "pow16"  [alias] /* 2 ^Int 16"  */
+                 | "pow8"   [macro] /* 2 ^Int 8"   */
+ // ------------------------------------------------
+    rule pow256 => 115792089237316195423570985008687907853269984665640564039457584007913129639936
+    rule pow255 => 57896044618658097711785492504343953926634992332820282019728792003956564819968
+    rule pow248 => 452312848583266388373324160190187140051835877600158453279131187530910662656
+    rule pow240 => 1766847064778384329583297500742918515827483896875618958121606201292619776
+    rule pow232 => 6901746346790563787434755862277025452451108972170386555162524223799296
+    rule pow224 => 26959946667150639794667015087019630673637144422540572481103610249216
+    rule pow216 => 105312291668557186697918027683670432318895095400549111254310977536
+    rule pow208 => 411376139330301510538742295639337626245683966408394965837152256
+    rule pow200 => 1606938044258990275541962092341162602522202993782792835301376
+    rule pow192 => 6277101735386680763835789423207666416102355444464034512896
+    rule pow184 => 24519928653854221733733552434404946937899825954937634816
+    rule pow176 => 95780971304118053647396689196894323976171195136475136
+    rule pow168 => 374144419156711147060143317175368453031918731001856
+    rule pow160 => 1461501637330902918203684832716283019655932542976
+    rule pow152 => 5708990770823839524233143877797980545530986496
+    rule pow144 => 22300745198530623141535718272648361505980416
+    rule pow136 => 87112285931760246646623899502532662132736
+    rule pow128 => 340282366920938463463374607431768211456
+    rule pow120 => 1329227995784915872903807060280344576
+    rule pow112 => 5192296858534827628530496329220096
+    rule pow104 => 20282409603651670423947251286016
+    rule pow96  => 79228162514264337593543950336
+    rule pow88  => 309485009821345068724781056
+    rule pow80  => 1208925819614629174706176
+    rule pow72  => 4722366482869645213696
+    rule pow64  => 18446744073709551616
+    rule pow56  => 72057594037927936
+    rule pow48  => 281474976710656
+    rule pow40  => 1099511627776
+    rule pow32  => 4294967296
+    rule pow24  => 16777216
+    rule pow16  => 65536
+    rule pow8   => 256
+
+

Maximums and minimums

+

The maximum and minimum values of each type are defined below.

+
    syntax Int ::= "minSInt8"        [alias]
+                 | "minSInt8Word"    [alias]
+                 | "maxSInt8"        [alias]
+                 | "minSInt16"       [alias]
+                 | "minSInt16Word"   [alias]
+                 | "maxSInt16"       [alias]
+                 | "minSInt24"       [alias]
+                 | "minSInt24Word"   [alias]
+                 | "maxSInt24"       [alias]
+                 | "minSInt32"       [alias]
+                 | "minSInt32Word"   [alias]
+                 | "maxSInt32"       [alias]
+                 | "minSInt40"       [alias]
+                 | "minSInt40Word"   [alias]
+                 | "maxSInt40"       [alias]
+                 | "minSInt48"       [alias]
+                 | "minSInt48Word"   [alias]
+                 | "maxSInt48"       [alias]
+                 | "minSInt56"       [alias]
+                 | "minSInt56Word"   [alias]
+                 | "maxSInt56"       [alias]
+                 | "minSInt64"       [alias]
+                 | "minSInt64Word"   [alias]
+                 | "maxSInt64"       [alias]
+                 | "minSInt72"       [alias]
+                 | "minSInt72Word"   [alias]
+                 | "maxSInt72"       [alias]
+                 | "minSInt80"       [alias]
+                 | "minSInt80Word"   [alias]
+                 | "maxSInt80"       [alias]
+                 | "minSInt88"       [alias]
+                 | "minSInt88Word"   [alias]
+                 | "maxSInt88"       [alias]
+                 | "minSInt96"       [alias]
+                 | "minSInt96Word"   [alias]
+                 | "maxSInt96"       [alias]
+                 | "minSInt104"      [alias]
+                 | "minSInt104Word"  [alias]
+                 | "maxSInt104"      [alias]
+                 | "minSInt112"      [alias]
+                 | "minSInt112Word"  [alias]
+                 | "maxSInt112"      [alias]
+                 | "minSInt120"      [alias]
+                 | "minSInt120Word"  [alias]
+                 | "maxSInt120"      [alias]
+                 | "minSInt128"      [alias]
+                 | "minSInt128Word"  [alias]
+                 | "maxSInt128"      [alias]
+                 | "minSInt136"      [alias]
+                 | "minSInt136Word"  [alias]
+                 | "maxSInt136"      [alias]
+                 | "minSInt144"      [alias]
+                 | "minSInt144Word"  [alias]
+                 | "maxSInt144"      [alias]
+                 | "minSInt152"      [alias]
+                 | "minSInt152Word"  [alias]
+                 | "maxSInt152"      [alias]
+                 | "minSInt160"      [alias]
+                 | "minSInt160Word"  [alias]
+                 | "maxSInt160"      [alias]
+                 | "minSInt168"      [alias]
+                 | "minSInt168Word"  [alias]
+                 | "maxSInt168"      [alias]
+                 | "minSInt176"      [alias]
+                 | "minSInt176Word"  [alias]
+                 | "maxSInt176"      [alias]
+                 | "minSInt184"      [alias]
+                 | "minSInt184Word"  [alias]
+                 | "maxSInt184"      [alias]
+                 | "minSInt192"      [alias]
+                 | "minSInt192Word"  [alias]
+                 | "maxSInt192"      [alias]
+                 | "minSInt200"      [alias]
+                 | "minSInt200Word"  [alias]
+                 | "maxSInt200"      [alias]
+                 | "minSInt208"      [alias]
+                 | "minSInt208Word"  [alias]
+                 | "maxSInt208"      [alias]
+                 | "minSInt216"      [alias]
+                 | "minSInt216Word"  [alias]
+                 | "maxSInt216"      [alias]
+                 | "minSInt224"      [alias]
+                 | "minSInt224Word"  [alias]
+                 | "maxSInt224"      [alias]
+                 | "minSInt232"      [alias]
+                 | "minSInt232Word"  [alias]
+                 | "maxSInt232"      [alias]
+                 | "minSInt240"      [alias]
+                 | "minSInt240Word"  [alias]
+                 | "maxSInt240"      [alias]
+                 | "minSInt248"      [alias]
+                 | "minSInt248Word"  [alias]
+                 | "maxSInt248"      [alias]
+                 | "minSInt256"      [alias]
+                 | "minSInt256Word"  [alias]
+                 | "maxSInt256"      [alias]
+                 | "minUInt8"        [macro]
+                 | "maxUInt8"        [alias]
+                 | "minUInt16"       [macro]
+                 | "maxUInt16"       [alias]
+                 | "minUInt24"       [macro]
+                 | "maxUInt24"       [alias]
+                 | "minUInt32"       [macro]
+                 | "maxUInt32"       [alias]
+                 | "minUInt40"       [macro]
+                 | "maxUInt40"       [alias]
+                 | "minUInt48"       [macro]
+                 | "maxUInt48"       [alias]
+                 | "minUInt56"       [macro]
+                 | "maxUInt56"       [alias]
+                 | "minUInt64"       [macro]
+                 | "maxUInt64"       [alias]
+                 | "minUInt72"       [macro]
+                 | "maxUInt72"       [alias]
+                 | "minUInt80"       [macro]
+                 | "maxUInt80"       [alias]
+                 | "minUInt88"       [macro]
+                 | "maxUInt88"       [alias]
+                 | "minUInt96"       [macro]
+                 | "maxUInt96"       [alias]
+                 | "minUInt104"      [macro]
+                 | "maxUInt104"      [alias]
+                 | "minUInt112"      [macro]
+                 | "maxUInt112"      [alias]
+                 | "minUInt120"      [macro]
+                 | "maxUInt120"      [alias]
+                 | "minUInt128"      [macro]
+                 | "maxUInt128"      [alias]
+                 | "minUInt136"      [macro]
+                 | "maxUInt136"      [alias]
+                 | "minUInt144"      [macro]
+                 | "maxUInt144"      [alias]
+                 | "minUInt152"      [macro]
+                 | "maxUInt152"      [alias]
+                 | "minUInt160"      [macro]
+                 | "maxUInt160"      [alias]
+                 | "minUInt168"      [macro]
+                 | "maxUInt168"      [alias]
+                 | "minUInt176"      [macro]
+                 | "maxUInt176"      [alias]
+                 | "minUInt184"      [macro]
+                 | "maxUInt184"      [alias]
+                 | "minUInt192"      [macro]
+                 | "maxUInt192"      [alias]
+                 | "minUInt200"      [macro]
+                 | "maxUInt200"      [alias]
+                 | "minUInt208"      [macro]
+                 | "maxUInt208"      [alias]
+                 | "minUInt216"      [macro]
+                 | "maxUInt216"      [alias]
+                 | "minUInt224"      [macro]
+                 | "maxUInt224"      [alias]
+                 | "minUInt232"      [macro]
+                 | "maxUInt232"      [alias]
+                 | "minUInt240"      [macro]
+                 | "maxUInt240"      [alias]
+                 | "minUInt248"      [macro]
+                 | "maxUInt248"      [alias]
+                 | "minUInt256"      [macro]
+                 | "maxUInt256"      [alias]
+                 | "minSFixed128x10" [alias]
+                 | "maxSFixed128x10" [alias]
+                 | "minUFixed128x10" [macro]
+                 | "maxUFixed128x10" [alias]
+ // ----------------------------------------
+    rule minSInt8        => -128                                                                            /*  -2^7                */
+    rule minSInt8Word    =>  115792089237316195423570985008687907853269984665640564039457584007913129639808 /*  -2^7 as evm word    */
+    rule maxSInt8        =>  127                                                                            /*   2^7 - 1            */
+    rule minSInt16       => -32768                                                                          /*  -2^15               */
+    rule minSInt16Word   =>  115792089237316195423570985008687907853269984665640564039457584007913129607168 /*  -2^15 as evm word   */
+    rule maxSInt16       =>  32767                                                                          /*   2^15 - 1           */
+    rule minSInt24       => -8388608                                                                        /*  -2^23               */
+    rule minSInt24Word   =>  115792089237316195423570985008687907853269984665640564039457584007913121251328 /*  -2^23 as evm word   */
+    rule maxSInt24       =>  8388607                                                                        /*   2^23 - 1           */
+    rule minSInt32       => -2147483648                                                                     /*  -2^31               */
+    rule minSInt32Word   =>  115792089237316195423570985008687907853269984665640564039457584007910982156288 /*  -2^31 as evm word   */
+    rule maxSInt32       =>  2147483647                                                                     /*   2^31 - 1           */
+    rule minSInt40       => -549755813888                                                                   /*  -2^39               */
+    rule minSInt40Word   =>  115792089237316195423570985008687907853269984665640564039457584007363373826048 /*  -2^39 as evm word   */
+    rule maxSInt40       =>  549755813887                                                                   /*   2^39 - 1           */
+    rule minSInt48       => -140737488355328                                                                /*  -2^47               */
+    rule minSInt48Word   =>  115792089237316195423570985008687907853269984665640564039457583867175641284608 /*  -2^47 as evm word   */
+    rule maxSInt48       =>  140737488355327                                                                /*   2^47 - 1           */
+    rule minSInt56       => -36028797018963968                                                              /*  -2^55               */
+    rule minSInt56Word   =>  115792089237316195423570985008687907853269984665640564039457547979116110675968 /*  -2^55 as evm word   */
+    rule maxSInt56       =>  36028797018963967                                                              /*   2^55 - 1           */
+    rule minSInt64       => -9223372036854775808                                                            /*  -2^63               */
+    rule minSInt64Word   =>  115792089237316195423570985008687907853269984665640564039448360635876274864128 /*  -2^63 as evm word   */
+    rule maxSInt64       =>  9223372036854775807                                                            /*   2^63 - 1           */
+    rule minSInt72       => -2361183241434822606848                                                         /*  -2^71               */
+    rule minSInt72Word   =>  115792089237316195423570985008687907853269984665640564037096400766478307033088 /*  -2^71 as evm word   */
+    rule maxSInt72       =>  2361183241434822606847                                                         /*   2^71 - 1           */
+    rule minSInt80       => -604462909807314587353088                                                       /*  -2^79               */
+    rule minSInt80Word   =>  115792089237316195423570985008687907853269984665640563434994674200598542286848 /*  -2^79 as evm word   */
+    rule maxSInt80       =>  604462909807314587353087                                                       /*   2^79 - 1           */
+    rule minSInt88       => -154742504910672534362390528                                                    /*  -2^87               */
+    rule minSInt88Word   =>  115792089237316195423570985008687907853269984665640409296952673335378767249408 /*  -2^87 as evm word   */
+    rule maxSInt88       =>  154742504910672534362390527                                                    /*   2^87 - 1           */
+    rule minSInt96       => -39614081257132168796771975168                                                  /*  -2^95               */
+    rule minSInt96Word   =>  115792089237316195423570985008687907853269984665600949958200451839116357664768 /*  -2^95 as evm word   */
+    rule maxSInt96       =>  39614081257132168796771975167                                                  /*   2^95 - 1           */
+    rule minSInt104      => -10141204801825835211973625643008                                               /*  -2^103              */
+    rule minSInt104Word  =>  115792089237316195423570985008687907853269984655499359237631748795939503996928 /*  -2^103 as evm word  */
+    rule maxSInt104      =>  10141204801825835211973625643007                                               /*   2^103 - 1          */
+    rule minSInt112      => -2596148429267413814265248164610048                                             /*  -2^111              */
+    rule minSInt112Word  =>  115792089237316195423570985008687907853269982069492134772043769742664965029888 /*  -2^111 as evm word  */
+    rule maxSInt112      =>  2596148429267413814265248164610047                                             /*   2^111 - 1          */
+    rule minSInt120      => -664613997892457936451903530140172288                                           /*  -2^119              */
+    rule minSInt120Word  =>  115792089237316195423570985008687907853269320051642671581521132104382989467648 /*  -2^119 as evm word  */
+    rule maxSInt120      =>  664613997892457936451903530140172287                                           /*   2^119 - 1          */
+    rule minSInt128      => -170141183460469231731687303715884105728                                        /*  -2^127              */
+    rule minSInt128Word  =>  115792089237316195423570985008687907853099843482180094807725896704197245534208 /*  -2^127 as evm word  */
+    rule maxSInt128      =>  170141183460469231731687303715884105727                                        /*   2^127 as evm word  */
+    rule minSInt136      => -43556142965880123323311949751266331066368                                      /*  -2^135               */
+    rule minSInt136Word  =>  115792089237316195423570985008687907809713841699760440716145634256646798573568 /*  -2^135 as evm word   */
+    rule maxSInt136      =>  43556142965880123323311949751266331066367                                      /*   2^135 - 1           */
+    rule minSInt144      => -11150372599265311570767859136324180752990208                                   /*  -2^143               */
+    rule minSInt144Word  =>  115792089237316195423570985008687896702897385400328993271598447683732376649728 /*  -2^143 as evm word   */
+    rule maxSInt144      =>  11150372599265311570767859136324180752990207                                   /*   2^143 - 1           */
+    rule minSInt152      => -2854495385411919762116571938898990272765493248                                 /*  -2^151               */
+    rule minSInt152Word  =>  115792089237316195423570985008685053357884572745878447467518685017640364146688 /*  -2^151 as evm word   */
+    rule maxSInt152      =>  2854495385411919762116571938898990272765493247                                 /*   2^151 - 1           */
+    rule minSInt160      => -730750818665451459101842416358141509827966271488                               /*  -2^159               */
+    rule minSInt160Word  =>  115792089237316195423570985007957157034604533206538721623099442498085163368448 /*  -2^159 as evm word   */
+    rule maxSInt160      =>  730750818665451459101842416358141509827966271487                               /*   2^159 - 1           */
+    rule minSInt168      => -187072209578355573530071658587684226515959365500928                            /*  -2^167               */
+    rule minSInt168Word  =>  115792089237316195423570984821615698274914411135568905451773357491953764139008 /*  -2^167 as evm word   */
+    rule maxSInt168      =>  187072209578355573530071658587684226515959365500927                            /*   2^167 - 1           */
+    rule minSInt176      => -47890485652059026823698344598447161988085597568237568                          /*  -2^175               */
+    rule minSInt176Word  =>  115792089237316195423570937118202255794243160967295965592295595922315561402368 /*  -2^175 as evm word   */
+    rule maxSInt176      =>  47890485652059026823698344598447161988085597568237567                          /*   2^175 - 1           */
+    rule minSInt184      => -12259964326927110866866776217202473468949912977468817408                       /*  -2^183               */
+    rule minSInt184Word  =>  115792089237316195423558725044360980742403117889423361565988634094935660822528 /*  -2^183 as evm word   */
+    rule maxSInt184      =>  12259964326927110866866776217202473468949912977468817407                       /*   2^183 - 1           */
+    rule minSInt192      => -3138550867693340381917894711603833208051177722232017256448                     /*  -2^191               */
+    rule minSInt192Word  =>  115792089237316195420432434140994567471352089954036730831406406285681112383488 /*  -2^191 as evm word   */
+    rule maxSInt192      =>  3138550867693340381917894711603833208051177722232017256447                     /*   2^191 - 1           */
+    rule minSInt200      => -803469022129495137770981046170581301261101496891396417650688                   /*  -2^199               */
+    rule minSInt200Word  =>  115792089237316194620101962879192770082288938495059262778356087116516711989248 /*  -2^199 as evm word   */
+    rule maxSInt200      =>  803469022129495137770981046170581301261101496891396417650687                   /*   2^199 - 1           */
+    rule minSInt208      => -205688069665150755269371147819668813122841983204197482918576128                /*  -2^207                */
+    rule minSInt208Word  =>  115792089237315989735501319857932638482122164996827441197474379810430211063808 /*  -2^207  as evm word   */
+    rule maxSInt208      =>  205688069665150755269371147819668813122841983204197482918576127                /*   2^207  - 1           */
+    rule minSInt216      => -52656145834278593348959013841835216159447547700274555627155488768              /*  -2^215                */
+    rule minSInt216Word  =>  115792089237263539277736706415338948839428149449481116491757309452285974151168 /*  -2^215  as evm word   */
+    rule maxSInt216      =>  52656145834278593348959013841835216159447547700274555627155488767              /*   2^215  - 1           */
+    rule minSInt224      => -13479973333575319897333507543509815336818572211270286240551805124608           /*  -2^223               */
+    rule minSInt224Word  =>  115792089223836222089995665111354400309760169328821991828187297767361324515328 /*  -2^223  as evm word  */
+    rule maxSInt224      =>  13479973333575319897333507543509815336818572211270286240551805124607           /*   2^223  - 1          */
+    rule minSInt232      => -3450873173395281893717377931138512726225554486085193277581262111899648         /*  -2^231               */
+    rule minSInt232Word  =>  115792085786443022028289091291309976714757258440086077954264306426651017740288 /*  -2^231  as evm word  */
+    rule maxSInt232      =>  3450873173395281893717377931138512726225554486085193277581262111899647         /*   2^231  - 1          */
+    rule minSInt240      => -883423532389192164791648750371459257913741948437809479060803100646309888       /*  -2^239               */
+    rule minSInt240Word  =>  115791205813783806231406193359937536394012070923692126229978523204812483330048 /*  -2^239  as evm word  */
+    rule maxSInt240      =>  883423532389192164791648750371459257913741948437809479060803100646309887       /*   2^239  - 1          */
+    rule minSInt248      => -226156424291633194186662080095093570025917938800079226639565593765455331328    /*  -2^247               */
+    rule minSInt248Word  =>  115565932813024562229384322928592814283244066726840484812818018414147674308608 /*  -2^247  as evm word  */
+    rule maxSInt248      =>  226156424291633194186662080095093570025917938800079226639565593765455331327    /*   2^247  - 1          */
+    rule minSInt256      => -57896044618658097711785492504343953926634992332820282019728792003956564819968  /*  -2^255               */
+    rule minSInt256Word  =>  57896044618658097711785492504343953926634992332820282019728792003956564819968  /*  -2^255  as evm word  */
+    rule maxSInt256      =>  57896044618658097711785492504343953926634992332820282019728792003956564819967  /*   2^255  - 1          */
+
+    rule minSFixed128x10 => -1701411834604692317316873037158841057280000000000                              /* (-2^487    ) * 10^10 */
+    rule maxSFixed128x10 =>  1701411834604692317316873037158841057270000000000                              /* ( 2^487 - 1) * 10^10 */
+
+    rule minUInt8        =>  0
+    rule maxUInt8        =>  255                                                                            /*   2^8 - 1  */
+    rule minUInt16       =>  0
+    rule maxUInt16       =>  65535                                                                          /*   2^16 - 1  */
+    rule minUInt24       =>  0
+    rule maxUInt24       =>  16777215                                                                       /*   2^24 - 1  */
+    rule minUInt32       =>  0
+    rule maxUInt32       =>  4294967295                                                                     /*   2^32 - 1  */
+    rule minUInt40       =>  0
+    rule maxUInt40       =>  1099511627775                                                                  /*   2^40 - 1  */
+    rule minUInt48       =>  0
+    rule maxUInt48       =>  281474976710655                                                                /*   2^48 - 1  */
+    rule minUInt56       =>  0
+    rule maxUInt56       =>  72057594037927935                                                              /*   2^56 - 1  */
+    rule minUInt64       =>  0
+    rule maxUInt64       =>  18446744073709551615                                                           /*   2^64 - 1  */
+    rule minUInt72       =>  0
+    rule maxUInt72       =>  4722366482869645213695                                                         /*   2^72 - 1  */
+    rule minUInt80       =>  0
+    rule maxUInt80       =>  1208925819614629174706175                                                      /*   2^80 - 1  */
+    rule minUInt88       =>  0
+    rule maxUInt88       =>  309485009821345068724781055                                                    /*   2^88 - 1  */
+    rule minUInt96       =>  0
+    rule maxUInt96       =>  79228162514264337593543950335                                                  /*   2^96 - 1  */
+    rule minUInt104      =>  0
+    rule maxUInt104      =>  20282409603651670423947251286015                                               /*   2^104 - 1  */
+    rule minUInt112      =>  0
+    rule maxUInt112      =>  5192296858534827628530496329220095                                             /*   2^112 - 1  */
+    rule minUInt120      =>  0
+    rule maxUInt120      =>  1329227995784915872903807060280344575                                          /*   2^120 - 1  */
+    rule minUInt128      =>  0
+    rule maxUInt128      =>  340282366920938463463374607431768211455                                        /*   2^128 - 1  */
+    rule minUInt136      =>  0
+    rule maxUInt136      =>  87112285931760246646623899502532662132735                                      /*   2^136 - 1  */
+    rule minUInt144      =>  0
+    rule maxUInt144      =>  22300745198530623141535718272648361505980415                                   /*   2^144 - 1  */
+    rule minUInt152      =>  0
+    rule maxUInt152      =>  5708990770823839524233143877797980545530986495                                 /*   2^152 - 1  */
+    rule minUInt160      =>  0
+    rule maxUInt160      =>  1461501637330902918203684832716283019655932542975                              /*   2^160 - 1  */
+    rule minUInt168      =>  0
+    rule maxUInt168      =>  374144419156711147060143317175368453031918731001855                            /*   2^168 - 1  */
+    rule minUInt176      =>  0
+    rule maxUInt176      =>  95780971304118053647396689196894323976171195136475135                          /*   2^176 - 1  */
+    rule minUInt184      =>  0
+    rule maxUInt184      =>  24519928653854221733733552434404946937899825954937634815                       /*   2^184 - 1  */
+    rule minUInt192      =>  0
+    rule maxUInt192      =>  6277101735386680763835789423207666416102355444464034512895                     /*   2^192 - 1  */
+    rule minUInt200      =>  0
+    rule maxUInt200      =>  1606938044258990275541962092341162602522202993782792835301375                  /*   2^200 - 1  */
+    rule minUInt208      =>  0
+    rule maxUInt208      =>  411376139330301510538742295639337626245683966408394965837152255                /*   2^208 - 1  */
+    rule minUInt216      =>  0
+    rule maxUInt216      =>  105312291668557186697918027683670432318895095400549111254310977535             /*   2^216 - 1  */
+    rule minUInt224      =>  0
+    rule maxUInt224      =>  26959946667150639794667015087019630673637144422540572481103610249215           /*   2^224 - 1  */
+    rule minUInt232      =>  0
+    rule maxUInt232      =>  6901746346790563787434755862277025452451108972170386555162524223799295         /*   2^232 - 1  */
+    rule minUInt240      =>  0
+    rule maxUInt240      =>  1766847064778384329583297500742918515827483896875618958121606201292619775      /*   2^240 - 1  */
+    rule minUInt248      =>  0
+    rule maxUInt248      =>  452312848583266388373324160190187140051835877600158453279131187530910662655    /*   2^248 - 1  */
+    rule minUInt256      =>  0
+    rule maxUInt256      =>  115792089237316195423570985008687907853269984665640564039457584007913129639935 /*   2^256 - 1  */
+
+    rule minUFixed128x10 =>  0
+    rule maxUFixed128x10 =>  3402823669209384634633746074317682114550000000000                              /* ( 2^128 - 1) * 10^10 */
+
+    syntax Int ::= "notMaxUInt5"   [alias] /* FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 */
+                 | "notMaxUInt96"  [alias] /* FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 */
+                 | "notMaxUInt128" [alias] /* FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 */
+                 | "notMaxUInt160" [alias] /* FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 */
+                 | "notMaxUInt192" [alias] /* FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 */
+                 | "notMaxUInt208" [alias] /* FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000 */
+                 | "notMaxUInt224" [alias] /* FFFFFFFF00000000000000000000000000000000000000000000000000000000 */
+ // -------------------------------------------------------------------------------------------------------------
+    rule notMaxUInt5   => 115792089237316195423570985008687907853269984665640564039457584007913129639904
+    rule notMaxUInt96  => 115792089237316195423570985008687907853269984665561335876943319670319585689600
+    rule notMaxUInt128 => 115792089237316195423570985008687907852929702298719625575994209400481361428480
+    rule notMaxUInt160 => 115792089237316195423570985007226406215939081747436879206741300988257197096960
+    rule notMaxUInt192 => 115792089237316195417293883273301227089434195242432897623355228563449095127040
+    rule notMaxUInt208 => 115792089237315784047431654707177369110974345328014318355491175612947292487680
+    rule notMaxUInt224 => 115792089210356248756420345214020892766250353992003419616917011526809519390720
+
+    syntax Int ::= "eth"         [macro]
+                 | "maxBlockNum" [macro] /* 7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF == (2 ^ 256) - (2 ^ 255) - 1 */
+ // ----------------------------------------------------------------------------------------------------------------------------------------
+    rule eth         => 1000000000000000000
+    rule maxBlockNum => 57896044618658097711785492504343953926634992332820282019728792003956564819967
+
+

Range of types

+
    syntax Bool ::= #rangeBool     ( Int )             [alias]
+                  | #rangeSInt     ( Int , Int )       [alias]
+                  | #rangeUInt     ( Int , Int )       [alias]
+                  | #rangeSFixed   ( Int , Int , Int ) [alias]
+                  | #rangeUFixed   ( Int , Int , Int ) [alias]
+                  | #rangeAddress  ( Int )             [alias]
+                  | #rangeBytes    ( Int , Int )       [alias]
+                  | #rangeNonce    ( Int )             [alias]
+                  | #rangeSmall    ( Int )             [alias]
+                  | #rangeBlockNum ( Int )             [alias]
+ // ----------------------------------------------------------
+    rule #rangeBool    (            X ) => X ==Int 0 orBool X ==Int 1
+
+    rule #rangeSInt    (   8 ,      X ) => #range ( minSInt8        <= X <  maxSInt8        )
+    rule #rangeSInt    (  16 ,      X ) => #range ( minSInt16       <= X <  maxSInt16       )
+    rule #rangeSInt    (  24 ,      X ) => #range ( minSInt24       <= X <  maxSInt24       )
+    rule #rangeSInt    (  32 ,      X ) => #range ( minSInt32       <= X <  maxSInt32       )
+    rule #rangeSInt    (  40 ,      X ) => #range ( minSInt40       <= X <  maxSInt40       )
+    rule #rangeSInt    (  48 ,      X ) => #range ( minSInt48       <= X <  maxSInt48       )
+    rule #rangeSInt    (  56 ,      X ) => #range ( minSInt56       <= X <  maxSInt56       )
+    rule #rangeSInt    (  64 ,      X ) => #range ( minSInt64       <= X <  maxSInt64       )
+    rule #rangeSInt    (  72 ,      X ) => #range ( minSInt72       <= X <  maxSInt72       )
+    rule #rangeSInt    (  80 ,      X ) => #range ( minSInt80       <= X <  maxSInt80       )
+    rule #rangeSInt    (  88 ,      X ) => #range ( minSInt88       <= X <  maxSInt88       )
+    rule #rangeSInt    (  96 ,      X ) => #range ( minSInt96       <= X <  maxSInt96       )
+    rule #rangeSInt    ( 104 ,      X ) => #range ( minSInt104      <= X <  maxSInt104      )
+    rule #rangeSInt    ( 112 ,      X ) => #range ( minSInt112      <= X <  maxSInt112      )
+    rule #rangeSInt    ( 120 ,      X ) => #range ( minSInt120      <= X <  maxSInt120      )
+    rule #rangeSInt    ( 128 ,      X ) => #range ( minSInt128      <= X <  maxSInt128      )
+    rule #rangeSInt    ( 136 ,      X ) => #range ( minSInt136      <= X <  maxSInt136      )
+    rule #rangeSInt    ( 144 ,      X ) => #range ( minSInt144      <= X <  maxSInt144      )
+    rule #rangeSInt    ( 152 ,      X ) => #range ( minSInt152      <= X <  maxSInt152      )
+    rule #rangeSInt    ( 160 ,      X ) => #range ( minSInt160      <= X <  maxSInt160      )
+    rule #rangeSInt    ( 168 ,      X ) => #range ( minSInt168      <= X <  maxSInt168      )
+    rule #rangeSInt    ( 176 ,      X ) => #range ( minSInt176      <= X <  maxSInt176      )
+    rule #rangeSInt    ( 184 ,      X ) => #range ( minSInt184      <= X <  maxSInt184      )
+    rule #rangeSInt    ( 192 ,      X ) => #range ( minSInt192      <= X <  maxSInt192      )
+    rule #rangeSInt    ( 200 ,      X ) => #range ( minSInt200      <= X <  maxSInt200      )
+    rule #rangeSInt    ( 208 ,      X ) => #range ( minSInt208      <= X <  maxSInt208      )
+    rule #rangeSInt    ( 216 ,      X ) => #range ( minSInt216      <= X <  maxSInt216      )
+    rule #rangeSInt    ( 224 ,      X ) => #range ( minSInt224      <= X <  maxSInt224      )
+    rule #rangeSInt    ( 232 ,      X ) => #range ( minSInt232      <= X <  maxSInt232      )
+    rule #rangeSInt    ( 240 ,      X ) => #range ( minSInt240      <= X <  maxSInt240      )
+    rule #rangeSInt    ( 248 ,      X ) => #range ( minSInt248      <= X <  maxSInt248      )
+    rule #rangeSInt    ( 256 ,      X ) => #range ( minSInt256      <= X <= maxSInt256      )
+
+    rule #rangeUInt    (   8 ,      X ) => #range ( minUInt8        <= X <  pow8            )
+    rule #rangeUInt    (  16 ,      X ) => #range ( minUInt16       <= X <  pow16           )
+    rule #rangeUInt    (  24 ,      X ) => #range ( minUInt24       <= X <  pow24           )
+    rule #rangeUInt    (  32 ,      X ) => #range ( minUInt32       <= X <  pow32           )
+    rule #rangeUInt    (  40 ,      X ) => #range ( minUInt40       <= X <  pow40           )
+    rule #rangeUInt    (  48 ,      X ) => #range ( minUInt48       <= X <  pow48           )
+    rule #rangeUInt    (  56 ,      X ) => #range ( minUInt56       <= X <  pow56           )
+    rule #rangeUInt    (  64 ,      X ) => #range ( minUInt64       <= X <  pow64           )
+    rule #rangeUInt    (  72 ,      X ) => #range ( minUInt72       <= X <  pow72           )
+    rule #rangeUInt    (  80 ,      X ) => #range ( minUInt80       <= X <  pow80           )
+    rule #rangeUInt    (  88 ,      X ) => #range ( minUInt88       <= X <  pow88           )
+    rule #rangeUInt    (  96 ,      X ) => #range ( minUInt96       <= X <  pow96           )
+    rule #rangeUInt    ( 104 ,      X ) => #range ( minUInt104      <= X <  pow104          )
+    rule #rangeUInt    ( 112 ,      X ) => #range ( minUInt112      <= X <  pow112          )
+    rule #rangeUInt    ( 120 ,      X ) => #range ( minUInt120      <= X <  pow120          )
+    rule #rangeUInt    ( 128 ,      X ) => #range ( minUInt128      <= X <  pow128          )
+    rule #rangeUInt    ( 136 ,      X ) => #range ( minUInt136      <= X <  pow136          )
+    rule #rangeUInt    ( 144 ,      X ) => #range ( minUInt144      <= X <  pow144          )
+    rule #rangeUInt    ( 152 ,      X ) => #range ( minUInt152      <= X <  pow152          )
+    rule #rangeUInt    ( 160 ,      X ) => #range ( minUInt160      <= X <  pow160          )
+    rule #rangeUInt    ( 168 ,      X ) => #range ( minUInt168      <= X <  pow168          )
+    rule #rangeUInt    ( 176 ,      X ) => #range ( minUInt176      <= X <  pow176          )
+    rule #rangeUInt    ( 184 ,      X ) => #range ( minUInt184      <= X <  pow184          )
+    rule #rangeUInt    ( 192 ,      X ) => #range ( minUInt192      <= X <  pow192          )
+    rule #rangeUInt    ( 200 ,      X ) => #range ( minUInt200      <= X <  pow200          )
+    rule #rangeUInt    ( 208 ,      X ) => #range ( minUInt208      <= X <  pow208          )
+    rule #rangeUInt    ( 216 ,      X ) => #range ( minUInt216      <= X <  pow216          )
+    rule #rangeUInt    ( 224 ,      X ) => #range ( minUInt224      <= X <  pow224          )
+    rule #rangeUInt    ( 232 ,      X ) => #range ( minUInt232      <= X <  pow232          )
+    rule #rangeUInt    ( 240 ,      X ) => #range ( minUInt240      <= X <  pow240          )
+    rule #rangeUInt    ( 248 ,      X ) => #range ( minUInt248      <= X <  pow248          )
+    rule #rangeUInt    ( 256 ,      X ) => #range ( minUInt256      <= X <  pow256          )
+
+    rule #rangeSFixed   ( 128 , 10 , X ) => #range ( minSFixed128x10 <= X <= maxSFixed128x10 )
+    rule #rangeUFixed   ( 128 , 10 , X ) => #range ( minUFixed128x10 <= X <= maxUFixed128x10 )
+    rule #rangeAddress  (            X ) => #range ( minUInt160      <= X <  pow160          )
+    rule #rangeBytes    (   N ,      X ) => #range ( 0               <= X <  1 <<Byte N      )
+    rule #rangeNonce    (   X          ) => #range ( 0               <= X < maxUInt64        )
+    rule #rangeSmall    (   X          ) => #range ( 0               <= X < 10               )
+    rule #rangeBlockNum (   X          ) => #range ( 0               <= X <= maxBlockNum     )
+
+    syntax Bool ::= "#range" "(" Int "<"  Int "<"  Int ")" [macro]
+                  | "#range" "(" Int "<"  Int "<=" Int ")" [macro]
+                  | "#range" "(" Int "<=" Int "<"  Int ")" [macro]
+                  | "#range" "(" Int "<=" Int "<=" Int ")" [macro]
+ // --------------------------------------------------------------
+    rule #range ( LB <  X <  UB ) => LB  <Int X andBool X  <Int UB
+    rule #range ( LB <  X <= UB ) => LB  <Int X andBool X <=Int UB
+    rule #range ( LB <= X <  UB ) => LB <=Int X andBool X  <Int UB
+    rule #range ( LB <= X <= UB ) => LB <=Int X andBool X <=Int UB
+
+
    +
  • chop interprets an integer modulo 2^256.
  • +
+
    syntax Int ::= chop ( Int ) [function, total, smtlib(chop)]
+ // -----------------------------------------------------------
+    rule chop ( I:Int ) => I modInt pow256 [concrete, smt-lemma]
+
+
    +
  • _<<Byte_ shifts an integer 8 bits to the left.
  • +
  • _>>Byte_ shifts an integer 8 bits to the right.
  • +
+
    syntax Int ::= Int "<<Byte" Int [function]
+                 | Int ">>Byte" Int [function]
+ // ------------------------------------------
+    rule N <<Byte M => N <<Int (8 *Int M)
+    rule N >>Byte M => N >>Int (8 *Int M)
+
+endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000000..e3e4b1974a --- /dev/null +++ b/index.html @@ -0,0 +1,605 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

KEVM: Semantics of EVM in K

+

In this repository, we provide a model of the EVM in K.

+

Fast Installation

+
    +
  • bash <(curl https://kframework.org/install): install kup package manager.
  • +
  • kup install kevm: install KEVM.
  • +
  • kup list kevm: list available KEVM versions.
  • +
  • kup update kevm: update to latest KEVM version.
  • +
+

NOTE: The first run will take longer to fetch all the libraries and compile sources. (30m to 1h)

+

Documentation/Support

+

These may be useful for learning KEVM and K (newest to oldest):

+ +

To get support for KEVM, please join our Discord Channel.

+

If you want to start proving with KEVM, refer to VERIFICATION.md.

+

Repository Structure

+

The following files constitute the KEVM semantics:

+
    +
  • network.md provides the status codes reported to an Ethereum client on execution exceptions.
  • +
  • json-rpc.md is an implementation of JSON RPC in K.
  • +
  • evm-types.md provides the (functional) data of EVM (256-bit words, wordstacks, etc...).
  • +
  • serialization.md provides helpers for parsing and unparsing data (hex strings, recursive-length prefix, Merkle trees, etc.).
  • +
  • evm.md is the main KEVM semantics, containing EVM’s configuration and transition rules.
  • +
  • gas.md contains all information relevant to gas.
  • +
  • schedule.md contains all information relevant to EVM schedules.
  • +
+

These additional files extend the semantics to make the repository more useful:

+
    +
  • buf.md defines the #buf byte-buffer abstraction for use during symbolic execution.
  • +
  • abi.md defines the Contract ABI Specification for use in proofs and easy contract/function specification.
  • +
  • hashed-locations.md defines the #hashedLocation abstraction used to specify Solidity-generated storage layouts.
  • +
  • edsl.md combines the previous three abstractions for ease-of-use.
  • +
  • foundry.md adds Foundry capabilities to KEVM.
  • +
+

These files are used for testing the semantics itself:

+
    +
  • state-utils.md provides functionality for EVM initialization, setup, and querying.
  • +
  • driver.md is an execution harness for KEVM, providing a simple language for describing tests/programs.
  • +
+

Building from source

+

There are two backends of K available: LLVM for concrete execution and Haskell for symbolic execution. +This repository generates the build-products for each backend in .build/usr/lib/kevm.

+

System Dependencies

+

First install the following tools:

+ +

Installing Z3

+

KEVM requires Z3 version 4.12.1, which you may need to install from a source build if your package manager supplies a different version. +To do so, follow the instructions here after checking out the correct tag in the Z3 repository:

+
git clone https://github.com/Z3Prover/z3.git
+cd z3
+git checkout z3-4.12.1
+python scripts/mk_make.py
+cd build
+make
+sudo make install
+
+

On macOS, it is easiest to install Z3 from Homebrew. +If you wish to install from the source, install it to an appropriate prefix (e.g. /usr/local on Intel machines).

+

Ubuntu

+

On Ubuntu >= 22.04 (for example):

+
sudo apt-get install --yes                                                             \
+            autoconf bison clang-12 cmake curl flex gcc jq libboost-test-dev           \
+            libcrypto++-dev libffi-dev libgflags-dev libjemalloc-dev libmpfr-dev       \
+            libprocps-dev libsecp256k1-dev libssl-dev libtool libyaml-dev lld-12       \
+            llvm-12-tools make maven netcat-openbsd openjdk-11-jdk pkg-config          \
+            protobuf-compiler python3 python3-dev python3-pip rapidjson-dev time       \
+            zlib1g-dev libfmt-dev
+
+

On Ubuntu < 18.04, you'll need to skip libsecp256k1-dev and instead build it from source (via our Makefile):

+
make libsecp256k1
+
+

Arch Linux

+

On ArchLinux:

+
sudo pacman -S                                               \
+    base base-devel boost clang cmake crypto++ curl git gmp  \
+    gflags jdk-openjdk jemalloc libsecp256k1 lld llvm maven  \
+    mpfr protobuf poetry python stack yaml-cpp zlib
+
+

macOS

+

After installing the Command Line Tools, Homebrew, and getting the blockchain plugin, run:

+
brew tap kframework/k
+brew install java automake libtool gmp mpfr pkg-config maven libffi llvm@14 openssl protobuf python bash kframework/k/cryptopp@8.6.0 poetry solidity
+make libsecp256k1
+
+

NOTE: It is recommended to use the homebrew version of flex and XCode.

+

If you are building on an Apple Silicon machine, ensure that your PATH is set up correctly before running make deps or make k-deps. +You can do so using direnv by copying macos-envrc to .envrc, then running direnv allow.

+

If the build on macOS still fails, you can also try adding the following lines to the top of your Makefile under UNAME_S:

+
ifeq ($(UNAME_S), Darwin)
+SHELL := /usr/local/bin/bash
+PATH := $(pwd)/.build/usr/bin:$(PATH)
+endif
+
+

Haskell Stack (all platforms)

+
    +
  • Haskell Stack. +Note that the version of the stack tool provided by your package manager might not be recent enough. +Please follow installation instructions from the Haskell Stack website linked above.
  • +
+

To upgrade stack (if needed):

+
stack upgrade
+export PATH=$HOME/.local/bin:$PATH
+
+

Build Dependencies

+

K Framework

+

You need to install the K Framework on your system, see the instructions there. +The fastest way is via the kup package manager, with which you can do to get the correct version of K:

+
kup install k.openssl.procps --version v$(cat deps/k_release)
+
+

You can also drop into a single development shell with the correct version of K on path by doing:

+
kup shell k.openssl.procps --version v$(cat deps/k_release)
+
+

Blockchain Plugin

+

You also need to get the blockchain plugin submodule and install it.

+
git submodule update --init --recursive -- deps/plugin
+make plugin-deps
+
+

Building

+

You need to set up a virtual environment using Poetry with the prerequisites python 3.8.*, pip >= 20.0.2, poetry >= 1.3.2:

+
make poetry
+
+

Finally, you can build the semantics.

+
make build
+
+

You can build specific targets using build-llvm, build-Haskell, or build-foundry. +For more information, refer to the Makefile.

+

Running Tests

+

To execute tests from the Ethereum Test Set, the submodule needs to be fetched first.

+
git submodule update --init --recursive  -- tests/ethereum-tests
+
+

The tests are run using the supplied Makefile. +Run make build-prove to generate tests from the markdown files.

+

The following subsume all other tests:

+
    +
  • make test: All of the quick tests.
  • +
  • make test-all: All of the quick and slow tests.
  • +
+

These are the individual test-suites (all of these can be suffixed with -all to also run slow tests):

+ +

When running tests with the Makefile, you can specify the TEST_CONCRETE_BACKEND (for concrete tests), or TEST_SYMBOLIC_BACKEND (for proofs).

+

For Developers

+

If built from the source, the kevm executable will be in the .build/usr/bin directory. +To make sure you are using the correct kevm, add this directory to your PATH:

+
export PATH=$(pwd)/.build/usr/bin:$PATH
+
+

Alternatively, if you work on multiple checkouts of evm-semantics or other semantics, you could add the relative path .build/usr/bin to your PATH. +Do note, however, that this is a security concern.

+

You can call kevm --help to get a quick summary of how to use the script.

+

Run the file tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/add0.json:

+
kevm run tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/add0.json --schedule DEFAULT --mode VMTESTS
+
+

To enable the debug symbols for the llvm backend, build using this command:

+
make build-llvm KEVM_OPTS=--enable-llvm-debug
+
+

To debug a conformance test, add the --debugger flag to the command:

+
kevm run tests/ethereum-tests/BlockchainTests/GeneralStateTests/stExample/add11.json --target llvm --mode NORMAL --schedule MERGE --chainid 1 --debugger
+
+

Keeping in mind while developing

+

Always have your build up-to-date.

+
    +
  • If using the kup package manager, run kup install kevm --version . to install the local version.
  • +
  • If building from source: +
      +
    • make poetry needs to be re-run if you touch any of the kevm-pyk code.
    • +
    • make build needs to be re-run if you touch any of this repos files.
    • +
    • make deps needs to be re-run if there is an update of the K submodule (you did git submodule update --init --recursive -- deps/k and it actually did something).
    • +
    • If both deps and build need to be re-run, you need to do deps first.
    • +
    • make clean is a safe way to remove the .build directory, but then you need to re-run make deps (should be quick this time) and make build.
    • +
    +
  • +
+

Building with Nix

+

We now support building KEVM using nix flakes. +To set up nix flakes you will need to be on nix 2.4 or higher and follow the instructions here.

+

For example, if you are on a standard Linux distribution, such as Ubuntu, first install nix +and then enable flakes by editing either ~/.config/nix/nix.conf or /etc/nix/nix.conf and adding:

+
experimental-features = nix-command flakes
+
+

This is needed to expose the Nix 2.0 CLI and flakes support that are hidden behind feature-flags.

+

By default, Nix will build the project and its transitive dependencies from source, which can take up to an hour. +We recommend setting up the binary cache to speed up the build process significantly.

+

To build KEVM, run:

+
nix build .#kevm
+
+

This will build all of KEVM and K and put a link to the resulting binaries in the result/ folder.

+

NOTE: Mac users, especially those running M1/M2 Macs may find nix segfaulting on occasion. If this happens, try running the nix command like this: GC_DONT_GC=1 nix build .

+

If you want to temporarily add the kevm binary to the current shell, run

+
nix shell .#kevm
+
+

Profiling with Nix

+

Nix can also be used to quickly profile different versions of the Haskell backend. Simply run:

+
nix build github:runtimeverification/evm-semantics#profile \
+  --override-input k-framework/haskell-backend github:runtimeverification/haskell-backend/<HASH> \
+  -o prof-<HASH>
+
+

replacing <HASH> with the commit you want to run profiling against.

+

If you want to profile against a working version of the Haskell backend repository, simply cd into the root of the repo and run:

+
nix build github:runtimeverification/evm-semantics#profile \
+  --override-input k-framework/haskell-backend $(pwd) \
+  -o prof-my-feature
+
+

To compare profiles, you can use:

+
nix run github:runtimeverification/evm-semantics#compare-profiles -- prof-my-feature prof-<HASH>
+
+

This will produce a nice table with the times for both versions of the haskell-backend. +Note that #profile pre-pends the output of kore-exec --version to the profile run, which is then used as a tag by the #compare-profiles script. +Therefore, any profiled local checkout of the haskell-backend will report as dirty-ghc8107 in the resulting table.

+

Media

+

This repository can build two pieces of documentation for you, the Jello Paper and the 2017 Devcon3 presentation.

+

System Dependencies

+

For the presentations in the media directory, you'll need pdflatex, commonly provided with texlive-full, and pandoc.

+
sudo apt install texlive-full pandoc
+
+

Building

+

To build all the PDFs (presentations and reports) available in the media/ directory, use:

+
make media
+
+

Resources

+ +

For more information about the K Framework, refer to these sources:

+ +
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/kevm-pyk/.cruft.json b/kevm-pyk/.cruft.json deleted file mode 100644 index 7986d60f9b..0000000000 --- a/kevm-pyk/.cruft.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "template": "https://github.com/runtimeverification/python-project-template.git", - "commit": "601d5e2a0e8a98c87dcb1ae694d22d76d0114e01", - "checkout": null, - "context": { - "cookiecutter": { - "project_name": "kevm-pyk", - "project_slug": "kevm-pyk", - "package_name": "kevm_pyk", - "version": "0.1.0", - "description": "", - "author_name": "Runtime Verification, Inc.", - "author_email": "contact@runtimeverification.com", - "_template": "https://github.com/runtimeverification/python-project-template.git" - } - }, - "directory": null -} diff --git a/kevm-pyk/.flake8 b/kevm-pyk/.flake8 deleted file mode 100644 index a518873c68..0000000000 --- a/kevm-pyk/.flake8 +++ /dev/null @@ -1,7 +0,0 @@ -[flake8] -max-line-length = 120 -extend-select = B9, TC1 -extend-ignore = B950,E,W1,W2,W3,W4,W5 -per-file-ignores = - */__init__.py: F401 -type-checking-strict = true diff --git a/kevm-pyk/.gitignore b/kevm-pyk/.gitignore deleted file mode 100644 index 98fe5a7f3d..0000000000 --- a/kevm-pyk/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/dist/ -__pycache__/ -.coverage diff --git a/kevm-pyk/Makefile b/kevm-pyk/Makefile deleted file mode 100644 index f9e74a7181..0000000000 --- a/kevm-pyk/Makefile +++ /dev/null @@ -1,100 +0,0 @@ -POETRY := poetry -POETRY_RUN := $(POETRY) run - - -default: check test-unit - -all: check cov - -.PHONY: clean -clean: - rm -rf dist .coverage cov-* .mypy_cache .pytest_cache - find -type d -name __pycache__ -prune -exec rm -rf {} \; - -.PHONY: build -build: - $(POETRY) build - -.PHONY: poetry-install -poetry-install: - $(POETRY) install - - -# Tests - -TEST_ARGS := - -test: test-all - -test-all: poetry-install - $(POETRY_RUN) pytest src/tests --maxfail=1 --verbose --durations=0 --numprocesses=4 --dist=worksteal $(TEST_ARGS) - -test-unit: poetry-install - $(POETRY_RUN) pytest src/tests/unit --maxfail=1 --verbose $(TEST_ARGS) - -test-integration: poetry-install - $(POETRY_RUN) pytest src/tests/integration --maxfail=1 --verbose --durations=0 --numprocesses=4 --dist=worksteal $(TEST_ARGS) - - -# Coverage - -COV_ARGS := - -cov: cov-all - -cov-%: TEST_ARGS += --cov=kevm_pyk --no-cov-on-fail --cov-branch --cov-report=term - -cov-all: TEST_ARGS += --cov-report=html:cov-all-html $(COV_ARGS) -cov-all: test-all - -cov-unit: TEST_ARGS += --cov-report=html:cov-unit-html $(COV_ARGS) -cov-unit: test-unit - -cov-integration: TEST_ARGS += --cov-report=html:cov-integration-html $(COV_ARGS) -cov-integration: test-integration - - -# Profiling - -PROF_ARGS := - -profile: poetry-install - $(POETRY_RUN) pytest src/tests/profiling --maxfail=1 --verbose --durations=0 --numprocesses=4 --dist=worksteal $(PROF_ARGS) - - -# Checks and formatting - -format: autoflake isort black -check: check-flake8 check-mypy check-autoflake check-isort check-black - -check-flake8: poetry-install - $(POETRY_RUN) flake8 src - -check-mypy: poetry-install - $(POETRY_RUN) mypy src - -autoflake: poetry-install - $(POETRY_RUN) autoflake --quiet --in-place src - -check-autoflake: poetry-install - $(POETRY_RUN) autoflake --quiet --check src - -isort: poetry-install - $(POETRY_RUN) isort src - -check-isort: poetry-install - $(POETRY_RUN) isort --check src - -black: poetry-install - $(POETRY_RUN) black src - -check-black: poetry-install - $(POETRY_RUN) black --check src - - -# Optional tools - -SRC_FILES := $(shell find src -type f -name '*.py') - -pyupgrade: poetry-install - $(POETRY_RUN) pyupgrade --py310-plus $(SRC_FILES) diff --git a/kevm-pyk/poetry.lock b/kevm-pyk/poetry.lock deleted file mode 100644 index b0b1ca95fb..0000000000 --- a/kevm-pyk/poetry.lock +++ /dev/null @@ -1,1051 +0,0 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. - -[[package]] -name = "attrs" -version = "23.1.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.7" -files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, -] - -[package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] - -[[package]] -name = "autoflake" -version = "2.2.0" -description = "Removes unused imports and unused variables" -optional = false -python-versions = ">=3.8" -files = [ - {file = "autoflake-2.2.0-py3-none-any.whl", hash = "sha256:de409b009a34c1c2a7cc2aae84c4c05047f9773594317c6a6968bd497600d4a0"}, - {file = "autoflake-2.2.0.tar.gz", hash = "sha256:62e1f74a0fdad898a96fee6f99fe8241af90ad99c7110c884b35855778412251"}, -] - -[package.dependencies] -pyflakes = ">=3.0.0" -tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} - -[[package]] -name = "black" -version = "23.7.0" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.8" -files = [ - {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, - {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, - {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, - {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, - {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, - {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, - {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, - {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, - {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, - {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, - {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "classify-imports" -version = "4.2.0" -description = "Utilities for refactoring imports in python-like syntax." -optional = false -python-versions = ">=3.7" -files = [ - {file = "classify_imports-4.2.0-py2.py3-none-any.whl", hash = "sha256:dbbc264b70a470ed8c6c95976a11dfb8b7f63df44ed1af87328bbed2663f5161"}, - {file = "classify_imports-4.2.0.tar.gz", hash = "sha256:7abfb7ea92149b29d046bd34573d247ba6e68cc28100c801eba4af17964fc40e"}, -] - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "cmd2" -version = "2.4.3" -description = "cmd2 - quickly build feature-rich and user-friendly interactive command line applications in Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "cmd2-2.4.3-py3-none-any.whl", hash = "sha256:f1988ff2fff0ed812a2d25218a081b0fa0108d45b48ba2a9272bb98091b654e6"}, - {file = "cmd2-2.4.3.tar.gz", hash = "sha256:71873c11f72bd19e2b1db578214716f0d4f7c8fa250093c601265a9a717dee52"}, -] - -[package.dependencies] -attrs = ">=16.3.0" -pyperclip = ">=1.6" -pyreadline3 = {version = "*", markers = "sys_platform == \"win32\""} -wcwidth = ">=0.1.7" - -[package.extras] -dev = ["codecov", "doc8", "flake8", "invoke", "mypy", "nox", "pytest (>=4.6)", "pytest-cov", "pytest-mock", "sphinx", "sphinx-autobuild", "sphinx-rtd-theme", "twine (>=1.11)"] -test = ["codecov", "coverage", "gnureadline", "pytest (>=4.6)", "pytest-cov", "pytest-mock"] -validate = ["flake8", "mypy", "types-pkg-resources"] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "coloredlogs" -version = "15.0.1" -description = "Colored terminal output for Python's logging module" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, - {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, -] - -[package.dependencies] -humanfriendly = ">=9.1" - -[package.extras] -cron = ["capturer (>=2.4)"] - -[[package]] -name = "coverage" -version = "7.3.0" -description = "Code coverage measurement for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "coverage-7.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db76a1bcb51f02b2007adacbed4c88b6dee75342c37b05d1822815eed19edee5"}, - {file = "coverage-7.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c02cfa6c36144ab334d556989406837336c1d05215a9bdf44c0bc1d1ac1cb637"}, - {file = "coverage-7.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:477c9430ad5d1b80b07f3c12f7120eef40bfbf849e9e7859e53b9c93b922d2af"}, - {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce2ee86ca75f9f96072295c5ebb4ef2a43cecf2870b0ca5e7a1cbdd929cf67e1"}, - {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68d8a0426b49c053013e631c0cdc09b952d857efa8f68121746b339912d27a12"}, - {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3eb0c93e2ea6445b2173da48cb548364f8f65bf68f3d090404080d338e3a689"}, - {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:90b6e2f0f66750c5a1178ffa9370dec6c508a8ca5265c42fbad3ccac210a7977"}, - {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:96d7d761aea65b291a98c84e1250cd57b5b51726821a6f2f8df65db89363be51"}, - {file = "coverage-7.3.0-cp310-cp310-win32.whl", hash = "sha256:63c5b8ecbc3b3d5eb3a9d873dec60afc0cd5ff9d9f1c75981d8c31cfe4df8527"}, - {file = "coverage-7.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:97c44f4ee13bce914272589b6b41165bbb650e48fdb7bd5493a38bde8de730a1"}, - {file = "coverage-7.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74c160285f2dfe0acf0f72d425f3e970b21b6de04157fc65adc9fd07ee44177f"}, - {file = "coverage-7.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b543302a3707245d454fc49b8ecd2c2d5982b50eb63f3535244fd79a4be0c99d"}, - {file = "coverage-7.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad0f87826c4ebd3ef484502e79b39614e9c03a5d1510cfb623f4a4a051edc6fd"}, - {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13c6cbbd5f31211d8fdb477f0f7b03438591bdd077054076eec362cf2207b4a7"}, - {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fac440c43e9b479d1241fe9d768645e7ccec3fb65dc3a5f6e90675e75c3f3e3a"}, - {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3c9834d5e3df9d2aba0275c9f67989c590e05732439b3318fa37a725dff51e74"}, - {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4c8e31cf29b60859876474034a83f59a14381af50cbe8a9dbaadbf70adc4b214"}, - {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7a9baf8e230f9621f8e1d00c580394a0aa328fdac0df2b3f8384387c44083c0f"}, - {file = "coverage-7.3.0-cp311-cp311-win32.whl", hash = "sha256:ccc51713b5581e12f93ccb9c5e39e8b5d4b16776d584c0f5e9e4e63381356482"}, - {file = "coverage-7.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:887665f00ea4e488501ba755a0e3c2cfd6278e846ada3185f42d391ef95e7e70"}, - {file = "coverage-7.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d000a739f9feed900381605a12a61f7aaced6beae832719ae0d15058a1e81c1b"}, - {file = "coverage-7.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59777652e245bb1e300e620ce2bef0d341945842e4eb888c23a7f1d9e143c446"}, - {file = "coverage-7.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9737bc49a9255d78da085fa04f628a310c2332b187cd49b958b0e494c125071"}, - {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5247bab12f84a1d608213b96b8af0cbb30d090d705b6663ad794c2f2a5e5b9fe"}, - {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2ac9a1de294773b9fa77447ab7e529cf4fe3910f6a0832816e5f3d538cfea9a"}, - {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:85b7335c22455ec12444cec0d600533a238d6439d8d709d545158c1208483873"}, - {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:36ce5d43a072a036f287029a55b5c6a0e9bd73db58961a273b6dc11a2c6eb9c2"}, - {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:211a4576e984f96d9fce61766ffaed0115d5dab1419e4f63d6992b480c2bd60b"}, - {file = "coverage-7.3.0-cp312-cp312-win32.whl", hash = "sha256:56afbf41fa4a7b27f6635bc4289050ac3ab7951b8a821bca46f5b024500e6321"}, - {file = "coverage-7.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f297e0c1ae55300ff688568b04ff26b01c13dfbf4c9d2b7d0cb688ac60df479"}, - {file = "coverage-7.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac0dec90e7de0087d3d95fa0533e1d2d722dcc008bc7b60e1143402a04c117c1"}, - {file = "coverage-7.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:438856d3f8f1e27f8e79b5410ae56650732a0dcfa94e756df88c7e2d24851fcd"}, - {file = "coverage-7.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1084393c6bda8875c05e04fce5cfe1301a425f758eb012f010eab586f1f3905e"}, - {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49ab200acf891e3dde19e5aa4b0f35d12d8b4bd805dc0be8792270c71bd56c54"}, - {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67e6bbe756ed458646e1ef2b0778591ed4d1fcd4b146fc3ba2feb1a7afd4254"}, - {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f39c49faf5344af36042b293ce05c0d9004270d811c7080610b3e713251c9b0"}, - {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7df91fb24c2edaabec4e0eee512ff3bc6ec20eb8dccac2e77001c1fe516c0c84"}, - {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:34f9f0763d5fa3035a315b69b428fe9c34d4fc2f615262d6be3d3bf3882fb985"}, - {file = "coverage-7.3.0-cp38-cp38-win32.whl", hash = "sha256:bac329371d4c0d456e8d5f38a9b0816b446581b5f278474e416ea0c68c47dcd9"}, - {file = "coverage-7.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b859128a093f135b556b4765658d5d2e758e1fae3e7cc2f8c10f26fe7005e543"}, - {file = "coverage-7.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed8d310afe013db1eedd37176d0839dc66c96bcfcce8f6607a73ffea2d6ba"}, - {file = "coverage-7.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61260ec93f99f2c2d93d264b564ba912bec502f679793c56f678ba5251f0393"}, - {file = "coverage-7.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97af9554a799bd7c58c0179cc8dbf14aa7ab50e1fd5fa73f90b9b7215874ba28"}, - {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3558e5b574d62f9c46b76120a5c7c16c4612dc2644c3d48a9f4064a705eaee95"}, - {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37d5576d35fcb765fca05654f66aa71e2808d4237d026e64ac8b397ffa66a56a"}, - {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07ea61bcb179f8f05ffd804d2732b09d23a1238642bf7e51dad62082b5019b34"}, - {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:80501d1b2270d7e8daf1b64b895745c3e234289e00d5f0e30923e706f110334e"}, - {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4eddd3153d02204f22aef0825409091a91bf2a20bce06fe0f638f5c19a85de54"}, - {file = "coverage-7.3.0-cp39-cp39-win32.whl", hash = "sha256:2d22172f938455c156e9af2612650f26cceea47dc86ca048fa4e0b2d21646ad3"}, - {file = "coverage-7.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:60f64e2007c9144375dd0f480a54d6070f00bb1a28f65c408370544091c9bc9e"}, - {file = "coverage-7.3.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:5492a6ce3bdb15c6ad66cb68a0244854d9917478877a25671d70378bdc8562d0"}, - {file = "coverage-7.3.0.tar.gz", hash = "sha256:49dbb19cdcafc130f597d9e04a29d0a032ceedf729e41b181f51cd170e6ee865"}, -] - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "dill" -version = "0.3.7" -description = "serialize all of Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, - {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, -] - -[package.extras] -graph = ["objgraph (>=1.7.2)"] - -[[package]] -name = "exceptiongroup" -version = "1.1.3" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "execnet" -version = "2.0.2" -description = "execnet: rapid multi-Python deployment" -optional = false -python-versions = ">=3.7" -files = [ - {file = "execnet-2.0.2-py3-none-any.whl", hash = "sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41"}, - {file = "execnet-2.0.2.tar.gz", hash = "sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af"}, -] - -[package.extras] -testing = ["hatch", "pre-commit", "pytest", "tox"] - -[[package]] -name = "filelock" -version = "3.12.2" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.7" -files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, -] - -[package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] - -[[package]] -name = "flake8" -version = "6.1.0" -description = "the modular source code checker: pep8 pyflakes and co" -optional = false -python-versions = ">=3.8.1" -files = [ - {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, - {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, -] - -[package.dependencies] -mccabe = ">=0.7.0,<0.8.0" -pycodestyle = ">=2.11.0,<2.12.0" -pyflakes = ">=3.1.0,<3.2.0" - -[[package]] -name = "flake8-bugbear" -version = "23.7.10" -description = "A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle." -optional = false -python-versions = ">=3.8.1" -files = [ - {file = "flake8-bugbear-23.7.10.tar.gz", hash = "sha256:0ebdc7d8ec1ca8bd49347694562381f099f4de2f8ec6bda7a7dca65555d9e0d4"}, - {file = "flake8_bugbear-23.7.10-py3-none-any.whl", hash = "sha256:d99d005114020fbef47ed5e4aebafd22f167f9a0fbd0d8bf3c9e90612cb25c34"}, -] - -[package.dependencies] -attrs = ">=19.2.0" -flake8 = ">=6.0.0" - -[package.extras] -dev = ["coverage", "hypothesis", "hypothesmith (>=0.2)", "pre-commit", "pytest", "tox"] - -[[package]] -name = "flake8-comprehensions" -version = "3.14.0" -description = "A flake8 plugin to help you write better list/set/dict comprehensions." -optional = false -python-versions = ">=3.8" -files = [ - {file = "flake8_comprehensions-3.14.0-py3-none-any.whl", hash = "sha256:7b9d07d94aa88e62099a6d1931ddf16c344d4157deedf90fe0d8ee2846f30e97"}, - {file = "flake8_comprehensions-3.14.0.tar.gz", hash = "sha256:81768c61bfc064e1a06222df08a2580d97de10cb388694becaf987c331c6c0cf"}, -] - -[package.dependencies] -flake8 = ">=3.0,<3.2.0 || >3.2.0" - -[[package]] -name = "flake8-quotes" -version = "3.3.2" -description = "Flake8 lint for quotes." -optional = false -python-versions = "*" -files = [ - {file = "flake8-quotes-3.3.2.tar.gz", hash = "sha256:6e26892b632dacba517bf27219c459a8396dcfac0f5e8204904c5a4ba9b480e1"}, -] - -[package.dependencies] -flake8 = "*" - -[[package]] -name = "flake8-type-checking" -version = "2.4.1" -description = "A flake8 plugin for managing type-checking imports & forward references" -optional = false -python-versions = ">=3.8" -files = [ - {file = "flake8_type_checking-2.4.1-py3-none-any.whl", hash = "sha256:fe75cfe668e3bf6914dd2ba36579bbe6c82f3795127774e7584ecc8c9f7379e5"}, - {file = "flake8_type_checking-2.4.1.tar.gz", hash = "sha256:f3c7023114dee2ec2e8282a9080206ffd8fdd61205626593aa5c801bc2f8035d"}, -] - -[package.dependencies] -classify-imports = "*" -flake8 = "*" - -[[package]] -name = "graphviz" -version = "0.20.1" -description = "Simple Python interface for Graphviz" -optional = false -python-versions = ">=3.7" -files = [ - {file = "graphviz-0.20.1-py3-none-any.whl", hash = "sha256:587c58a223b51611c0cf461132da386edd896a029524ca61a1462b880bf97977"}, - {file = "graphviz-0.20.1.zip", hash = "sha256:8c58f14adaa3b947daf26c19bc1e98c4e0702cdc31cf99153e6f06904d492bf8"}, -] - -[package.extras] -dev = ["flake8", "pep8-naming", "tox (>=3)", "twine", "wheel"] -docs = ["sphinx (>=5)", "sphinx-autodoc-typehints", "sphinx-rtd-theme"] -test = ["coverage", "mock (>=4)", "pytest (>=7)", "pytest-cov", "pytest-mock (>=3)"] - -[[package]] -name = "humanfriendly" -version = "10.0" -description = "Human friendly output for text interfaces using Python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, - {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, -] - -[package.dependencies] -pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} - -[[package]] -name = "importlib-metadata" -version = "6.8.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, - {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, -] - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "isort" -version = "5.12.0" -description = "A Python utility / library to sort Python imports." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, -] - -[package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] - -[[package]] -name = "linkify-it-py" -version = "2.0.2" -description = "Links recognition library with FULL unicode support." -optional = false -python-versions = ">=3.7" -files = [ - {file = "linkify-it-py-2.0.2.tar.gz", hash = "sha256:19f3060727842c254c808e99d465c80c49d2c7306788140987a1a7a29b0d6ad2"}, - {file = "linkify_it_py-2.0.2-py3-none-any.whl", hash = "sha256:a3a24428f6c96f27370d7fe61d2ac0be09017be5190d68d8658233171f1b6541"}, -] - -[package.dependencies] -uc-micro-py = "*" - -[package.extras] -benchmark = ["pytest", "pytest-benchmark"] -dev = ["black", "flake8", "isort", "pre-commit", "pyproject-flake8"] -doc = ["myst-parser", "sphinx", "sphinx-book-theme"] -test = ["coverage", "pytest", "pytest-cov"] - -[[package]] -name = "markdown-it-py" -version = "2.2.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.7" -files = [ - {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, - {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, -] - -[package.dependencies] -linkify-it-py = {version = ">=1,<3", optional = true, markers = "extra == \"linkify\""} -mdit-py-plugins = {version = "*", optional = true, markers = "extra == \"plugins\""} -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "mccabe" -version = "0.7.0" -description = "McCabe checker, plugin for flake8" -optional = false -python-versions = ">=3.6" -files = [ - {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, - {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, -] - -[[package]] -name = "mdit-py-plugins" -version = "0.4.0" -description = "Collection of plugins for markdown-it-py" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mdit_py_plugins-0.4.0-py3-none-any.whl", hash = "sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9"}, - {file = "mdit_py_plugins-0.4.0.tar.gz", hash = "sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b"}, -] - -[package.dependencies] -markdown-it-py = ">=1.0.0,<4.0.0" - -[package.extras] -code-style = ["pre-commit"] -rtd = ["myst-parser", "sphinx-book-theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "multiprocess" -version = "0.70.15" -description = "better multiprocessing and multithreading in Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "multiprocess-0.70.15-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:aa36c7ed16f508091438687fe9baa393a7a8e206731d321e443745e743a0d4e5"}, - {file = "multiprocess-0.70.15-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:20e024018c46d0d1602024c613007ac948f9754659e3853b0aa705e83f6931d8"}, - {file = "multiprocess-0.70.15-pp37-pypy37_pp73-manylinux_2_24_i686.whl", hash = "sha256:e576062981c91f0fe8a463c3d52506e598dfc51320a8dd8d78b987dfca91c5db"}, - {file = "multiprocess-0.70.15-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:e73f497e6696a0f5433ada2b3d599ae733b87a6e8b008e387c62ac9127add177"}, - {file = "multiprocess-0.70.15-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:73db2e7b32dcc7f9b0f075c2ffa45c90b6729d3f1805f27e88534c8d321a1be5"}, - {file = "multiprocess-0.70.15-pp38-pypy38_pp73-manylinux_2_24_i686.whl", hash = "sha256:4271647bd8a49c28ecd6eb56a7fdbd3c212c45529ad5303b40b3c65fc6928e5f"}, - {file = "multiprocess-0.70.15-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:cf981fb998d6ec3208cb14f0cf2e9e80216e834f5d51fd09ebc937c32b960902"}, - {file = "multiprocess-0.70.15-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:18f9f2c7063346d1617bd1684fdcae8d33380ae96b99427260f562e1a1228b67"}, - {file = "multiprocess-0.70.15-pp39-pypy39_pp73-manylinux_2_24_i686.whl", hash = "sha256:0eac53214d664c49a34695e5824872db4006b1a465edd7459a251809c3773370"}, - {file = "multiprocess-0.70.15-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1a51dd34096db47fb21fa2b839e615b051d51b97af9a67afbcdaa67186b44883"}, - {file = "multiprocess-0.70.15-py310-none-any.whl", hash = "sha256:7dd58e33235e83cf09d625e55cffd7b0f0eede7ee9223cdd666a87624f60c21a"}, - {file = "multiprocess-0.70.15-py311-none-any.whl", hash = "sha256:134f89053d82c9ed3b73edd3a2531eb791e602d4f4156fc92a79259590bd9670"}, - {file = "multiprocess-0.70.15-py37-none-any.whl", hash = "sha256:f7d4a1629bccb433114c3b4885f69eccc200994323c80f6feee73b0edc9199c5"}, - {file = "multiprocess-0.70.15-py38-none-any.whl", hash = "sha256:bee9afba476c91f9ebee7beeee0601face9eff67d822e893f9a893725fbd6316"}, - {file = "multiprocess-0.70.15-py39-none-any.whl", hash = "sha256:3e0953f5d52b4c76f1c973eaf8214554d146f2be5decb48e928e55c7a2d19338"}, - {file = "multiprocess-0.70.15.tar.gz", hash = "sha256:f20eed3036c0ef477b07a4177cf7c1ba520d9a2677870a4f47fe026f0cd6787e"}, -] - -[package.dependencies] -dill = ">=0.3.7" - -[[package]] -name = "mypy" -version = "1.5.1" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mypy-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70"}, - {file = "mypy-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0"}, - {file = "mypy-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12"}, - {file = "mypy-1.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d"}, - {file = "mypy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4"}, - {file = "mypy-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243"}, - {file = "mypy-1.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275"}, - {file = "mypy-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373"}, - {file = "mypy-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161"}, - {file = "mypy-1.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a"}, - {file = "mypy-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160"}, - {file = "mypy-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2"}, - {file = "mypy-1.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb"}, - {file = "mypy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14"}, - {file = "mypy-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb"}, - {file = "mypy-1.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693"}, - {file = "mypy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770"}, - {file = "mypy-1.5.1-py3-none-any.whl", hash = "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5"}, - {file = "mypy-1.5.1.tar.gz", hash = "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"}, -] - -[package.dependencies] -mypy-extensions = ">=1.0.0" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=4.1.0" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -install-types = ["pip"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "packaging" -version = "23.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, -] - -[[package]] -name = "pathos" -version = "0.3.1" -description = "parallel graph management and execution in heterogeneous computing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pathos-0.3.1-py3-none-any.whl", hash = "sha256:b1c7145e2adcc19c7e9cac48f110ea5a63e300c1cc10c2947d4857dc97a47b46"}, - {file = "pathos-0.3.1.tar.gz", hash = "sha256:c9a088021493c5cb627d4459bba6c0533c684199e271a5dc297d62be23d74019"}, -] - -[package.dependencies] -dill = ">=0.3.7" -multiprocess = ">=0.70.15" -pox = ">=0.3.3" -ppft = ">=1.7.6.7" - -[[package]] -name = "pathspec" -version = "0.11.2" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, -] - -[[package]] -name = "pep8-naming" -version = "0.13.3" -description = "Check PEP-8 naming conventions, plugin for flake8" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pep8-naming-0.13.3.tar.gz", hash = "sha256:1705f046dfcd851378aac3be1cd1551c7c1e5ff363bacad707d43007877fa971"}, - {file = "pep8_naming-0.13.3-py3-none-any.whl", hash = "sha256:1a86b8c71a03337c97181917e2b472f0f5e4ccb06844a0d6f0a33522549e7a80"}, -] - -[package.dependencies] -flake8 = ">=5.0.0" - -[[package]] -name = "platformdirs" -version = "3.10.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, -] - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] - -[[package]] -name = "pluggy" -version = "1.2.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pox" -version = "0.3.3" -description = "utilities for filesystem exploration and automated builds" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pox-0.3.3-py3-none-any.whl", hash = "sha256:e95febf7401918478a3c1441a3630656d9a2049803889b4f589821372889d0ce"}, - {file = "pox-0.3.3.tar.gz", hash = "sha256:e1ced66f2a0c92a58cf3646bc7ccb8b4773d40884b76f85eeda0670474871667"}, -] - -[[package]] -name = "ppft" -version = "1.7.6.7" -description = "distributed and parallel Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ppft-1.7.6.7-py3-none-any.whl", hash = "sha256:fedb1b1253729d62483f2e1f36547fd50a5fc873ffbf9b78b48cfdc727d4180c"}, - {file = "ppft-1.7.6.7.tar.gz", hash = "sha256:ab34436814e2f18238f35688fd869b2641b2d2d8dca22b8d246f6701dfc954c8"}, -] - -[package.extras] -dill = ["dill (>=0.3.7)"] - -[[package]] -name = "psutil" -version = "5.9.5" -description = "Cross-platform lib for process and system monitoring in Python." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, - {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, - {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, - {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, - {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, - {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, - {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, - {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, -] - -[package.extras] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] - -[[package]] -name = "pybind11" -version = "2.11.1" -description = "Seamless operability between C++11 and Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pybind11-2.11.1-py3-none-any.whl", hash = "sha256:33cdd02a6453380dd71cc70357ce388ad1ee8d32bd0e38fc22b273d050aa29b3"}, - {file = "pybind11-2.11.1.tar.gz", hash = "sha256:00cd59116a6e8155aecd9174f37ba299d1d397ed4a6b86ac1dfe01b3e40f2cc4"}, -] - -[package.extras] -global = ["pybind11-global (==2.11.1)"] - -[[package]] -name = "pycodestyle" -version = "2.11.0" -description = "Python style guide checker" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pycodestyle-2.11.0-py2.py3-none-any.whl", hash = "sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8"}, - {file = "pycodestyle-2.11.0.tar.gz", hash = "sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0"}, -] - -[[package]] -name = "pyflakes" -version = "3.1.0" -description = "passive checker of Python programs" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, - {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, -] - -[[package]] -name = "pygments" -version = "2.16.1" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, -] - -[package.extras] -plugins = ["importlib-metadata"] - -[[package]] -name = "pyk" -version = "0.1.425" -description = "" -optional = false -python-versions = "^3.10" -files = [] -develop = false - -[package.dependencies] -cmd2 = "^2.4.2" -coloredlogs = "^15.0.1" -filelock = "^3.9.0" -graphviz = "^0.20.1" -psutil = "^5.9.4" -pybind11 = "^2.10.3" -textual = "^0.27.0" -tomli = "^2.0.1" - -[package.source] -type = "git" -url = "https://github.com/runtimeverification/pyk.git" -reference = "v0.1.425" -resolved_reference = "c292c4610183acec2ae44d8f68973ebf3cb4cd1e" - -[[package]] -name = "pyperclip" -version = "1.8.2" -description = "A cross-platform clipboard module for Python. (Only handles plain text for now.)" -optional = false -python-versions = "*" -files = [ - {file = "pyperclip-1.8.2.tar.gz", hash = "sha256:105254a8b04934f0bc84e9c24eb360a591aaf6535c9def5f29d92af107a9bf57"}, -] - -[[package]] -name = "pyreadline3" -version = "3.4.1" -description = "A python implementation of GNU readline." -optional = false -python-versions = "*" -files = [ - {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, - {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, -] - -[[package]] -name = "pytest" -version = "7.4.0" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, - {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-cov" -version = "4.1.0" -description = "Pytest plugin for measuring coverage." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, - {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, -] - -[package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] - -[[package]] -name = "pytest-mock" -version = "3.11.1" -description = "Thin-wrapper around the mock package for easier use with pytest" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-mock-3.11.1.tar.gz", hash = "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f"}, - {file = "pytest_mock-3.11.1-py3-none-any.whl", hash = "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39"}, -] - -[package.dependencies] -pytest = ">=5.0" - -[package.extras] -dev = ["pre-commit", "pytest-asyncio", "tox"] - -[[package]] -name = "pytest-xdist" -version = "3.3.1" -description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-xdist-3.3.1.tar.gz", hash = "sha256:d5ee0520eb1b7bcca50a60a518ab7a7707992812c578198f8b44fdfac78e8c93"}, - {file = "pytest_xdist-3.3.1-py3-none-any.whl", hash = "sha256:ff9daa7793569e6a68544850fd3927cd257cc03a7ef76c95e86915355e82b5f2"}, -] - -[package.dependencies] -execnet = ">=1.1" -pytest = ">=6.2.0" - -[package.extras] -psutil = ["psutil (>=3.0)"] -setproctitle = ["setproctitle"] -testing = ["filelock"] - -[[package]] -name = "pyupgrade" -version = "3.10.1" -description = "A tool to automatically upgrade syntax for newer versions." -optional = false -python-versions = ">=3.8.1" -files = [ - {file = "pyupgrade-3.10.1-py2.py3-none-any.whl", hash = "sha256:f565b4d26daa46ed522e98746834e77e444269103f8bc04413d77dad95169a24"}, - {file = "pyupgrade-3.10.1.tar.gz", hash = "sha256:1d8d138c2ccdd3c42b1419230ae036d5607dc69465a26feacc069642fc8d1b90"}, -] - -[package.dependencies] -tokenize-rt = ">=5.2.0" - -[[package]] -name = "rich" -version = "13.5.2" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "rich-13.5.2-py3-none-any.whl", hash = "sha256:146a90b3b6b47cac4a73c12866a499e9817426423f57c5a66949c086191a8808"}, - {file = "rich-13.5.2.tar.gz", hash = "sha256:fb9d6c0a0f643c99eed3875b5377a184132ba9be4d61516a55273d3554d75a39"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "textual" -version = "0.27.0" -description = "Modern Text User Interface framework" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "textual-0.27.0-py3-none-any.whl", hash = "sha256:dc45eaf7da330686c56d6f76f59d05fd216ce6aad90fa44ee269881efc622151"}, - {file = "textual-0.27.0.tar.gz", hash = "sha256:8bdcb09dc35a706ef939b1276ccfdec10eaaee6147b41cb7587cf33298a8dd33"}, -] - -[package.dependencies] -importlib-metadata = ">=4.11.3" -markdown-it-py = {version = ">=2.1.0,<3.0.0", extras = ["linkify", "plugins"]} -rich = ">=13.3.3" -typing-extensions = ">=4.4.0,<5.0.0" - -[package.extras] -dev = ["aiohttp (>=3.8.1)", "click (>=8.1.2)", "msgpack (>=1.0.3)"] - -[[package]] -name = "tokenize-rt" -version = "5.2.0" -description = "A wrapper around the stdlib `tokenize` which roundtrips." -optional = false -python-versions = ">=3.8" -files = [ - {file = "tokenize_rt-5.2.0-py2.py3-none-any.whl", hash = "sha256:b79d41a65cfec71285433511b50271b05da3584a1da144a0752e9c621a285289"}, - {file = "tokenize_rt-5.2.0.tar.gz", hash = "sha256:9fe80f8a5c1edad2d3ede0f37481cc0cc1538a2f442c9c2f9e4feacd2792d054"}, -] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "tomlkit" -version = "0.11.8" -description = "Style preserving TOML library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomlkit-0.11.8-py3-none-any.whl", hash = "sha256:8c726c4c202bdb148667835f68d68780b9a003a9ec34167b6c673b38eff2a171"}, - {file = "tomlkit-0.11.8.tar.gz", hash = "sha256:9330fc7faa1db67b541b28e62018c17d20be733177d290a13b24c62d1614e0c3"}, -] - -[[package]] -name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" -optional = false -python-versions = ">=3.7" -files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, -] - -[[package]] -name = "uc-micro-py" -version = "1.0.2" -description = "Micro subset of unicode data files for linkify-it-py projects." -optional = false -python-versions = ">=3.7" -files = [ - {file = "uc-micro-py-1.0.2.tar.gz", hash = "sha256:30ae2ac9c49f39ac6dce743bd187fcd2b574b16ca095fa74cd9396795c954c54"}, - {file = "uc_micro_py-1.0.2-py3-none-any.whl", hash = "sha256:8c9110c309db9d9e87302e2f4ad2c3152770930d88ab385cd544e7a7e75f3de0"}, -] - -[package.extras] -test = ["coverage", "pytest", "pytest-cov"] - -[[package]] -name = "wcwidth" -version = "0.2.6" -description = "Measures the displayed width of unicode strings in a terminal" -optional = false -python-versions = "*" -files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, -] - -[[package]] -name = "zipp" -version = "3.16.2" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] - -[metadata] -lock-version = "2.0" -python-versions = "^3.10" -content-hash = "7a6eba6fae9c636c5f96e42d56b7f5cf5033f59481f4dd9e0344e3efe231b03b" diff --git a/kevm-pyk/pyproject.toml b/kevm-pyk/pyproject.toml deleted file mode 100644 index 946e7a4a4a..0000000000 --- a/kevm-pyk/pyproject.toml +++ /dev/null @@ -1,62 +0,0 @@ -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" - -[tool.poetry] -name = "kevm-pyk" -version = "1.0.276" -description = "" -authors = [ - "Runtime Verification, Inc. ", -] -packages = [ - { include = "kevm_pyk", from = "src/" }, - { include = "kontrol", from = "src/" }, -] - -[tool.poetry.dependencies] -python = "^3.10" -pathos = "*" -pyk = { git = "https://github.com/runtimeverification/pyk.git", tag="v0.1.425" } -tomlkit = "^0.11.6" - -[tool.poetry.group.dev.dependencies] -autoflake = "*" -black = "*" -flake8 = "*" -flake8-bugbear = "*" -flake8-comprehensions = "*" -flake8-quotes = "*" -flake8-type-checking = "*" -isort = "*" -mypy = "*" -pep8-naming = "*" -pytest = "*" -pytest-cov = "*" -pytest-mock = "*" -pytest-xdist = "*" -pyupgrade = "*" - -[tool.poetry.scripts] -kevm-pyk = "kevm_pyk.__main__:main" -gst-to-kore = "kevm_pyk.gst_to_kore:main" -kontrol = "kontrol.__main__:main" - -[tool.isort] -profile = "black" -line_length = 120 - -[tool.autoflake] -recursive = true -expand-star-imports = true -remove-all-unused-imports = true -ignore-init-module-imports = true -remove-duplicate-keys = true -remove-unused-variables = true - -[tool.black] -line-length = 120 -skip-string-normalization = true - -[tool.mypy] -disallow_untyped_defs = true diff --git a/kevm-pyk/src/kevm_pyk/__init__.py b/kevm-pyk/src/kevm_pyk/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/kevm-pyk/src/kevm_pyk/__main__.py b/kevm-pyk/src/kevm_pyk/__main__.py deleted file mode 100644 index 7d3c9a86a5..0000000000 --- a/kevm-pyk/src/kevm_pyk/__main__.py +++ /dev/null @@ -1,696 +0,0 @@ -from __future__ import annotations - -import json -import logging -import sys -from argparse import ArgumentParser -from pathlib import Path -from typing import TYPE_CHECKING - -from pathos.pools import ProcessPool # type: ignore -from pyk.cli.utils import file_path -from pyk.cterm import CTerm -from pyk.kast.outer import KApply, KRewrite, KSort, KToken -from pyk.kcfg import KCFG -from pyk.kore.tools import PrintOutput, kore_print -from pyk.ktool.kompile import LLVMKompileType -from pyk.ktool.krun import KRunOutput -from pyk.prelude.ml import is_bottom, is_top -from pyk.proof import APRProof -from pyk.proof.equality import EqualityProof -from pyk.proof.show import APRProofShow -from pyk.proof.tui import APRProofViewer -from pyk.utils import BugReport, single - -from .cli import KEVMCLIArgs, node_id_like -from .config import INCLUDE_DIR, KEVM_LIB -from .gst_to_kore import SORT_ETHEREUM_SIMULATION, gst_to_kore, kore_pgm_to_kore -from .kevm import KEVM, KEVMSemantics, kevm_node_printer -from .kompile import KompileTarget, kevm_kompile -from .utils import ensure_ksequence_on_k_cell, get_apr_proof_for_spec, kevm_prove, legacy_explore, print_failure_info - -if TYPE_CHECKING: - from argparse import Namespace - from collections.abc import Callable, Iterable - from typing import Any, Final, TypeVar - - from pyk.kast.outer import KClaim - from pyk.kcfg.kcfg import NodeIdLike - from pyk.proof.proof import Proof - - T = TypeVar('T') - -_LOGGER: Final = logging.getLogger(__name__) -_LOG_FORMAT: Final = '%(levelname)s %(asctime)s %(name)s - %(message)s' - - -def _ignore_arg(args: dict[str, Any], arg: str, cli_option: str) -> None: - if arg in args: - if args[arg] is not None: - _LOGGER.warning(f'Ignoring command-line option: {cli_option}') - args.pop(arg) - - -def main() -> None: - sys.setrecursionlimit(15000000) - parser = _create_argument_parser() - args = parser.parse_args() - logging.basicConfig(level=_loglevel(args), format=_LOG_FORMAT) - - executor_name = 'exec_' + args.command.lower().replace('-', '_') - if executor_name not in globals(): - raise AssertionError(f'Unimplemented command: {args.command}') - - execute = globals()[executor_name] - execute(**vars(args)) - - -# Command implementation - - -def exec_version(**kwargs: Any) -> None: - version_file = KEVM_LIB / 'version' - version = version_file.read_text().strip() - print(f'KEVM Version: {version}') - - -def exec_kompile( - output_dir: Path | None, - main_file: Path, - emit_json: bool, - includes: list[str], - main_module: str | None, - syntax_module: str | None, - target: KompileTarget | None = None, - read_only: bool = False, - ccopts: Iterable[str] = (), - o0: bool = False, - o1: bool = False, - o2: bool = False, - o3: bool = False, - debug: bool = False, - enable_llvm_debug: bool = False, - llvm_library: bool = False, - verbose: bool = False, - **kwargs: Any, -) -> None: - if target is None: - target = KompileTarget.LLVM - - optimization = 0 - if o1: - optimization = 1 - if o2: - optimization = 2 - if o3: - optimization = 3 - - kevm_kompile( - target, - output_dir=output_dir, - main_file=main_file, - main_module=main_module, - syntax_module=syntax_module, - includes=includes, - emit_json=emit_json, - read_only=read_only, - ccopts=ccopts, - optimization=optimization, - enable_llvm_debug=enable_llvm_debug, - llvm_kompile_type=LLVMKompileType.C if llvm_library else LLVMKompileType.MAIN, - debug=debug, - verbose=verbose, - ) - - -def exec_prove_legacy( - spec_file: Path, - definition_dir: Path | None = None, - includes: Iterable[str] = (), - bug_report: bool = False, - save_directory: Path | None = None, - spec_module: str | None = None, - claim_labels: Iterable[str] | None = None, - exclude_claim_labels: Iterable[str] = (), - debug: bool = False, - debugger: bool = False, - max_depth: int | None = None, - max_counterexamples: int | None = None, - branching_allowed: int | None = None, - haskell_backend_args: Iterable[str] = (), - **kwargs: Any, -) -> None: - _ignore_arg(kwargs, 'md_selector', f'--md-selector: {kwargs["md_selector"]}') - - if definition_dir is None: - definition_dir = KompileTarget.HASKELL.definition_dir - - kevm = KEVM(definition_dir, use_directory=save_directory) - - include_dirs = [Path(include) for include in includes] - include_dirs += [INCLUDE_DIR] - - final_state = kevm.prove_legacy( - spec_file=spec_file, - includes=include_dirs, - bug_report=bug_report, - spec_module=spec_module, - claim_labels=claim_labels, - exclude_claim_labels=exclude_claim_labels, - debug=debug, - debugger=debugger, - max_depth=max_depth, - max_counterexamples=max_counterexamples, - branching_allowed=branching_allowed, - haskell_backend_args=haskell_backend_args, - ) - print(kevm.pretty_print(final_state)) - if not is_top(final_state): - raise SystemExit(1) - - -def exec_prove( - spec_file: Path, - includes: Iterable[str], - definition_dir: Path | None = None, - bug_report: bool = False, - save_directory: Path | None = None, - spec_module: str | None = None, - claim_labels: Iterable[str] | None = None, - exclude_claim_labels: Iterable[str] = (), - reinit: bool = False, - max_depth: int = 1000, - max_iterations: int | None = None, - workers: int = 1, - simplify_init: bool = True, - break_every_step: bool = False, - break_on_jumpi: bool = False, - break_on_calls: bool = True, - kore_rpc_command: str | Iterable[str] = ('kore-rpc',), - smt_timeout: int | None = None, - smt_retry_limit: int | None = None, - trace_rewrites: bool = False, - failure_info: bool = True, - auto_abstract_gas: bool = False, - **kwargs: Any, -) -> None: - _ignore_arg(kwargs, 'md_selector', f'--md-selector: {kwargs["md_selector"]}') - md_selector = 'k & ! node' - - if definition_dir is None: - definition_dir = KompileTarget.HASKELL.definition_dir - - if smt_timeout is None: - smt_timeout = 300 - if smt_retry_limit is None: - smt_retry_limit = 10 - - br = BugReport(spec_file.with_suffix('.bug_report')) if bug_report else None - kevm = KEVM(definition_dir, use_directory=save_directory, bug_report=br) - - include_dirs = [Path(include) for include in includes] - include_dirs += [INCLUDE_DIR] - - _LOGGER.info(f'Extracting claims from file: {spec_file}') - claims = kevm.get_claims( - spec_file, - spec_module_name=spec_module, - include_dirs=include_dirs, - md_selector=md_selector, - claim_labels=claim_labels, - exclude_claim_labels=exclude_claim_labels, - ) - - if not claims: - raise ValueError(f'No claims found in file: {spec_file}') - - if isinstance(kore_rpc_command, str): - kore_rpc_command = kore_rpc_command.split() - - def is_functional(claim: KClaim) -> bool: - claim_lhs = claim.body - if type(claim_lhs) is KRewrite: - claim_lhs = claim_lhs.lhs - return not (type(claim_lhs) is KApply and claim_lhs.label.name == '') - - def _init_and_run_proof(claim: KClaim) -> tuple[bool, list[str] | None]: - with legacy_explore( - kevm, - kcfg_semantics=KEVMSemantics(auto_abstract_gas=auto_abstract_gas), - id=claim.label, - bug_report=br, - kore_rpc_command=kore_rpc_command, - smt_timeout=smt_timeout, - smt_retry_limit=smt_retry_limit, - trace_rewrites=trace_rewrites, - ) as kcfg_explore: - proof_problem: Proof - if is_functional(claim): - if ( - save_directory is not None - and not reinit - and EqualityProof.proof_exists(claim.label, save_directory) - ): - proof_problem = EqualityProof.read_proof_data(save_directory, claim.label) - else: - proof_problem = EqualityProof.from_claim(claim, kevm.definition, proof_dir=save_directory) - else: - if ( - save_directory is not None - and not reinit - and APRProof.proof_data_exists(claim.label, save_directory) - ): - proof_problem = APRProof.read_proof_data(save_directory, claim.label) - - else: - _LOGGER.info(f'Converting claim to KCFG: {claim.label}') - kcfg, init_node_id, target_node_id = KCFG.from_claim(kevm.definition, claim) - - new_init = ensure_ksequence_on_k_cell(kcfg.node(init_node_id).cterm) - new_target = ensure_ksequence_on_k_cell(kcfg.node(target_node_id).cterm) - - _LOGGER.info(f'Computing definedness constraint for initial node: {claim.label}') - new_init = kcfg_explore.cterm_assume_defined(new_init) - - if simplify_init: - _LOGGER.info(f'Simplifying initial and target node: {claim.label}') - _new_init, _ = kcfg_explore.cterm_simplify(new_init) - _new_target, _ = kcfg_explore.cterm_simplify(new_target) - if is_bottom(_new_init): - raise ValueError( - 'Simplifying initial node led to #Bottom, are you sure your LHS is defined?' - ) - if is_bottom(_new_target): - raise ValueError( - 'Simplifying target node led to #Bottom, are you sure your RHS is defined?' - ) - new_init = CTerm.from_kast(_new_init) - new_target = CTerm.from_kast(_new_target) - - kcfg.replace_node(init_node_id, new_init) - kcfg.replace_node(target_node_id, new_target) - - proof_problem = APRProof( - claim.label, kcfg, init_node_id, target_node_id, {}, proof_dir=save_directory - ) - - passed = kevm_prove( - kevm, - proof_problem, - kcfg_explore, - max_depth=max_depth, - max_iterations=max_iterations, - break_every_step=break_every_step, - break_on_jumpi=break_on_jumpi, - break_on_calls=break_on_calls, - ) - failure_log = None - if not passed: - failure_log = print_failure_info(proof_problem, kcfg_explore) - - return passed, failure_log - - results: list[tuple[bool, list[str] | None]] - if workers > 1: - with ProcessPool(ncpus=workers) as process_pool: - results = process_pool.map(_init_and_run_proof, claims) - else: - results = [] - for claim in claims: - results.append(_init_and_run_proof(claim)) - - failed = 0 - for claim, r in zip(claims, results, strict=True): - passed, failure_log = r - if passed: - print(f'PROOF PASSED: {claim.label}') - else: - failed += 1 - print(f'PROOF FAILED: {claim.label}') - if failure_info and failure_log is not None: - for line in failure_log: - print(line) - - if failed: - sys.exit(failed) - - -def exec_prune_proof( - definition_dir: Path, - spec_file: Path, - node: NodeIdLike, - includes: Iterable[str] = (), - save_directory: Path | None = None, - spec_module: str | None = None, - claim_labels: Iterable[str] | None = None, - exclude_claim_labels: Iterable[str] = (), - **kwargs: Any, -) -> None: - _ignore_arg(kwargs, 'md_selector', f'--md-selector: {kwargs["md_selector"]}') - md_selector = 'k & ! node' - - if save_directory is None: - raise ValueError('Must pass --save-directory to prune-proof!') - - _LOGGER.warning(f'definition_dir: {definition_dir}') - kevm = KEVM(definition_dir, use_directory=save_directory) - - include_dirs = [Path(include) for include in includes] - include_dirs += [INCLUDE_DIR] - - _LOGGER.info(f'Extracting claims from file: {spec_file}') - claim = single( - kevm.get_claims( - spec_file, - spec_module_name=spec_module, - include_dirs=include_dirs, - md_selector=md_selector, - claim_labels=claim_labels, - exclude_claim_labels=exclude_claim_labels, - ) - ) - - apr_proof = APRProof.read_proof_data(save_directory, claim.label) - node_ids = apr_proof.prune_from(node) - _LOGGER.info(f'Pruned nodes: {node_ids}') - apr_proof.write_proof_data() - - -def exec_show_kcfg( - definition_dir: Path, - spec_file: Path, - save_directory: Path | None = None, - includes: Iterable[str] = (), - claim_labels: Iterable[str] | None = None, - exclude_claim_labels: Iterable[str] = (), - spec_module: str | None = None, - md_selector: str | None = None, - nodes: Iterable[NodeIdLike] = (), - node_deltas: Iterable[tuple[NodeIdLike, NodeIdLike]] = (), - to_module: bool = False, - minimize: bool = True, - failure_info: bool = False, - sort_collections: bool = False, - pending: bool = False, - failing: bool = False, - **kwargs: Any, -) -> None: - kevm = KEVM(definition_dir) - include_dirs = [Path(include) for include in includes] - include_dirs += [INCLUDE_DIR] - proof = get_apr_proof_for_spec( - kevm, - spec_file, - save_directory=save_directory, - spec_module_name=spec_module, - include_dirs=include_dirs, - md_selector=md_selector, - claim_labels=claim_labels, - exclude_claim_labels=exclude_claim_labels, - ) - - if pending: - nodes = list(nodes) + [node.id for node in proof.pending] - if failing: - nodes = list(nodes) + [node.id for node in proof.failing] - - node_printer = kevm_node_printer(kevm, proof) - proof_show = APRProofShow(kevm, node_printer=node_printer) - - res_lines = proof_show.show( - proof, - nodes=nodes, - node_deltas=node_deltas, - to_module=to_module, - minimize=minimize, - sort_collections=sort_collections, - ) - - if failure_info: - with legacy_explore(kevm, kcfg_semantics=KEVMSemantics(), id=proof.id) as kcfg_explore: - res_lines += print_failure_info(proof, kcfg_explore) - - print('\n'.join(res_lines)) - - -def exec_view_kcfg( - definition_dir: Path, - spec_file: Path, - save_directory: Path | None = None, - includes: Iterable[str] = (), - claim_labels: Iterable[str] | None = None, - exclude_claim_labels: Iterable[str] = (), - spec_module: str | None = None, - md_selector: str | None = None, - **kwargs: Any, -) -> None: - kevm = KEVM(definition_dir) - include_dirs = [Path(include) for include in includes] - include_dirs += [INCLUDE_DIR] - proof = get_apr_proof_for_spec( - kevm, - spec_file, - save_directory=save_directory, - spec_module_name=spec_module, - include_dirs=include_dirs, - md_selector=md_selector, - claim_labels=claim_labels, - exclude_claim_labels=exclude_claim_labels, - ) - - node_printer = kevm_node_printer(kevm, proof) - proof_view = APRProofViewer(proof, kevm, node_printer=node_printer) - - proof_view.run() - - -def exec_run( - input_file: Path, - expand_macros: bool, - depth: int | None, - output: KRunOutput, - schedule: str, - mode: str, - chainid: int, - target: KompileTarget | None = None, - save_directory: Path | None = None, - debugger: bool = False, - **kwargs: Any, -) -> None: - if target is None: - target = KompileTarget.LLVM - - _ignore_arg(kwargs, 'definition_dir', f'--definition: {kwargs["definition_dir"]}') - kevm = KEVM(target.definition_dir, use_directory=save_directory) - - try: - json_read = json.loads(input_file.read_text()) - kore_pattern = gst_to_kore(json_read, schedule, mode, chainid) - except json.JSONDecodeError: - pgm_token = KToken(input_file.read_text(), KSort('EthereumSimulation')) - kast_pgm = kevm.parse_token(pgm_token) - kore_pgm = kevm.kast_to_kore(kast_pgm, sort=KSort('EthereumSimulation')) - kore_pattern = kore_pgm_to_kore(kore_pgm, SORT_ETHEREUM_SIMULATION, schedule, mode, chainid) - - kevm.run_kore( - kore_pattern, - depth=depth, - term=True, - expand_macros=expand_macros, - output=output, - check=True, - debugger=debugger, - ) - - -def exec_kast( - input_file: Path, - output: PrintOutput, - schedule: str, - mode: str, - chainid: int, - target: KompileTarget | None = None, - save_directory: Path | None = None, - **kwargs: Any, -) -> None: - if target is None: - target = KompileTarget.LLVM - - _ignore_arg(kwargs, 'definition_dir', f'--definition: {kwargs["definition_dir"]}') - kevm = KEVM(target.definition_dir, use_directory=save_directory) - - try: - json_read = json.loads(input_file.read_text()) - kore_pattern = gst_to_kore(json_read, schedule, mode, chainid) - except json.JSONDecodeError: - pgm_token = KToken(input_file.read_text(), KSort('EthereumSimulation')) - kast_pgm = kevm.parse_token(pgm_token) - kore_pgm = kevm.kast_to_kore(kast_pgm) - kore_pattern = kore_pgm_to_kore(kore_pgm, SORT_ETHEREUM_SIMULATION, schedule, mode, chainid) - - output_text = kore_print(kore_pattern, kevm.definition_dir, output) - print(output_text) - - -# Helpers - - -def _create_argument_parser() -> ArgumentParser: - def list_of(elem_type: Callable[[str], T], delim: str = ';') -> Callable[[str], list[T]]: - def parse(s: str) -> list[T]: - return [elem_type(elem) for elem in s.split(delim)] - - return parse - - kevm_cli_args = KEVMCLIArgs() - parser = ArgumentParser(prog='kevm-pyk') - - command_parser = parser.add_subparsers(dest='command', required=True) - - command_parser.add_parser('version', help='Print KEVM version and exit.', parents=[kevm_cli_args.logging_args]) - - kevm_kompile_args = command_parser.add_parser( - 'kompile', - help='Kompile KEVM specification.', - parents=[kevm_cli_args.logging_args, kevm_cli_args.k_args, kevm_cli_args.kompile_args], - ) - kevm_kompile_args.add_argument('main_file', type=file_path, help='Path to file with main module.') - kevm_kompile_args.add_argument( - '--target', type=KompileTarget, help='[llvm|haskell|haskell-standalone|node|foundry]' - ) - kevm_kompile_args.add_argument( - '-o', '--output-definition', type=Path, dest='output_dir', help='Path to write kompiled definition to.' - ) - - prove_args = command_parser.add_parser( - 'prove', - help='Run KEVM proof.', - parents=[ - kevm_cli_args.logging_args, - kevm_cli_args.parallel_args, - kevm_cli_args.k_args, - kevm_cli_args.kprove_args, - kevm_cli_args.rpc_args, - kevm_cli_args.smt_args, - kevm_cli_args.explore_args, - kevm_cli_args.spec_args, - ], - ) - prove_args.add_argument( - '--reinit', - dest='reinit', - default=False, - action='store_true', - help='Reinitialize CFGs even if they already exist.', - ) - - prune_proof_args = command_parser.add_parser( - 'prune-proof', - help='Remove a node and its successors from the proof state.', - parents=[ - kevm_cli_args.logging_args, - kevm_cli_args.k_args, - kevm_cli_args.spec_args, - ], - ) - prune_proof_args.add_argument('node', type=node_id_like, help='Node to remove CFG subgraph from.') - - command_parser.add_parser( - 'prove-legacy', - help='Run KEVM proof using the legacy kprove binary.', - parents=[ - kevm_cli_args.logging_args, - kevm_cli_args.k_args, - kevm_cli_args.spec_args, - kevm_cli_args.kprove_legacy_args, - ], - ) - - command_parser.add_parser( - 'view-kcfg', - help='Display tree view of CFG', - parents=[kevm_cli_args.logging_args, kevm_cli_args.k_args, kevm_cli_args.spec_args], - ) - - command_parser.add_parser( - 'show-kcfg', - help='Display tree show of CFG', - parents=[ - kevm_cli_args.logging_args, - kevm_cli_args.k_args, - kevm_cli_args.kcfg_show_args, - kevm_cli_args.spec_args, - kevm_cli_args.display_args, - ], - ) - - run_args = command_parser.add_parser( - 'run', - help='Run KEVM test/simulation.', - parents=[ - kevm_cli_args.logging_args, - kevm_cli_args.target_args, - kevm_cli_args.evm_chain_args, - kevm_cli_args.k_args, - ], - ) - run_args.add_argument('input_file', type=file_path, help='Path to input file.') - run_args.add_argument( - '--output', - default=KRunOutput.PRETTY, - type=KRunOutput, - choices=list(KRunOutput), - ) - run_args.add_argument( - '--expand-macros', - dest='expand_macros', - default=True, - action='store_true', - help='Expand macros on the input term before execution.', - ) - run_args.add_argument( - '--no-expand-macros', - dest='expand_macros', - action='store_false', - help='Do not expand macros on the input term before execution.', - ) - run_args.add_argument( - '--debugger', - dest='debugger', - action='store_true', - help='Run GDB debugger for execution.', - ) - - kast_args = command_parser.add_parser( - 'kast', - help='Run KEVM program.', - parents=[ - kevm_cli_args.logging_args, - kevm_cli_args.target_args, - kevm_cli_args.evm_chain_args, - kevm_cli_args.k_args, - ], - ) - kast_args.add_argument('input_file', type=file_path, help='Path to input file.') - kast_args.add_argument( - '--output', - default=PrintOutput.KORE, - type=PrintOutput, - choices=list(PrintOutput), - ) - - return parser - - -def _loglevel(args: Namespace) -> int: - if args.debug: - return logging.DEBUG - - if args.verbose: - return logging.INFO - - return logging.WARNING - - -if __name__ == '__main__': - main() diff --git a/kevm-pyk/src/kevm_pyk/cli.py b/kevm-pyk/src/kevm_pyk/cli.py deleted file mode 100644 index 50bfa43759..0000000000 --- a/kevm-pyk/src/kevm_pyk/cli.py +++ /dev/null @@ -1,341 +0,0 @@ -from __future__ import annotations - -from argparse import ArgumentParser -from functools import cached_property -from pathlib import Path -from typing import TYPE_CHECKING - -from pyk.cli.args import KCLIArgs -from pyk.cli.utils import dir_path - -from .kompile import KompileTarget -from .utils import arg_pair_of - -if TYPE_CHECKING: - from collections.abc import Callable - from typing import TypeVar - - from pyk.kcfg.kcfg import NodeIdLike - - T = TypeVar('T') - - -def list_of(elem_type: Callable[[str], T], delim: str = ';') -> Callable[[str], list[T]]: - def parse(s: str) -> list[T]: - return [elem_type(elem) for elem in s.split(delim)] - - return parse - - -def node_id_like(s: str) -> NodeIdLike: - try: - return int(s) - except ValueError: - return s - - -class KEVMCLIArgs(KCLIArgs): - @cached_property - def target_args(self) -> ArgumentParser: - args = ArgumentParser(add_help=False) - args.add_argument('--target', type=KompileTarget, choices=list(KompileTarget)) - return args - - @cached_property - def k_args(self) -> ArgumentParser: - args = super().definition_args - args.add_argument('--depth', default=None, type=int, help='Maximum depth to execute to.') - return args - - @cached_property - def kprove_args(self) -> ArgumentParser: - args = ArgumentParser(add_help=False) - args.add_argument( - '--debug-equations', - type=list_of(str, delim=','), - default=[], - help='Comma-separate list of equations to debug.', - ) - return args - - @cached_property - def kprove_legacy_args(self) -> ArgumentParser: - args = ArgumentParser(add_help=False) - args.add_argument( - '--bug-report', - default=False, - action='store_true', - help='Generate a haskell-backend bug report for the execution.', - ) - args.add_argument( - '--debugger', - dest='debugger', - default=False, - action='store_true', - help='Launch proof in an interactive debugger.', - ) - args.add_argument( - '--max-depth', - dest='max_depth', - default=None, - type=int, - help='The maximum number of computational steps to prove.', - ) - args.add_argument( - '--max-counterexamples', - type=int, - dest='max_counterexamples', - default=None, - help='Maximum number of counterexamples reported before a forcible stop.', - ) - args.add_argument( - '--branching-allowed', - type=int, - dest='branching_allowed', - default=None, - help='Number of branching events allowed before a forcible stop.', - ) - args.add_argument( - '--haskell-backend-arg', - dest='haskell_backend_args', - default=[], - action='append', - help='Arguments passed to the Haskell backend execution engine.', - ) - return args - - @cached_property - def evm_chain_args(self) -> ArgumentParser: - schedules = ( - 'DEFAULT', - 'FRONTIER', - 'HOMESTEAD', - 'TANGERINE_WHISTLE', - 'SPURIOUS_DRAGON', - 'BYZANTIUM', - 'CONSTANTINOPLE', - 'PETERSBURG', - 'ISTANBUL', - 'BERLIN', - 'LONDON', - 'MERGE', - ) - modes = ('NORMAL', 'VMTESTS') - - args = ArgumentParser(add_help=False) - args.add_argument( - '--schedule', - choices=schedules, - default='MERGE', - help=f"schedule to use for execution [{'|'.join(schedules)}]", - ) - args.add_argument('--chainid', type=int, default=1, help='chain ID to use for execution') - args.add_argument( - '--mode', - choices=modes, - default='NORMAL', - help="execution mode to use [{'|'.join(modes)}]", - ) - return args - - @cached_property - def display_args(self) -> ArgumentParser: - args = super().display_args - args.add_argument( - '--sort-collections', - dest='sort_collections', - default=False, - action='store_true', - help='Sort collections before outputting term.', - ) - return args - - @cached_property - def foundry_args(self) -> ArgumentParser: - args = ArgumentParser(add_help=False) - args.add_argument( - '--foundry-project-root', - dest='foundry_root', - type=dir_path, - default=Path('.'), - help='Path to Foundry project root directory.', - ) - return args - - @cached_property - def rpc_args(self) -> ArgumentParser: - args = ArgumentParser(add_help=False) - args.add_argument( - '--bug-report', - default=False, - action='store_true', - help='Generate a haskell-backend bug report for the execution.', - ) - args.add_argument( - '--trace-rewrites', - default=False, - action='store_true', - help='Log traces of all simplification and rewrite rule applications.', - ) - return args - - @cached_property - def explore_args(self) -> ArgumentParser: - args = ArgumentParser(add_help=False) - args.add_argument( - '--break-every-step', - dest='break_every_step', - default=False, - action='store_true', - help='Store a node for every EVM opcode step (expensive).', - ) - args.add_argument( - '--break-on-jumpi', - dest='break_on_jumpi', - default=False, - action='store_true', - help='Store a node for every EVM jump opcode.', - ) - args.add_argument( - '--break-on-calls', - dest='break_on_calls', - default=True, - action='store_true', - help='Store a node for every EVM call made.', - ) - args.add_argument( - '--no-break-on-calls', - dest='break_on_calls', - action='store_false', - help='Do not store a node for every EVM call made.', - ) - args.add_argument( - '--simplify-init', - dest='simplify_init', - default=True, - action='store_true', - help='Simplify the initial and target states at startup.', - ) - args.add_argument( - '--no-simplify-init', - dest='simplify_init', - action='store_false', - help='Do not simplify the initial and target states at startup.', - ) - args.add_argument( - '--max-depth', - dest='max_depth', - default=1000, - type=int, - help='Maximum number of K steps before the state is saved in a new node in the CFG. Branching will cause this to happen earlier.', - ) - args.add_argument( - '--max-iterations', - dest='max_iterations', - default=None, - type=int, - help='Number of times to expand the next pending node in the CFG.', - ) - args.add_argument( - '--kore-rpc-command', - dest='kore_rpc_command', - type=str, - default=None, - help='Custom command to start RPC server', - ) - args.add_argument( - '--failure-information', - dest='failure_info', - default=True, - action='store_true', - help='Show failure summary for all failing tests', - ) - args.add_argument( - '--no-failure-information', - dest='failure_info', - action='store_false', - help='Do not show failure summary for failing tests', - ) - args.add_argument( - '--auto-abstract-gas', - dest='auto_abstract_gas', - action='store_true', - help='Automatically extract gas cell when infinite gas is enabled', - ) - args.add_argument( - '--counterexample-information', - dest='counterexample_info', - default=False, - action='store_true', - help='Show models for failing nodes.', - ) - return args - - @cached_property - def k_gen_args(self) -> ArgumentParser: - args = ArgumentParser(add_help=False) - args.add_argument( - '--require', - dest='requires', - default=[], - action='append', - help='Extra K requires to include in generated output.', - ) - args.add_argument( - '--module-import', - dest='imports', - default=[], - action='append', - help='Extra modules to import into generated main module.', - ) - return args - - @cached_property - def kcfg_show_args(self) -> ArgumentParser: - args = ArgumentParser(add_help=False) - args.add_argument( - '--node', - type=node_id_like, - dest='nodes', - default=[], - action='append', - help='List of nodes to display as well.', - ) - args.add_argument( - '--node-delta', - type=arg_pair_of(node_id_like, node_id_like), - dest='node_deltas', - default=[], - action='append', - help='List of nodes to display delta for.', - ) - args.add_argument( - '--failure-information', - dest='failure_info', - default=False, - action='store_true', - help='Show failure summary for cfg', - ) - args.add_argument( - '--no-failure-information', - dest='failure_info', - action='store_false', - help='Do not show failure summary for cfg', - ) - args.add_argument( - '--to-module', dest='to_module', default=False, action='store_true', help='Output edges as a K module.' - ) - args.add_argument( - '--pending', dest='pending', default=False, action='store_true', help='Also display pending nodes' - ) - args.add_argument( - '--failing', dest='failing', default=False, action='store_true', help='Also display failing nodes' - ) - args.add_argument( - '--counterexample-information', - dest='counterexample_info', - default=False, - action='store_true', - help="Show models for failing nodes. Should be called with the '--failure-information' flag", - ) - return args diff --git a/kevm-pyk/src/kevm_pyk/config.py b/kevm-pyk/src/kevm_pyk/config.py deleted file mode 100644 index 4e12d20c8f..0000000000 --- a/kevm-pyk/src/kevm_pyk/config.py +++ /dev/null @@ -1,48 +0,0 @@ -from __future__ import annotations - -import os -from pathlib import Path -from subprocess import CalledProcessError -from typing import TYPE_CHECKING - -from pyk.cli.utils import check_dir_path -from pyk.utils import run_process - -if TYPE_CHECKING: - from typing import Final - - -def _kevm_lib() -> Path: - kevm_lib: Path - - env = os.getenv('KEVM_LIB') - if env is not None: - kevm_lib = Path(env).resolve() - check_dir_path(kevm_lib) - return kevm_lib - else: - try: - which_kevm = run_process(('which', 'kevm'), pipe_stderr=True).stdout.strip() - except CalledProcessError: - raise RuntimeError( - "Couldn't locate KEVM libraries. Either set the KEVM_LIB environment variable, or put kevm on PATH." - ) from None - - kevm_path = Path(which_kevm).resolve() - kevm_lib = kevm_path.parents[1] / 'lib/kevm' - - check_dir_path(kevm_lib) - return kevm_lib - - -NIX_LIBS: Final = os.getenv('NIX_LIBS') -KEVM_LIB: Final = _kevm_lib() - -INCLUDE_DIR: Final = KEVM_LIB / 'include/kframework' -check_dir_path(INCLUDE_DIR) - -LLVM_DIR: Final = KEVM_LIB / 'llvm' -HASKELL_DIR: Final = KEVM_LIB / 'haskell' -HASKELL_STANDALONE_DIR: Final = KEVM_LIB / 'haskell-standalone' -NODE_DIR: Final = KEVM_LIB / 'node' -FOUNDRY_DIR: Final = KEVM_LIB / 'foundry' diff --git a/kevm-pyk/src/kevm_pyk/gst_to_kore.py b/kevm-pyk/src/kevm_pyk/gst_to_kore.py deleted file mode 100644 index e7068bfd6c..0000000000 --- a/kevm-pyk/src/kevm_pyk/gst_to_kore.py +++ /dev/null @@ -1,79 +0,0 @@ -from __future__ import annotations - -import json -import logging -import sys -from argparse import ArgumentParser -from typing import TYPE_CHECKING - -from pyk.cli.utils import file_path -from pyk.kore.prelude import INT, SORT_JSON, SORT_K_ITEM, inj, int_dv, json_to_kore, top_cell_initializer -from pyk.kore.syntax import App, SortApp - -from .cli import KEVMCLIArgs - -if TYPE_CHECKING: - from argparse import Namespace - from pathlib import Path - from typing import Any, Final - - from pyk.kore.syntax import Pattern - - -_LOGGER: Final = logging.getLogger(__name__) -_LOG_FORMAT: Final = '%(levelname)s %(asctime)s %(name)s - %(message)s' - - -SORT_SCHEDULE: Final = SortApp('SortSchedule') -SORT_MODE: Final = SortApp('SortMode') -SORT_ETHEREUM_SIMULATION: Final = SortApp('SortEthereumSimulation') - - -def gst_to_kore(gst_data: Any, schedule: str, mode: str, chainid: int) -> App: - return kore_pgm_to_kore(json_to_kore(gst_data), SORT_JSON, schedule, mode, chainid) - - -def kore_pgm_to_kore(pgm: Pattern, pattern_sort: SortApp, schedule: str, mode: str, chainid: int) -> App: - config = { - '$PGM': inj(pattern_sort, SORT_K_ITEM, pgm), - '$SCHEDULE': inj(SORT_SCHEDULE, SORT_K_ITEM, _schedule_to_kore(schedule)), - '$MODE': inj(SORT_MODE, SORT_K_ITEM, _mode_to_kore(mode)), - '$CHAINID': inj(INT, SORT_K_ITEM, int_dv(chainid)), - } - return top_cell_initializer(config) - - -def _schedule_to_kore(schedule: str) -> App: - return App(f"Lbl{schedule}'Unds'EVM") - - -def _mode_to_kore(mode: str) -> App: - return App(f'Lbl{mode}') - - -def main() -> None: - sys.setrecursionlimit(15000000) - args = _parse_args() - _exec_gst_to_kore(args.input_file, args.schedule, args.mode, args.chainid) - - -def _exec_gst_to_kore(input_file: Path, schedule: str, mode: str, chainid: int) -> None: - gst_data = json.loads(input_file.read_text()) - kore = gst_to_kore(gst_data, schedule, mode, chainid) - kore.write(sys.stdout) - sys.stdout.write('\n') - _LOGGER.info('Finished writing KORE') - - -def _parse_args() -> Namespace: - kevm_cli_args = KEVMCLIArgs() - parser = ArgumentParser( - description='Convert a GeneralStateTest to Kore for compsumption by KEVM', - parents=[kevm_cli_args.evm_chain_args], - ) - parser.add_argument('input_file', type=file_path, help='path to GST') - return parser.parse_args() - - -if __name__ == '__main__': - main() diff --git a/kevm-pyk/src/kevm_pyk/interpreter.py b/kevm-pyk/src/kevm_pyk/interpreter.py deleted file mode 100644 index f252a47ca8..0000000000 --- a/kevm-pyk/src/kevm_pyk/interpreter.py +++ /dev/null @@ -1,32 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING - -from pyk.kore.parser import KoreParser -from pyk.utils import run_process - -from . import config -from .gst_to_kore import gst_to_kore - -if TYPE_CHECKING: - from subprocess import CompletedProcess - from typing import Any - - from pyk.kore.syntax import Pattern - - -def interpret(gst_data: Any, schedule: str, mode: str, chainid: int, *, check: bool = True) -> Pattern: - proc_res = _interpret(gst_data, schedule, mode, chainid) - - if check: - proc_res.check_returncode() - - kore = KoreParser(proc_res.stdout).pattern() - return kore - - -def _interpret(gst_data: Any, schedule: str, mode: str, chainid: int) -> CompletedProcess: - interpreter = config.LLVM_DIR / 'interpreter' - init_kore = gst_to_kore(gst_data, schedule, mode, chainid) - proc_res = run_process([str(interpreter), '/dev/stdin', '-1', '/dev/stdout'], input=init_kore.text, check=False) - return proc_res diff --git a/kevm-pyk/src/kevm_pyk/kevm.py b/kevm-pyk/src/kevm_pyk/kevm.py deleted file mode 100644 index e370cf0edc..0000000000 --- a/kevm-pyk/src/kevm_pyk/kevm.py +++ /dev/null @@ -1,482 +0,0 @@ -from __future__ import annotations - -import logging -from typing import TYPE_CHECKING - -from pyk.cterm import CTerm -from pyk.kast.inner import KApply, KLabel, KSequence, KSort, KVariable, build_assoc -from pyk.kast.manip import abstract_term_safely, bottom_up, flatten_label -from pyk.kast.pretty import paren -from pyk.kcfg.semantics import KCFGSemantics -from pyk.kcfg.show import NodePrinter -from pyk.ktool.kprove import KProve -from pyk.ktool.krun import KRun -from pyk.prelude.k import K -from pyk.prelude.kint import intToken, ltInt -from pyk.prelude.ml import mlEqualsTrue -from pyk.prelude.string import stringToken -from pyk.proof.reachability import APRBMCProof, APRProof -from pyk.proof.show import APRBMCProofNodePrinter, APRProofNodePrinter - -if TYPE_CHECKING: - from collections.abc import Iterable - from pathlib import Path - from typing import Final - - from pyk.kast import KInner - from pyk.kast.outer import KFlatModule - from pyk.kcfg import KCFG - from pyk.ktool.kprint import SymbolTable - from pyk.utils import BugReport - -_LOGGER: Final = logging.getLogger(__name__) - - -# KEVM class - - -class KEVMSemantics(KCFGSemantics): - auto_abstract_gas: bool - - def __init__(self, auto_abstract_gas: bool = False) -> None: - self.auto_abstract_gas = auto_abstract_gas - - def is_terminal(self, cterm: CTerm) -> bool: - k_cell = cterm.cell('K_CELL') - # #halt - if k_cell == KEVM.halt(): - return True - elif type(k_cell) is KSequence: - # . - if k_cell.arity == 0: - return True - # #halt - elif k_cell.arity == 1 and k_cell[0] == KEVM.halt(): - return True - # #halt ~> X:K - elif ( - k_cell.arity == 2 and k_cell[0] == KEVM.halt() and type(k_cell[1]) is KVariable and k_cell[1].sort == K - ): - return True - return False - - def same_loop(self, cterm1: CTerm, cterm2: CTerm) -> bool: - # In the same program, at the same calldepth, at the same program counter - for cell in ['PC_CELL', 'CALLDEPTH_CELL', 'PROGRAM_CELL']: - if cterm1.cell(cell) != cterm2.cell(cell): - return False - # duplicate from KEVM.extract_branches - jumpi_pattern = KEVM.jumpi_applied(KVariable('###PCOUNT'), KVariable('###COND')) - pc_next_pattern = KApply('#pc[_]_EVM_InternalOp_OpCode', [KEVM.jumpi()]) - branch_pattern = KSequence([jumpi_pattern, pc_next_pattern, KEVM.sharp_execute(), KVariable('###CONTINUATION')]) - subst1 = branch_pattern.match(cterm1.cell('K_CELL')) - subst2 = branch_pattern.match(cterm2.cell('K_CELL')) - # Jumping to the same program counter - if subst1 is not None and subst2 is not None and subst1['###PCOUNT'] == subst2['###PCOUNT']: - # Same wordstack structure - if KEVM.wordstack_len(cterm1.cell('WORDSTACK_CELL')) == KEVM.wordstack_len(cterm2.cell('WORDSTACK_CELL')): - return True - return False - - def extract_branches(self, cterm: CTerm) -> list[KInner]: - k_cell = cterm.cell('K_CELL') - jumpi_pattern = KEVM.jumpi_applied(KVariable('###PCOUNT'), KVariable('###COND')) - pc_next_pattern = KApply('#pc[_]_EVM_InternalOp_OpCode', [KEVM.jumpi()]) - branch_pattern = KSequence([jumpi_pattern, pc_next_pattern, KEVM.sharp_execute(), KVariable('###CONTINUATION')]) - if subst := branch_pattern.match(k_cell): - cond = subst['###COND'] - if cond_subst := KEVM.bool_2_word(KVariable('###BOOL_2_WORD')).match(cond): - cond = cond_subst['###BOOL_2_WORD'] - else: - cond = KApply('_==Int_', [cond, intToken(0)]) - return [mlEqualsTrue(cond), mlEqualsTrue(KApply('notBool_', [cond]))] - return [] - - def abstract_node(self, cterm: CTerm) -> CTerm: - if not self.auto_abstract_gas: - return cterm - - def _replace(term: KInner) -> KInner: - if type(term) is KApply and term.label.name == '': - gas_term = term.args[0] - if type(gas_term) is KApply and gas_term.label.name == 'infGas': - if type(gas_term.args[0]) is KVariable: - return term - return KApply( - '', KApply('infGas', abstract_term_safely(term, base_name='VGAS', sort=KSort('Int'))) - ) - return term - elif type(term) is KApply and term.label.name == '': - if type(term.args[0]) is KVariable: - return term - return KApply('', abstract_term_safely(term, base_name='VREFUND', sort=KSort('Int'))) - else: - return term - - return CTerm(config=bottom_up(_replace, cterm.config), constraints=cterm.constraints) - - -class KEVM(KProve, KRun): - def __init__( - self, - definition_dir: Path, - main_file: Path | None = None, - use_directory: Path | None = None, - kprove_command: str = 'kprove', - krun_command: str = 'krun', - extra_unparsing_modules: Iterable[KFlatModule] = (), - bug_report: BugReport | None = None, - ) -> None: - # I'm going for the simplest version here, we can change later if there is an advantage. - # https://stackoverflow.com/questions/9575409/calling-parent-class-init-with-multiple-inheritance-whats-the-right-way - # Note that they say using `super` supports dependency injection, but I have never liked dependency injection anyway. - KProve.__init__( - self, - definition_dir, - use_directory=use_directory, - main_file=main_file, - command=kprove_command, - extra_unparsing_modules=extra_unparsing_modules, - bug_report=bug_report, - patch_symbol_table=KEVM._kevm_patch_symbol_table, - ) - KRun.__init__( - self, - definition_dir, - use_directory=use_directory, - command=krun_command, - extra_unparsing_modules=extra_unparsing_modules, - bug_report=bug_report, - patch_symbol_table=KEVM._kevm_patch_symbol_table, - ) - - @classmethod - def _kevm_patch_symbol_table(cls, symbol_table: SymbolTable) -> None: - # fmt: off - symbol_table['#Bottom'] = lambda: '#Bottom' - symbol_table['_Map_'] = paren(lambda m1, m2: m1 + '\n' + m2) - symbol_table['_AccountCellMap_'] = paren(lambda a1, a2: a1 + '\n' + a2) - symbol_table['.AccountCellMap'] = lambda: '.Bag' - symbol_table['AccountCellMapItem'] = lambda k, v: v - symbol_table['_Word__EVM-TYPES_Int_Int_Int'] = paren(lambda a1, a2: '(' + a1 + ') >Word (' + a2 + ')') - symbol_table['_<=Word__EVM-TYPES_Int_Int_Int'] = paren(lambda a1, a2: '(' + a1 + ') <=Word (' + a2 + ')') - symbol_table['_>=Word__EVM-TYPES_Int_Int_Int'] = paren(lambda a1, a2: '(' + a1 + ') >=Word (' + a2 + ')') - symbol_table['_==Word__EVM-TYPES_Int_Int_Int'] = paren(lambda a1, a2: '(' + a1 + ') ==Word (' + a2 + ')') - symbol_table['_s_', - '#And', - '_andBool_', - '_:__EVM-TYPES_WordStack_Int_WordStack', - '#Implies', - '_impliesBool_', - '_&Int_', - '_*Int_', - '_+Int_', - '_-Int_', - '_/Int_', - '_|Int_', - '_modInt_', - 'notBool_', - '#Or', - '_orBool_', - '_Set_', - 'typedArgs', - '_up/Int__EVM-TYPES_Int_Int_Int', - '_:_WS', - ] - for symb in paren_symbols: - if symb in symbol_table: - symbol_table[symb] = paren(symbol_table[symb]) - # fmt: on - - class Sorts: - KEVM_CELL: Final = KSort('KevmCell') - - def short_info(self, cterm: CTerm) -> list[str]: - k_cell = self.pretty_print(cterm.cell('K_CELL')).replace('\n', ' ') - if len(k_cell) > 80: - k_cell = k_cell[0:80] + ' ...' - k_str = f'k: {k_cell}' - ret_strs = [k_str] - for cell, name in [('PC_CELL', 'pc'), ('CALLDEPTH_CELL', 'callDepth'), ('STATUSCODE_CELL', 'statusCode')]: - if cell in cterm.cells: - ret_strs.append(f'{name}: {self.pretty_print(cterm.cell(cell))}') - return ret_strs - - @staticmethod - def add_invariant(cterm: CTerm) -> CTerm: - constraints = [] - word_stack = cterm.cell('WORDSTACK_CELL') - if type(word_stack) is not KVariable: - word_stack_items = flatten_label('_:__EVM-TYPES_WordStack_Int_WordStack', word_stack) - for i in word_stack_items[:-1]: - constraints.append(mlEqualsTrue(KEVM.range_uint(256, i))) - - gas_cell = cterm.cell('GAS_CELL') - if not (type(gas_cell) is KApply and gas_cell.label.name == 'infGas'): - constraints.append(mlEqualsTrue(KEVM.range_uint(256, gas_cell))) - constraints.append(mlEqualsTrue(KEVM.range_address(cterm.cell('ID_CELL')))) - constraints.append(mlEqualsTrue(KEVM.range_address(cterm.cell('CALLER_CELL')))) - constraints.append(mlEqualsTrue(KEVM.range_address(cterm.cell('ORIGIN_CELL')))) - constraints.append(mlEqualsTrue(ltInt(KEVM.size_bytes(cterm.cell('CALLDATA_CELL')), KEVM.pow128()))) - - constraints.append(mlEqualsTrue(KEVM.range_blocknum(cterm.cell('NUMBER_CELL')))) - - for c in constraints: - cterm = cterm.add_constraint(c) - return cterm - - @staticmethod - def halt() -> KApply: - return KApply('#halt_EVM_KItem') - - @staticmethod - def sharp_execute() -> KApply: - return KApply('#execute_EVM_KItem') - - @staticmethod - def jumpi() -> KApply: - return KApply('JUMPI_EVM_BinStackOp') - - @staticmethod - def jump() -> KApply: - return KApply('JUMP_EVM_UnStackOp') - - @staticmethod - def jumpi_applied(pc: KInner, cond: KInner) -> KApply: - return KApply('____EVM_InternalOp_BinStackOp_Int_Int', [KEVM.jumpi(), pc, cond]) - - @staticmethod - def jump_applied(pc: KInner) -> KApply: - return KApply('___EVM_InternalOp_UnStackOp_Int', [KEVM.jump(), pc]) - - @staticmethod - def pow128() -> KApply: - return KApply('pow128_WORD_Int', []) - - @staticmethod - def pow256() -> KApply: - return KApply('pow256_WORD_Int', []) - - @staticmethod - def range_uint(width: int, i: KInner) -> KApply: - return KApply('#rangeUInt(_,_)_WORD_Bool_Int_Int', [intToken(width), i]) - - @staticmethod - def range_sint(width: int, i: KInner) -> KApply: - return KApply('#rangeSInt(_,_)_WORD_Bool_Int_Int', [intToken(width), i]) - - @staticmethod - def range_address(i: KInner) -> KApply: - return KApply('#rangeAddress(_)_WORD_Bool_Int', [i]) - - @staticmethod - def range_bool(i: KInner) -> KApply: - return KApply('#rangeBool(_)_WORD_Bool_Int', [i]) - - @staticmethod - def range_bytes(width: KInner, ba: KInner) -> KApply: - return KApply('#rangeBytes(_,_)_WORD_Bool_Int_Int', [width, ba]) - - @staticmethod - def range_blocknum(ba: KInner) -> KApply: - return KApply('#rangeBlockNum(_)_WORD_Bool_Int', [ba]) - - @staticmethod - def bool_2_word(cond: KInner) -> KApply: - return KApply('bool2Word(_)_EVM-TYPES_Int_Bool', [cond]) - - @staticmethod - def size_bytes(ba: KInner) -> KApply: - return KApply('lengthBytes(_)_BYTES-HOOKED_Int_Bytes', [ba]) - - @staticmethod - def inf_gas(g: KInner) -> KApply: - return KApply('infGas', [g]) - - @staticmethod - def compute_valid_jumpdests(p: KInner) -> KApply: - return KApply('#computeValidJumpDests(_)_EVM_Set_Bytes', [p]) - - @staticmethod - def bin_runtime(c: KInner) -> KApply: - return KApply('binRuntime', [c]) - - @staticmethod - def hashed_location(compiler: str, base: KInner, offset: KInner, member_offset: int = 0) -> KApply: - location = KApply( - '#hashedLocation(_,_,_)_HASHED-LOCATIONS_Int_String_Int_IntList', [stringToken(compiler), base, offset] - ) - if member_offset > 0: - location = KApply('_+Int_', [location, intToken(member_offset)]) - return location - - @staticmethod - def loc(accessor: KInner) -> KApply: - return KApply('contract_access_loc', [accessor]) - - @staticmethod - def lookup(map: KInner, key: KInner) -> KApply: - return KApply('#lookup(_,_)_EVM-TYPES_Int_Map_Int', [map, key]) - - @staticmethod - def abi_calldata(name: str, args: list[KInner]) -> KApply: - return KApply('#abiCallData(_,_)_EVM-ABI_Bytes_String_TypedArgs', [stringToken(name), KEVM.typed_args(args)]) - - @staticmethod - def abi_selector(name: str) -> KApply: - return KApply('abi_selector', [stringToken(name)]) - - @staticmethod - def abi_address(a: KInner) -> KApply: - return KApply('#address(_)_EVM-ABI_TypedArg_Int', [a]) - - @staticmethod - def abi_bool(b: KInner) -> KApply: - return KApply('#bool(_)_EVM-ABI_TypedArg_Int', [b]) - - @staticmethod - def abi_type(type: str, value: KInner) -> KApply: - return KApply('abi_type_' + type, [value]) - - @staticmethod - def empty_typedargs() -> KApply: - return KApply('.List{"_,__EVM-ABI_TypedArgs_TypedArg_TypedArgs"}_TypedArgs') - - @staticmethod - def bytes_append(b1: KInner, b2: KInner) -> KApply: - return KApply('_+Bytes__BYTES-HOOKED_Bytes_Bytes_Bytes', [b1, b2]) - - @staticmethod - def account_cell( - id: KInner, balance: KInner, code: KInner, storage: KInner, orig_storage: KInner, nonce: KInner - ) -> KApply: - return KApply( - '', - [ - KApply('', [id]), - KApply('', [balance]), - KApply('', [code]), - KApply('', [storage]), - KApply('', [orig_storage]), - KApply('', [nonce]), - ], - ) - - @staticmethod - def wordstack_len(wordstack: KInner) -> int: - return len(flatten_label('_:__EVM-TYPES_WordStack_Int_WordStack', wordstack)) - - @staticmethod - def parse_bytestack(s: KInner) -> KApply: - return KApply('#parseByteStack(_)_SERIALIZATION_Bytes_String', [s]) - - @staticmethod - def bytes_empty() -> KApply: - return KApply('.Bytes_BYTES-HOOKED_Bytes') - - @staticmethod - def intlist(ints: list[KInner]) -> KApply: - res = KApply('.List{"___HASHED-LOCATIONS_IntList_Int_IntList"}_IntList') - for i in reversed(ints): - res = KApply('___HASHED-LOCATIONS_IntList_Int_IntList', [i, res]) - return res - - @staticmethod - def typed_args(args: list[KInner]) -> KApply: - res = KApply('.List{"_,__EVM-ABI_TypedArgs_TypedArg_TypedArgs"}_TypedArgs') - for i in reversed(args): - res = KApply('_,__EVM-ABI_TypedArgs_TypedArg_TypedArgs', [i, res]) - return res - - @staticmethod - def accounts(accts: list[KInner]) -> KInner: - wrapped_accounts: list[KInner] = [] - for acct in accts: - if type(acct) is KApply and acct.label.name == '': - acct_id = acct.args[0] - wrapped_accounts.append(KApply('AccountCellMapItem', [acct_id, acct])) - else: - wrapped_accounts.append(acct) - return build_assoc(KApply('.AccountCellMap'), KLabel('_AccountCellMap_'), wrapped_accounts) - - def prove_legacy( - self, - spec_file: Path, - includes: Iterable[Path] = (), - bug_report: bool = False, - spec_module: str | None = None, - claim_labels: Iterable[str] | None = None, - exclude_claim_labels: Iterable[str] = (), - debug: bool = False, - debugger: bool = False, - max_depth: int | None = None, - max_counterexamples: int | None = None, - branching_allowed: int | None = None, - haskell_backend_args: Iterable[str] = (), - ) -> KInner: - md_selector = 'k & ! node' - args: list[str] = [] - haskell_args: list[str] = [] - if claim_labels: - args += ['--claims', ','.join(claim_labels)] - if exclude_claim_labels: - args += ['--exclude', ','.join(exclude_claim_labels)] - if debug: - args.append('--debug') - if debugger: - args.append('--debugger') - if branching_allowed: - args += ['--branching-allowed', f'{branching_allowed}'] - if max_counterexamples: - haskell_args += ['--max-counterexamples', f'{max_counterexamples}'] - if bug_report: - haskell_args += ['--bug-report', f'kevm-bug-{spec_file.name.rstrip("-spec.k")}'] - if haskell_backend_args: - haskell_args += list(haskell_backend_args) - - final_state = self.prove( - spec_file=spec_file, - spec_module_name=spec_module, - args=args, - include_dirs=includes, - md_selector=md_selector, - haskell_args=haskell_args, - depth=max_depth, - ) - return final_state - - -class KEVMNodePrinter(NodePrinter): - kevm: KEVM - - def __init__(self, kevm: KEVM): - NodePrinter.__init__(self, kevm) - self.kevm = kevm - - def print_node(self, kcfg: KCFG, node: KCFG.Node) -> list[str]: - ret_strs = super().print_node(kcfg, node) - ret_strs += self.kevm.short_info(node.cterm) - return ret_strs - - -class KEVMAPRNodePrinter(KEVMNodePrinter, APRProofNodePrinter): - def __init__(self, kevm: KEVM, proof: APRProof): - KEVMNodePrinter.__init__(self, kevm) - APRProofNodePrinter.__init__(self, proof, kevm) - - -class KEVMAPRBMCNodePrinter(KEVMNodePrinter, APRBMCProofNodePrinter): - def __init__(self, kevm: KEVM, proof: APRBMCProof): - KEVMNodePrinter.__init__(self, kevm) - APRBMCProofNodePrinter.__init__(self, proof, kevm) - - -def kevm_node_printer(kevm: KEVM, proof: APRProof) -> NodePrinter: - if type(proof) is APRBMCProof: - return KEVMAPRBMCNodePrinter(kevm, proof) - if type(proof) is APRProof: - return KEVMAPRNodePrinter(kevm, proof) - raise ValueError(f'Cannot build NodePrinter for proof type: {type(proof)}') diff --git a/kevm-pyk/src/kevm_pyk/kompile.py b/kevm-pyk/src/kevm_pyk/kompile.py deleted file mode 100644 index abed62852a..0000000000 --- a/kevm-pyk/src/kevm_pyk/kompile.py +++ /dev/null @@ -1,197 +0,0 @@ -from __future__ import annotations - -import logging -import sys -from enum import Enum -from pathlib import Path -from typing import TYPE_CHECKING - -from pyk.ktool.kompile import HaskellKompile, KompileArgs, KompileBackend, LLVMKompile -from pyk.utils import run_process - -from . import config - -if TYPE_CHECKING: - from collections.abc import Iterable - from typing import Final - - from pyk.ktool.kompile import Kompile, LLVMKompileType - - -_LOGGER: Final = logging.getLogger(__name__) - - -HOOK_NAMESPACES: Final = ('JSON', 'KRYPTO', 'BLOCKCHAIN') - - -class Kernel(Enum): - LINUX = 'Linux' - DARWIN = 'Darwin' - - @staticmethod - def get() -> Kernel: - uname = run_process(('uname', '-s'), pipe_stderr=True, logger=_LOGGER).stdout.strip() - return Kernel(uname) - - -class KompileTarget(Enum): - LLVM = 'llvm' - HASKELL = 'haskell' - HASKELL_STANDALONE = 'haskell-standalone' - NODE = 'node' - FOUNDRY = 'foundry' - - @property - def backend(self) -> KompileBackend: - match self: - case self.LLVM | self.NODE: - return KompileBackend.LLVM - case self.HASKELL | self.FOUNDRY | self.HASKELL_STANDALONE: - return KompileBackend.HASKELL - case _: - raise AssertionError() - - @property - def definition_dir(self) -> Path: - match self: - case self.LLVM: - return config.LLVM_DIR - case self.NODE: - return config.NODE_DIR - case self.HASKELL: - return config.HASKELL_DIR - case self.HASKELL_STANDALONE: - return config.HASKELL_STANDALONE_DIR - case self.FOUNDRY: - return config.FOUNDRY_DIR - case _: - raise AssertionError() - - @property - def md_selector(self) -> str: - match self: - case self.LLVM: - return 'k & ! node & ! symbolic' - case self.NODE: - return 'k & ! symbolic & ! standalone' - case self.HASKELL: - return 'k & ! node & ! concrete' - case self.HASKELL_STANDALONE: - return 'k & ! node & ! concrete' - case self.FOUNDRY: - return 'k & ! node & ! concrete' - case _: - raise AssertionError() - - -def kevm_kompile( - target: KompileTarget, - *, - output_dir: Path | None = None, - main_file: Path, - main_module: str | None, - syntax_module: str | None, - includes: Iterable[str] = (), - emit_json: bool = True, - read_only: bool = False, - ccopts: Iterable[str] = (), - optimization: int = 0, - llvm_kompile_type: LLVMKompileType | None = None, - enable_llvm_debug: bool = False, - debug: bool = False, - verbose: bool = False, -) -> Path: - backend = target.backend - md_selector = target.md_selector - - include_dirs = [Path(include) for include in includes] - include_dirs += [config.INCLUDE_DIR] - - base_args = KompileArgs( - main_file=main_file, - main_module=main_module, - syntax_module=syntax_module, - include_dirs=include_dirs, - md_selector=md_selector, - hook_namespaces=HOOK_NAMESPACES, - emit_json=emit_json, - read_only=read_only, - ) - - kompile: Kompile - kernel = Kernel.get() - haskell_binary = kernel is not Kernel.DARWIN - match backend: - case KompileBackend.LLVM: - ccopts = list(ccopts) + _lib_ccopts(kernel) - no_llvm_kompile = target == KompileTarget.NODE - kompile = LLVMKompile( - base_args=base_args, - ccopts=ccopts, - no_llvm_kompile=no_llvm_kompile, - opt_level=optimization, - llvm_kompile_type=llvm_kompile_type, - enable_llvm_debug=enable_llvm_debug, - ) - case KompileBackend.HASKELL: - kompile = HaskellKompile( - base_args=base_args, - haskell_binary=haskell_binary, - ) - case _: - raise ValueError(f'Unsupported backend: {backend.value}') - - try: - return kompile(output_dir=output_dir or target.definition_dir, debug=debug, verbose=verbose) - except RuntimeError as err: - sys.stderr.write(f'\nkompile stdout:\n{err.args[1]}\n') - sys.stderr.write(f'\nkompile stderr:\n{err.args[2]}\n') - sys.stderr.write(f'\nkompile returncode:\n{err.args[3]}\n') - sys.stderr.flush() - raise - - -def _lib_ccopts(kernel: Kernel) -> list[str]: - ccopts = ['-g', '-std=c++17'] - - ccopts += ['-lssl', '-lcrypto'] - - libff_dir = config.KEVM_LIB / 'libff' - ccopts += [f'{libff_dir}/lib/libff.a', f'-I{libff_dir}/include'] - - libcryptopp_dir = config.KEVM_LIB / 'libcryptopp' - ccopts += [f'{libcryptopp_dir}/lib/libcryptopp.a', f'-I{libcryptopp_dir}/include'] - - libsecp256k1_dir = config.KEVM_LIB / 'libsecp256k1' - ccopts += [f'{libsecp256k1_dir}/lib/libsecp256k1.a', f'-I{libsecp256k1_dir}/include'] - - plugin_include = config.KEVM_LIB / 'blockchain-k-plugin/include' - ccopts += [ - f'{plugin_include}/c/plugin_util.cpp', - f'{plugin_include}/c/crypto.cpp', - f'{plugin_include}/c/blake2.cpp', - ] - - if kernel == Kernel.DARWIN: - if not config.NIX_LIBS: - brew_root = run_process(('brew', '--prefix'), pipe_stderr=True, logger=_LOGGER).stdout.strip() - ccopts += [ - f'-I{brew_root}/include', - f'-L{brew_root}/lib', - ] - - openssl_root = run_process(('brew', '--prefix', 'openssl'), pipe_stderr=True, logger=_LOGGER).stdout.strip() - ccopts += [ - f'-I{openssl_root}/include', - f'-L{openssl_root}/lib', - ] - else: - ccopts += config.NIX_LIBS.split(' ') - elif kernel == Kernel.LINUX: - ccopts += ['-lprocps'] - if config.NIX_LIBS: - ccopts += config.NIX_LIBS.split(' ') - else: - raise AssertionError() - - return ccopts diff --git a/kevm-pyk/src/kevm_pyk/py.typed b/kevm-pyk/src/kevm_pyk/py.typed deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/kevm-pyk/src/kevm_pyk/utils.py b/kevm-pyk/src/kevm_pyk/utils.py deleted file mode 100644 index 31a34392b2..0000000000 --- a/kevm-pyk/src/kevm_pyk/utils.py +++ /dev/null @@ -1,340 +0,0 @@ -from __future__ import annotations - -import logging -from contextlib import contextmanager -from pathlib import Path -from typing import TYPE_CHECKING - -from pyk.cterm import CTerm -from pyk.kast.inner import KApply, KInner, KRewrite, KVariable, Subst -from pyk.kast.manip import ( - abstract_term_safely, - bottom_up, - free_vars, - is_anon_var, - set_cell, - split_config_and_constraints, - split_config_from, -) -from pyk.kast.outer import KSequence -from pyk.kcfg import KCFGExplore -from pyk.kore.rpc import KoreClient, KoreExecLogFormat, kore_server -from pyk.proof import APRBMCProof, APRBMCProver, APRProof, APRProver -from pyk.proof.equality import EqualityProof, EqualityProver -from pyk.utils import single - -if TYPE_CHECKING: - from collections.abc import Callable, Collection, Iterable, Iterator - from typing import Final, TypeVar - - from pyk.kast.outer import KDefinition - from pyk.kcfg import KCFG - from pyk.kcfg.semantics import KCFGSemantics - from pyk.ktool.kprint import KPrint - from pyk.ktool.kprove import KProve - from pyk.proof.proof import Proof - from pyk.utils import BugReport - - T1 = TypeVar('T1') - T2 = TypeVar('T2') - -_LOGGER: Final = logging.getLogger(__name__) - - -def get_apr_proof_for_spec( # noqa: N802 - kprove: KProve, - spec_file: Path, - save_directory: Path | None, - spec_module_name: str | None = None, - include_dirs: Iterable[Path] = (), - md_selector: str | None = None, - claim_labels: Iterable[str] | None = None, - exclude_claim_labels: Iterable[str] = (), -) -> APRProof: - if save_directory is None: - save_directory = Path('.') - _LOGGER.info(f'Using default save_directory: {save_directory}') - - _LOGGER.info(f'Extracting claim from file: {spec_file}') - claim = single( - kprove.get_claims( - spec_file, - spec_module_name=spec_module_name, - include_dirs=include_dirs, - md_selector=md_selector, - claim_labels=claim_labels, - exclude_claim_labels=exclude_claim_labels, - ) - ) - - apr_proof = APRProof.read_proof_data(save_directory, claim.label) - return apr_proof - - -def kevm_prove( - kprove: KProve, - proof: Proof, - kcfg_explore: KCFGExplore, - max_depth: int = 1000, - max_iterations: int | None = None, - break_every_step: bool = False, - break_on_jumpi: bool = False, - break_on_calls: bool = True, - extract_branches: Callable[[CTerm], Iterable[KInner]] | None = None, - abstract_node: Callable[[CTerm], CTerm] | None = None, -) -> bool: - proof = proof - terminal_rules = ['EVM.halt'] - cut_point_rules = [] - if break_every_step: - terminal_rules.append('EVM.step') - if break_on_jumpi: - cut_point_rules.extend(['EVM.jumpi.true', 'EVM.jumpi.false']) - if break_on_calls: - cut_point_rules.extend( - [ - 'EVM.call', - 'EVM.callcode', - 'EVM.delegatecall', - 'EVM.staticcall', - 'EVM.create', - 'EVM.create2', - 'FOUNDRY.foundry.call', - 'EVM.end', - 'EVM.return.exception', - 'EVM.return.revert', - 'EVM.return.success', - ] - ) - prover: APRBMCProver | APRProver | EqualityProver - if type(proof) is APRBMCProof: - prover = APRBMCProver(proof, kcfg_explore) - elif type(proof) is APRProof: - prover = APRProver(proof, kcfg_explore) - elif type(proof) is EqualityProof: - prover = EqualityProver(kcfg_explore=kcfg_explore, proof=proof) - else: - raise ValueError(f'Do not know how to build prover for proof: {proof}') - try: - if type(prover) is APRBMCProver or type(prover) is APRProver: - prover.advance_proof( - max_iterations=max_iterations, - execute_depth=max_depth, - terminal_rules=terminal_rules, - cut_point_rules=cut_point_rules, - ) - assert isinstance(proof, APRProof) - if proof.passed: - _LOGGER.info(f'Proof passed: {proof.id}') - return True - else: - _LOGGER.error(f'Proof failed: {proof.id}') - return False - elif type(prover) is EqualityProver: - prover.advance_proof() - if prover.proof.passed: - _LOGGER.info(f'Proof passed: {prover.proof.id}') - return True - elif prover.proof.failed: - _LOGGER.error(f'Proof failed: {prover.proof.id}') - if type(proof) is EqualityProof: - _LOGGER.info(proof.pretty(kprove)) - return False - else: - _LOGGER.info(f'Proof pending: {prover.proof.id}') - return False - return False - - except Exception as e: - _LOGGER.error(f'Proof crashed: {proof.id}\n{e}', exc_info=True) - return False - - -def print_failure_info(proof: Proof, kcfg_explore: KCFGExplore, counterexample_info: bool = False) -> list[str]: - if type(proof) is APRProof or type(proof) is APRBMCProof: - target = proof.kcfg.node(proof.target) - - res_lines: list[str] = [] - - num_pending = len(proof.pending) - num_failing = len(proof.failing) - res_lines.append( - f'{num_pending + num_failing} Failure nodes. ({num_pending} pending and {num_failing} failing)' - ) - if num_pending > 0: - res_lines.append('') - res_lines.append('Pending nodes:') - for node in proof.pending: - res_lines.append('') - res_lines.append(f'ID: {node.id}:') - if num_failing > 0: - res_lines.append('') - res_lines.append('Failing nodes:') - for node in proof.failing: - res_lines.append('') - res_lines.append(f' Node id: {str(node.id)}') - - simplified_node, _ = kcfg_explore.cterm_simplify(node.cterm) - simplified_target, _ = kcfg_explore.cterm_simplify(target.cterm) - - node_cterm = CTerm.from_kast(simplified_node) - target_cterm = CTerm.from_kast(simplified_target) - - res_lines.append(' Failure reason:') - _, reason = kcfg_explore.implication_failure_reason(node_cterm, target_cterm) - res_lines += [f' {line}' for line in reason.split('\n')] - - res_lines.append(' Path condition:') - res_lines += [f' {kcfg_explore.kprint.pretty_print(proof.path_constraints(node.id))}'] - if counterexample_info: - res_lines.extend(print_model(node, kcfg_explore)) - - res_lines.append('') - res_lines.append( - 'Join the Runtime Verification Discord server for support: https://discord.com/invite/CurfmXNtbN' - ) - - return res_lines - elif type(proof) is EqualityProof: - return ['EqualityProof failed.'] - else: - raise ValueError('Unknown proof type.') - - -def print_model(node: KCFG.Node, kcfg_explore: KCFGExplore) -> list[str]: - res_lines: list[str] = [] - result_subst = kcfg_explore.cterm_get_model(node.cterm) - if type(result_subst) is Subst: - res_lines.append(' Model:') - for var, term in result_subst.to_dict().items(): - term_kast = KInner.from_dict(term) - res_lines.append(f' {var} = {kcfg_explore.kprint.pretty_print(term_kast)}') - else: - res_lines.append(' Failed to generate a model.') - - return res_lines - - -def arg_pair_of( - fst_type: Callable[[str], T1], snd_type: Callable[[str], T2], delim: str = ',' -) -> Callable[[str], tuple[T1, T2]]: - def parse(s: str) -> tuple[T1, T2]: - elems = s.split(delim) - length = len(elems) - if length != 2: - raise ValueError(f'Expected 2 elements, found {length}') - return fst_type(elems[0]), snd_type(elems[1]) - - return parse - - -def byte_offset_to_lines(lines: Iterable[str], byte_start: int, byte_width: int) -> tuple[list[str], int, int]: - text_lines = [] - line_start = 0 - for line in lines: - if len(line) < byte_start: - byte_start -= len(line) + 1 - line_start += 1 - else: - break - line_end = line_start - for line in list(lines)[line_start:]: - if byte_start + byte_width < 0: - break - else: - text_lines.append(line) - byte_width -= len(line) + 1 - line_end += 1 - return (text_lines, line_start, line_end) - - -def KDefinition__expand_macros(defn: KDefinition, term: KInner) -> KInner: # noqa: N802 - def _expand_macros(_term: KInner) -> KInner: - if type(_term) is KApply: - prod = defn.production_for_klabel(_term.label) - if 'macro' in prod.att or 'alias' in prod.att or 'macro-rec' in prod.att or 'alias-rec' in prod.att: - for r in defn.macro_rules: - assert type(r.body) is KRewrite - _new_term = r.body.apply_top(_term) - if _new_term != _term: - _term = _new_term - break - return _term - - old_term = None - while term != old_term: - old_term = term - term = bottom_up(_expand_macros, term) - - return term - - -def abstract_cell_vars(cterm: KInner, keep_vars: Collection[KVariable] = ()) -> KInner: - state, _ = split_config_and_constraints(cterm) - config, subst = split_config_from(state) - for s in subst: - if type(subst[s]) is KVariable and not is_anon_var(subst[s]) and subst[s] not in keep_vars: - subst[s] = abstract_term_safely(KVariable('_'), base_name=s) - return Subst(subst)(config) - - -def ensure_ksequence_on_k_cell(cterm: CTerm) -> CTerm: - k_cell = cterm.cell('K_CELL') - if type(k_cell) is not KSequence: - _LOGGER.info('Introducing artificial KSequence on cell.') - return CTerm.from_kast(set_cell(cterm.kast, 'K_CELL', KSequence([k_cell]))) - return cterm - - -def constraints_for(vars: list[str], constraints: Iterable[KInner]) -> Iterable[KInner]: - accounts_constraints = [] - constraints_changed = True - while constraints_changed: - constraints_changed = False - for constraint in constraints: - if constraint not in accounts_constraints and any(v in vars for v in free_vars(constraint)): - accounts_constraints.append(constraint) - vars.extend(free_vars(constraint)) - constraints_changed = True - return accounts_constraints - - -@contextmanager -def legacy_explore( - kprint: KPrint, - *, - kcfg_semantics: KCFGSemantics | None = None, - id: str | None = None, - port: int | None = None, - kore_rpc_command: str | Iterable[str] | None = None, - llvm_definition_dir: Path | None = None, - smt_timeout: int | None = None, - smt_retry_limit: int | None = None, - bug_report: BugReport | None = None, - haskell_log_format: KoreExecLogFormat = KoreExecLogFormat.ONELINE, - haskell_log_entries: Iterable[str] = (), - log_axioms_file: Path | None = None, - trace_rewrites: bool = False, -) -> Iterator[KCFGExplore]: - # Old way of handling KCFGExplore, to be removed - with kore_server( - definition_dir=kprint.definition_dir, - llvm_definition_dir=llvm_definition_dir, - module_name=kprint.main_module, - port=port, - command=kore_rpc_command, - bug_report=bug_report, - smt_timeout=smt_timeout, - smt_retry_limit=smt_retry_limit, - haskell_log_format=haskell_log_format, - haskell_log_entries=haskell_log_entries, - log_axioms_file=log_axioms_file, - ) as server: - with KoreClient('localhost', server.port, bug_report=bug_report) as client: - yield KCFGExplore( - kprint=kprint, - kore_client=client, - kcfg_semantics=kcfg_semantics, - id=id, - trace_rewrites=trace_rewrites, - ) diff --git a/kevm-pyk/src/kontrol/__init__.py b/kevm-pyk/src/kontrol/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/kevm-pyk/src/kontrol/__main__.py b/kevm-pyk/src/kontrol/__main__.py deleted file mode 100644 index bf73d8e150..0000000000 --- a/kevm-pyk/src/kontrol/__main__.py +++ /dev/null @@ -1,663 +0,0 @@ -from __future__ import annotations - -import json -import logging -import sys -from argparse import ArgumentParser -from typing import TYPE_CHECKING - -from pyk.cli.utils import file_path -from pyk.proof.tui import APRProofViewer - -from kevm_pyk.cli import KEVMCLIArgs, node_id_like -from kevm_pyk.config import KEVM_LIB -from kevm_pyk.kompile import KompileTarget -from kevm_pyk.utils import arg_pair_of - -from .foundry import ( - Foundry, - foundry_get_model, - foundry_kompile, - foundry_list, - foundry_merge_nodes, - foundry_node_printer, - foundry_prove, - foundry_remove_node, - foundry_section_edge, - foundry_show, - foundry_simplify_node, - foundry_step_node, - foundry_to_dot, -) -from .solc_to_k import solc_compile, solc_to_k - -if TYPE_CHECKING: - from argparse import Namespace - from collections.abc import Callable, Iterable - from pathlib import Path - from typing import Any, Final, TypeVar - - from pyk.cterm import CTerm - from pyk.kcfg.kcfg import NodeIdLike - from pyk.kcfg.tui import KCFGElem - - T = TypeVar('T') - -_LOGGER: Final = logging.getLogger(__name__) -_LOG_FORMAT: Final = '%(levelname)s %(asctime)s %(name)s - %(message)s' - - -def _ignore_arg(args: dict[str, Any], arg: str, cli_option: str) -> None: - if arg in args: - if args[arg] is not None: - _LOGGER.warning(f'Ignoring command-line option: {cli_option}') - args.pop(arg) - - -def main() -> None: - sys.setrecursionlimit(15000000) - parser = _create_argument_parser() - args = parser.parse_args() - logging.basicConfig(level=_loglevel(args), format=_LOG_FORMAT) - - executor_name = 'exec_' + args.command.lower().replace('-', '_') - if executor_name not in globals(): - raise AssertionError(f'Unimplemented command: {args.command}') - - execute = globals()[executor_name] - execute(**vars(args)) - - -# Command implementation - - -def exec_version(**kwargs: Any) -> None: - version_file = KEVM_LIB / 'version' - version = version_file.read_text().strip() - print(f'Kontrol Version: {version}') - - -def exec_compile(contract_file: Path, **kwargs: Any) -> None: - res = solc_compile(contract_file) - print(json.dumps(res)) - - -def exec_solc_to_k( - contract_file: Path, - contract_name: str, - main_module: str | None, - requires: list[str], - imports: list[str], - target: KompileTarget | None = None, - **kwargs: Any, -) -> None: - if target is None: - target = KompileTarget.HASKELL - - k_text = solc_to_k( - definition_dir=target.definition_dir, - contract_file=contract_file, - contract_name=contract_name, - main_module=main_module, - requires=requires, - imports=imports, - ) - print(k_text) - - -def exec_foundry_kompile( - foundry_root: Path, - includes: Iterable[str] = (), - regen: bool = False, - rekompile: bool = False, - requires: Iterable[str] = (), - imports: Iterable[str] = (), - ccopts: Iterable[str] = (), - llvm_kompile: bool = True, - debug: bool = False, - llvm_library: bool = False, - verbose: bool = False, - **kwargs: Any, -) -> None: - _ignore_arg(kwargs, 'main_module', f'--main-module {kwargs["main_module"]}') - _ignore_arg(kwargs, 'syntax_module', f'--syntax-module {kwargs["syntax_module"]}') - _ignore_arg(kwargs, 'spec_module', f'--spec-module {kwargs["spec_module"]}') - _ignore_arg(kwargs, 'o0', '-O0') - _ignore_arg(kwargs, 'o1', '-O1') - _ignore_arg(kwargs, 'o2', '-O2') - _ignore_arg(kwargs, 'o3', '-O3') - foundry_kompile( - foundry_root=foundry_root, - includes=includes, - regen=regen, - rekompile=rekompile, - requires=requires, - imports=imports, - ccopts=ccopts, - llvm_kompile=llvm_kompile, - debug=debug, - llvm_library=llvm_library, - verbose=verbose, - ) - - -def exec_foundry_prove( - foundry_root: Path, - max_depth: int = 1000, - max_iterations: int | None = None, - reinit: bool = False, - tests: Iterable[str] = (), - exclude_tests: Iterable[str] = (), - workers: int = 1, - simplify_init: bool = True, - break_every_step: bool = False, - break_on_jumpi: bool = False, - break_on_calls: bool = True, - bmc_depth: int | None = None, - bug_report: bool = False, - kore_rpc_command: str | Iterable[str] | None = None, - use_booster: bool = False, - smt_timeout: int | None = None, - smt_retry_limit: int | None = None, - failure_info: bool = True, - counterexample_info: bool = False, - trace_rewrites: bool = False, - auto_abstract_gas: bool = False, - **kwargs: Any, -) -> None: - _ignore_arg(kwargs, 'main_module', f'--main-module: {kwargs["main_module"]}') - _ignore_arg(kwargs, 'syntax_module', f'--syntax-module: {kwargs["syntax_module"]}') - _ignore_arg(kwargs, 'definition_dir', f'--definition: {kwargs["definition_dir"]}') - _ignore_arg(kwargs, 'spec_module', f'--spec-module: {kwargs["spec_module"]}') - - if smt_timeout is None: - smt_timeout = 300 - if smt_retry_limit is None: - smt_retry_limit = 10 - - if isinstance(kore_rpc_command, str): - kore_rpc_command = kore_rpc_command.split() - - results = foundry_prove( - foundry_root=foundry_root, - max_depth=max_depth, - max_iterations=max_iterations, - reinit=reinit, - tests=tests, - exclude_tests=exclude_tests, - workers=workers, - simplify_init=simplify_init, - break_every_step=break_every_step, - break_on_jumpi=break_on_jumpi, - break_on_calls=break_on_calls, - bmc_depth=bmc_depth, - bug_report=bug_report, - kore_rpc_command=kore_rpc_command, - use_booster=use_booster, - counterexample_info=counterexample_info, - smt_timeout=smt_timeout, - smt_retry_limit=smt_retry_limit, - trace_rewrites=trace_rewrites, - auto_abstract_gas=auto_abstract_gas, - ) - failed = 0 - for pid, r in results.items(): - passed, failure_log = r - if passed: - print(f'PROOF PASSED: {pid}') - else: - failed += 1 - print(f'PROOF FAILED: {pid}') - if failure_info and failure_log is not None: - failure_log += Foundry.help_info() - for line in failure_log: - print(line) - - sys.exit(failed) - - -def exec_foundry_show( - foundry_root: Path, - test: str, - nodes: Iterable[NodeIdLike] = (), - node_deltas: Iterable[tuple[NodeIdLike, NodeIdLike]] = (), - to_module: bool = False, - minimize: bool = True, - sort_collections: bool = False, - omit_unstable_output: bool = False, - pending: bool = False, - failing: bool = False, - failure_info: bool = False, - counterexample_info: bool = False, - **kwargs: Any, -) -> None: - output = foundry_show( - foundry_root=foundry_root, - test=test, - nodes=nodes, - node_deltas=node_deltas, - to_module=to_module, - minimize=minimize, - omit_unstable_output=omit_unstable_output, - sort_collections=sort_collections, - pending=pending, - failing=failing, - failure_info=failure_info, - counterexample_info=counterexample_info, - ) - print(output) - - -def exec_foundry_to_dot(foundry_root: Path, test: str, **kwargs: Any) -> None: - foundry_to_dot(foundry_root=foundry_root, test=test) - - -def exec_foundry_list(foundry_root: Path, **kwargs: Any) -> None: - stats = foundry_list(foundry_root=foundry_root) - print('\n'.join(stats)) - - -def exec_foundry_view_kcfg(foundry_root: Path, test: str, **kwargs: Any) -> None: - foundry = Foundry(foundry_root) - contract_name, test_name = test.split('.') - proof = foundry.get_apr_proof(test) - - def _short_info(cterm: CTerm) -> Iterable[str]: - return foundry.short_info_for_contract(contract_name, cterm) - - def _custom_view(elem: KCFGElem) -> Iterable[str]: - return foundry.custom_view(contract_name, elem) - - node_printer = foundry_node_printer(foundry, contract_name, proof) - viewer = APRProofViewer(proof, foundry.kevm, node_printer=node_printer, custom_view=_custom_view) - viewer.run() - - -def exec_foundry_remove_node(foundry_root: Path, test: str, node: NodeIdLike, **kwargs: Any) -> None: - foundry_remove_node(foundry_root=foundry_root, test=test, node=node) - - -def exec_foundry_simplify_node( - foundry_root: Path, - test: str, - node: NodeIdLike, - replace: bool = False, - minimize: bool = True, - sort_collections: bool = False, - bug_report: bool = False, - smt_timeout: int | None = None, - smt_retry_limit: int | None = None, - trace_rewrites: bool = False, - **kwargs: Any, -) -> None: - if smt_timeout is None: - smt_timeout = 300 - if smt_retry_limit is None: - smt_retry_limit = 10 - - pretty_term = foundry_simplify_node( - foundry_root=foundry_root, - test=test, - node=node, - replace=replace, - minimize=minimize, - sort_collections=sort_collections, - bug_report=bug_report, - smt_timeout=smt_timeout, - smt_retry_limit=smt_retry_limit, - trace_rewrites=trace_rewrites, - ) - print(f'Simplified:\n{pretty_term}') - - -def exec_foundry_step_node( - foundry_root: Path, - test: str, - node: NodeIdLike, - repeat: int = 1, - depth: int = 1, - bug_report: bool = False, - smt_timeout: int | None = None, - smt_retry_limit: int | None = None, - trace_rewrites: bool = False, - **kwargs: Any, -) -> None: - if smt_timeout is None: - smt_timeout = 300 - if smt_retry_limit is None: - smt_retry_limit = 10 - - foundry_step_node( - foundry_root=foundry_root, - test=test, - node=node, - repeat=repeat, - depth=depth, - bug_report=bug_report, - smt_timeout=smt_timeout, - smt_retry_limit=smt_retry_limit, - trace_rewrites=trace_rewrites, - ) - - -def exec_foundry_merge_nodes( - foundry_root: Path, - test: str, - nodes: Iterable[NodeIdLike], - bug_report: bool = False, - **kwargs: Any, -) -> None: - foundry_merge_nodes(foundry_root=foundry_root, node_ids=nodes, test=test) - - -def exec_foundry_section_edge( - foundry_root: Path, - test: str, - edge: tuple[str, str], - sections: int = 2, - replace: bool = False, - bug_report: bool = False, - smt_timeout: int | None = None, - smt_retry_limit: int | None = None, - trace_rewrites: bool = False, - **kwargs: Any, -) -> None: - if smt_timeout is None: - smt_timeout = 300 - if smt_retry_limit is None: - smt_retry_limit = 10 - - foundry_section_edge( - foundry_root=foundry_root, - test=test, - edge=edge, - sections=sections, - replace=replace, - bug_report=bug_report, - smt_timeout=smt_timeout, - smt_retry_limit=smt_retry_limit, - trace_rewrites=trace_rewrites, - ) - - -def exec_foundry_get_model( - foundry_root: Path, - test: str, - nodes: Iterable[NodeIdLike] = (), - pending: bool = False, - failing: bool = False, - **kwargs: Any, -) -> None: - output = foundry_get_model( - foundry_root=foundry_root, - test=test, - nodes=nodes, - pending=pending, - failing=failing, - ) - print(output) - - -# Helpers - - -def _create_argument_parser() -> ArgumentParser: - def list_of(elem_type: Callable[[str], T], delim: str = ';') -> Callable[[str], list[T]]: - def parse(s: str) -> list[T]: - return [elem_type(elem) for elem in s.split(delim)] - - return parse - - kevm_cli_args = KEVMCLIArgs() - parser = ArgumentParser(prog='kontrol') - - command_parser = parser.add_subparsers(dest='command', required=True) - - command_parser.add_parser('version', help='Print out version of Kontrol command.') - - solc_args = command_parser.add_parser('compile', help='Generate combined JSON with solc compilation results.') - solc_args.add_argument('contract_file', type=file_path, help='Path to contract file.') - - solc_to_k_args = command_parser.add_parser( - 'solc-to-k', - help='Output helper K definition for given JSON output from solc compiler.', - parents=[kevm_cli_args.logging_args, kevm_cli_args.target_args, kevm_cli_args.k_args, kevm_cli_args.k_gen_args], - ) - solc_to_k_args.add_argument('contract_file', type=file_path, help='Path to contract file.') - solc_to_k_args.add_argument('contract_name', type=str, help='Name of contract to generate K helpers for.') - - foundry_kompile = command_parser.add_parser( - 'foundry-kompile', - help='Kompile K definition corresponding to given output directory.', - parents=[ - kevm_cli_args.logging_args, - kevm_cli_args.k_args, - kevm_cli_args.k_gen_args, - kevm_cli_args.kompile_args, - kevm_cli_args.foundry_args, - ], - ) - foundry_kompile.add_argument( - '--regen', - dest='regen', - default=False, - action='store_true', - help='Regenerate foundry.k even if it already exists.', - ) - foundry_kompile.add_argument( - '--rekompile', - dest='rekompile', - default=False, - action='store_true', - help='Rekompile foundry.k even if kompiled definition already exists.', - ) - - foundry_prove_args = command_parser.add_parser( - 'foundry-prove', - help='Run Foundry Proof.', - parents=[ - kevm_cli_args.logging_args, - kevm_cli_args.parallel_args, - kevm_cli_args.k_args, - kevm_cli_args.kprove_args, - kevm_cli_args.smt_args, - kevm_cli_args.rpc_args, - kevm_cli_args.explore_args, - kevm_cli_args.foundry_args, - ], - ) - foundry_prove_args.add_argument( - '--test', - type=str, - dest='tests', - default=[], - action='append', - help='Limit to only listed tests, ContractName.TestName', - ) - foundry_prove_args.add_argument( - '--exclude-test', - type=str, - dest='exclude_tests', - default=[], - action='append', - help='Skip listed tests, ContractName.TestName', - ) - foundry_prove_args.add_argument( - '--reinit', - dest='reinit', - default=False, - action='store_true', - help='Reinitialize CFGs even if they already exist.', - ) - foundry_prove_args.add_argument( - '--bmc-depth', - dest='bmc_depth', - default=None, - type=int, - help='Enables bounded model checking. Specifies the maximum depth to unroll all loops to.', - ) - foundry_prove_args.add_argument( - '--use-booster', - dest='use_booster', - default=False, - action='store_true', - help="Use the booster RPC server instead of kore-rpc. Requires calling foundry-kompile with the '--with-llvm-library' flag", - ) - - foundry_show_args = command_parser.add_parser( - 'foundry-show', - help='Display a given Foundry CFG.', - parents=[ - kevm_cli_args.logging_args, - kevm_cli_args.k_args, - kevm_cli_args.kcfg_show_args, - kevm_cli_args.display_args, - kevm_cli_args.foundry_args, - ], - ) - foundry_show_args.add_argument('test', type=str, help='Display the CFG for this test.') - foundry_show_args.add_argument( - '--omit-unstable-output', - dest='omit_unstable_output', - default=False, - action='store_true', - help='Strip output that is likely to change without the contract logic changing', - ) - foundry_to_dot = command_parser.add_parser( - 'foundry-to-dot', - help='Dump the given CFG for the test as DOT for visualization.', - parents=[kevm_cli_args.logging_args, kevm_cli_args.foundry_args], - ) - foundry_to_dot.add_argument('test', type=str, help='Display the CFG for this test.') - - command_parser.add_parser( - 'foundry-list', - help='List information about CFGs on disk', - parents=[kevm_cli_args.logging_args, kevm_cli_args.k_args, kevm_cli_args.foundry_args], - ) - - foundry_view_kcfg_args = command_parser.add_parser( - 'foundry-view-kcfg', - help='Display tree view of CFG', - parents=[kevm_cli_args.logging_args, kevm_cli_args.foundry_args], - ) - foundry_view_kcfg_args.add_argument('test', type=str, help='View the CFG for this test.') - - foundry_remove_node = command_parser.add_parser( - 'foundry-remove-node', - help='Remove a node and its successors.', - parents=[kevm_cli_args.logging_args, kevm_cli_args.foundry_args], - ) - foundry_remove_node.add_argument('test', type=str, help='View the CFG for this test.') - foundry_remove_node.add_argument('node', type=node_id_like, help='Node to remove CFG subgraph from.') - - foundry_simplify_node = command_parser.add_parser( - 'foundry-simplify-node', - help='Simplify a given node, and potentially replace it.', - parents=[ - kevm_cli_args.logging_args, - kevm_cli_args.smt_args, - kevm_cli_args.rpc_args, - kevm_cli_args.display_args, - kevm_cli_args.foundry_args, - ], - ) - foundry_simplify_node.add_argument('test', type=str, help='Simplify node in this CFG.') - foundry_simplify_node.add_argument('node', type=node_id_like, help='Node to simplify in CFG.') - foundry_simplify_node.add_argument( - '--replace', default=False, help='Replace the original node with the simplified variant in the graph.' - ) - - foundry_step_node = command_parser.add_parser( - 'foundry-step-node', - help='Step from a given node, adding it to the CFG.', - parents=[ - kevm_cli_args.logging_args, - kevm_cli_args.rpc_args, - kevm_cli_args.smt_args, - kevm_cli_args.foundry_args, - ], - ) - foundry_step_node.add_argument('test', type=str, help='Step from node in this CFG.') - foundry_step_node.add_argument('node', type=node_id_like, help='Node to step from in CFG.') - foundry_step_node.add_argument( - '--repeat', type=int, default=1, help='How many node expansions to do from the given start node (>= 1).' - ) - foundry_step_node.add_argument( - '--depth', type=int, default=1, help='How many steps to take from initial node on edge.' - ) - foundry_merge_node = command_parser.add_parser( - 'foundry-merge-nodes', - help='Merge multiple nodes into one branch.', - parents=[ - kevm_cli_args.logging_args, - kevm_cli_args.foundry_args, - ], - ) - foundry_merge_node.add_argument( - '--node', - type=node_id_like, - dest='nodes', - default=[], - action='append', - help='One node to be merged.', - ) - foundry_merge_node.add_argument('test', type=str, help='Merge nodes in this CFG.') - - foundry_section_edge = command_parser.add_parser( - 'foundry-section-edge', - help='Given an edge in the graph, cut it into sections to get intermediate nodes.', - parents=[ - kevm_cli_args.logging_args, - kevm_cli_args.rpc_args, - kevm_cli_args.smt_args, - kevm_cli_args.foundry_args, - ], - ) - foundry_section_edge.add_argument('test', type=str, help='Section edge in this CFG.') - foundry_section_edge.add_argument('edge', type=arg_pair_of(str, str), help='Edge to section in CFG.') - foundry_section_edge.add_argument( - '--sections', type=int, default=2, help='Number of sections to make from edge (>= 2).' - ) - - foundry_get_model = command_parser.add_parser( - 'foundry-get-model', - help='Display a model for a given node.', - parents=[ - kevm_cli_args.logging_args, - kevm_cli_args.rpc_args, - kevm_cli_args.smt_args, - kevm_cli_args.foundry_args, - ], - ) - foundry_get_model.add_argument('test', type=str, help='Display the models of nodes in this test.') - foundry_get_model.add_argument( - '--node', - type=node_id_like, - dest='nodes', - default=[], - action='append', - help='List of nodes to display the models of.', - ) - foundry_get_model.add_argument( - '--pending', dest='pending', default=False, action='store_true', help='Also display models of pending nodes' - ) - foundry_get_model.add_argument( - '--failing', dest='failing', default=False, action='store_true', help='Also display models of failing nodes' - ) - - return parser - - -def _loglevel(args: Namespace) -> int: - if args.debug: - return logging.DEBUG - - if args.verbose: - return logging.INFO - - return logging.WARNING - - -if __name__ == '__main__': - main() diff --git a/kevm-pyk/src/kontrol/foundry.py b/kevm-pyk/src/kontrol/foundry.py deleted file mode 100644 index 57b4a52197..0000000000 --- a/kevm-pyk/src/kontrol/foundry.py +++ /dev/null @@ -1,1298 +0,0 @@ -from __future__ import annotations - -import concurrent.futures -import json -import logging -import os -import re -import shutil -from functools import cached_property -from pathlib import Path -from subprocess import CalledProcessError -from typing import TYPE_CHECKING - -import tomlkit -from pathos.pools import ProcessPool # type: ignore -from pyk.cterm import CTerm -from pyk.kast.inner import KApply, KSequence, KSort, KToken, KVariable, Subst -from pyk.kast.manip import free_vars, minimize_term -from pyk.kast.outer import KDefinition, KFlatModule, KImport, KRequire -from pyk.kcfg import KCFG -from pyk.ktool.kompile import LLVMKompileType -from pyk.prelude.bytes import bytesToken -from pyk.prelude.k import GENERATED_TOP_CELL -from pyk.prelude.kbool import FALSE, notBool -from pyk.prelude.kint import INT, intToken -from pyk.prelude.ml import mlEqualsTrue -from pyk.proof.proof import Proof -from pyk.proof.reachability import APRBMCProof, APRProof -from pyk.proof.show import APRBMCProofNodePrinter, APRProofNodePrinter, APRProofShow -from pyk.utils import BugReport, ensure_dir_path, hash_str, run_process, single, unique - -from kevm_pyk.kevm import KEVM, KEVMNodePrinter, KEVMSemantics -from kevm_pyk.utils import ( - KDefinition__expand_macros, - abstract_cell_vars, - byte_offset_to_lines, - constraints_for, - kevm_prove, - legacy_explore, - print_failure_info, - print_model, -) - -from .solc_to_k import Contract, contract_to_main_module, contract_to_verification_module - -if TYPE_CHECKING: - from collections.abc import Iterable - from concurrent.futures import Future - from typing import Any, Final - - from pyk.kast.inner import KInner - from pyk.kcfg import KCFGExplore - from pyk.kcfg.kcfg import NodeIdLike - from pyk.kcfg.tui import KCFGElem - from pyk.proof.show import NodePrinter - -_LOGGER: Final = logging.getLogger(__name__) - - -class Foundry: - _root: Path - _toml: dict[str, Any] - _bug_report: BugReport | None - - class Sorts: - FOUNDRY_CELL: Final = KSort('FoundryCell') - - def __init__( - self, - foundry_root: Path, - bug_report: BugReport | None = None, - ) -> None: - self._root = foundry_root - with (foundry_root / 'foundry.toml').open('rb') as f: - self._toml = tomlkit.load(f) - self._bug_report = bug_report - - @property - def profile(self) -> dict[str, Any]: - profile_name = os.getenv('FOUNDRY_PROFILE', default='default') - return self._toml['profile'][profile_name] - - @property - def out(self) -> Path: - return self._root / self.profile.get('out', '') - - @cached_property - def kevm(self) -> KEVM: - definition_dir = self.out / 'kompiled' - use_directory = self.out / 'tmp' - main_file = definition_dir / 'foundry.k' - ensure_dir_path(use_directory) - return KEVM( - definition_dir=definition_dir, - main_file=main_file, - use_directory=use_directory, - bug_report=self._bug_report, - ) - - @cached_property - def contracts(self) -> dict[str, Contract]: - pattern = '*.sol/*.json' - paths = self.out.glob(pattern) - json_paths = [str(path) for path in paths] - json_paths = [json_path for json_path in json_paths if not json_path.endswith('.metadata.json')] - json_paths = sorted(json_paths) # Must sort to get consistent output order on different platforms - _LOGGER.info(f'Processing contract files: {json_paths}') - _contracts = {} - for json_path in json_paths: - _LOGGER.debug(f'Processing contract file: {json_path}') - contract_name = json_path.split('/')[-1] - contract_json = json.loads(Path(json_path).read_text()) - contract_name = contract_name[0:-5] if contract_name.endswith('.json') else contract_name - _contracts[contract_name] = Contract(contract_name, contract_json, foundry=True) - return _contracts - - def proof_digest(self, contract: str, test_sig: str) -> str: - return f'{contract}.{test_sig}:{self.contracts[contract].method_by_sig[test_sig].digest}' - - @cached_property - def digest(self) -> str: - contract_digests = [self.contracts[c].digest for c in sorted(self.contracts)] - return hash_str('\n'.join(contract_digests)) - - @cached_property - def llvm_dylib(self) -> Path | None: - from kevm_pyk.kompile import Kernel - - arch = Kernel.get() - foundry_llvm_dir = self.out / 'kompiled-llvm' - if arch == Kernel.LINUX: - dylib = foundry_llvm_dir / 'interpreter.so' - else: - dylib = foundry_llvm_dir / 'interpreter.dylib' - - if dylib.exists(): - return dylib - else: - return None - - def up_to_date(self) -> bool: - digest_file = self.out / 'digest' - if not digest_file.exists(): - return False - digest_dict = json.loads(digest_file.read_text()) - if 'foundry' not in digest_dict: - digest_dict['foundry'] = '' - digest_file.write_text(json.dumps(digest_dict)) - return digest_dict['foundry'] == self.digest - - def update_digest(self) -> None: - digest_file = self.out / 'digest' - digest_dict = {} - if digest_file.exists(): - digest_dict = json.loads(digest_file.read_text()) - digest_dict['foundry'] = self.digest - digest_file.write_text(json.dumps(digest_dict)) - - _LOGGER.info(f'Updated Foundry digest file: {digest_file}') - - @cached_property - def contract_ids(self) -> dict[int, str]: - _contract_ids = {} - for c in self.contracts.values(): - _contract_ids[c.contract_id] = c.name - return _contract_ids - - def srcmap_data(self, contract_name: str, pc: int) -> tuple[Path, int, int] | None: - if contract_name not in self.contracts: - _LOGGER.info(f'Contract not found in Foundry project: {contract_name}') - contract = self.contracts[contract_name] - if pc not in contract.srcmap: - _LOGGER.info(f'pc not found in srcmap for contract {contract_name}: {pc}') - return None - s, l, f, _, _ = contract.srcmap[pc] - if f not in self.contract_ids: - _LOGGER.info(f'Contract id not found in sourcemap data: {f}') - return None - src_contract = self.contracts[self.contract_ids[f]] - src_contract_path = self._root / src_contract.contract_path - src_contract_text = src_contract_path.read_text() - _, start, end = byte_offset_to_lines(src_contract_text.split('\n'), s, l) - return (src_contract_path, start, end) - - def solidity_src(self, contract_name: str, pc: int) -> Iterable[str]: - srcmap_data = self.srcmap_data(contract_name, pc) - if srcmap_data is None: - return [f'No sourcemap data for contract at pc {contract_name}: {pc}'] - contract_path, start, end = srcmap_data - if not (contract_path.exists() and contract_path.is_file()): - return [f'No file at path for contract {contract_name}: {contract_path}'] - lines = contract_path.read_text().split('\n') - prefix_lines = [f' {l}' for l in lines[:start]] - actual_lines = [f' | {l}' for l in lines[start:end]] - suffix_lines = [f' {l}' for l in lines[end:]] - return prefix_lines + actual_lines + suffix_lines - - def short_info_for_contract(self, contract_name: str, cterm: CTerm) -> list[str]: - ret_strs = self.kevm.short_info(cterm) - _pc = cterm.cell('PC_CELL') - if type(_pc) is KToken and _pc.sort == INT: - srcmap_data = self.srcmap_data(contract_name, int(_pc.token)) - if srcmap_data is not None: - path, start, end = srcmap_data - ret_strs.append(f'src: {str(path)}:{start}:{end}') - return ret_strs - - def custom_view(self, contract_name: str, element: KCFGElem) -> Iterable[str]: - if type(element) is KCFG.Node: - pc_cell = element.cterm.cell('PC_CELL') - if type(pc_cell) is KToken and pc_cell.sort == INT: - return self.solidity_src(contract_name, int(pc_cell.token)) - return ['NO DATA'] - - def build(self) -> None: - try: - run_process(['forge', 'build', '--root', str(self._root)], logger=_LOGGER) - except CalledProcessError as err: - raise RuntimeError("Couldn't forge build!") from err - - @cached_property - def all_tests(self) -> list[str]: - return [ - f'{contract.name}.{method.signature}' - for contract in self.contracts.values() - if contract.name.endswith('Test') - for method in contract.methods - if method.name.startswith('test') - ] - - @cached_property - def all_non_tests(self) -> list[str]: - return [ - f'{contract.name}.{method.signature}' - for contract in self.contracts.values() - for method in contract.methods - if f'{contract.name}.{method.signature}' not in self.all_tests - ] - - def matching_tests(self, tests: list[str], exclude_tests: list[str]) -> list[str]: - def _escape_brackets(regs: list[str]) -> list[str]: - regs = [reg.replace('[', '\\[') for reg in regs] - regs = [reg.replace(']', '\\]') for reg in regs] - regs = [reg.replace('(', '\\(') for reg in regs] - return [reg.replace(')', '\\)') for reg in regs] - - all_tests = self.all_tests - all_non_tests = self.all_non_tests - matched_tests = set() - unfound_tests: list[str] = [] - if not tests: - tests = all_tests - tests = _escape_brackets(tests) - exclude_tests = _escape_brackets(exclude_tests) - for t in tests: - if not any(re.search(t, test) for test in (all_tests + all_non_tests)): - unfound_tests.append(t) - for test in all_tests: - if any(re.search(t, test) for t in tests) and not any(re.search(t, test) for t in exclude_tests): - matched_tests.add(test) - for test in all_non_tests: - if any(re.search(t, test) for t in tests) and not any(re.search(t, test) for t in exclude_tests): - matched_tests.add(test) - if unfound_tests: - raise ValueError(f'Test identifiers not found: {set(unfound_tests)}') - elif len(matched_tests) == 0: - raise ValueError('No test matched the predicates') - return list(matched_tests) - - def matching_sig(self, test: str) -> str: - test_sigs = self.matching_tests([test], []) - if len(test_sigs) != 1: - raise RuntimeError(f'Found {test_sigs} matching tests, must specify one') - return test_sigs[0] - - def unique_sig(self, test: str) -> tuple[str, str]: - contract_name = test.split('.')[0] - test_sig = self.matching_sig(test).split('.')[1] - return (contract_name, test_sig) - - @staticmethod - def success(s: KInner, dst: KInner, r: KInner, c: KInner, e1: KInner, e2: KInner) -> KApply: - return KApply('foundry_success', [s, dst, r, c, e1, e2]) - - @staticmethod - def fail(s: KInner, dst: KInner, r: KInner, c: KInner, e1: KInner, e2: KInner) -> KApply: - return notBool(Foundry.success(s, dst, r, c, e1, e2)) - - # address(uint160(uint256(keccak256("foundry default caller")))) - - @staticmethod - def loc_FOUNDRY_FAILED() -> KApply: # noqa: N802 - return KEVM.loc( - KApply( - 'contract_access_field', - [ - KApply('FoundryCheat_FOUNDRY-ACCOUNTS_FoundryContract'), - KApply('Failed_FOUNDRY-ACCOUNTS_FoundryField'), - ], - ) - ) - - @staticmethod - def address_TEST_CONTRACT() -> KToken: # noqa: N802 - return intToken(0x7FA9385BE102AC3EAC297483DD6233D62B3E1496) - - @staticmethod - def address_CHEATCODE() -> KToken: # noqa: N802 - return intToken(0x7109709ECFA91A80626FF3989D68F67F5B1DD12D) - - # Same address as the one used in DappTools's HEVM - # address(bytes20(uint160(uint256(keccak256('hevm cheat code'))))) - @staticmethod - def account_CHEATCODE_ADDRESS(store_var: KInner) -> KApply: # noqa: N802 - return KEVM.account_cell( - Foundry.address_CHEATCODE(), # Hardcoded for now - intToken(0), - bytesToken(b'\x00'), - store_var, - KApply('.Map'), - intToken(0), - ) - - @staticmethod - def help_info() -> list[str]: - res_lines: list[str] = [] - print_foundry_success_info = any('foundry_success' in line for line in res_lines) - if print_foundry_success_info: - res_lines.append('') - res_lines.append('See `foundry_success` predicate for more information:') - res_lines.append( - 'https://github.com/runtimeverification/evm-semantics/blob/master/include/kframework/foundry.md#foundry-success-predicate' - ) - res_lines.append('') - res_lines.append( - 'Access documentation for KEVM foundry integration at https://docs.runtimeverification.com/kevm-integration-for-foundry/' - ) - return res_lines - - def get_apr_proof( - self, - test: str, - ) -> APRProof: - proof = self.get_proof(test) - if not isinstance(proof, APRProof): - raise ValueError('Specified proof is not an APRProof.') - return proof - - def get_proof( - self, - test: str, - ) -> Proof: - proofs_dir = self.out / 'apr_proofs' - contract_name, test_sig = self.unique_sig(test) - proof_digest = self.proof_digest(contract_name, test_sig) - proof = Proof.read_proof_data(proofs_dir, proof_digest) - return proof - - -def foundry_kompile( - foundry_root: Path, - includes: Iterable[str], - regen: bool = False, - rekompile: bool = False, - requires: Iterable[str] = (), - imports: Iterable[str] = (), - ccopts: Iterable[str] = (), - llvm_kompile: bool = True, - debug: bool = False, - llvm_library: bool = False, - verbose: bool = False, -) -> None: - from kevm_pyk.kompile import KompileTarget, kevm_kompile - - syntax_module = 'FOUNDRY-CONTRACTS' - foundry = Foundry(foundry_root) - foundry_definition_dir = foundry.out / 'kompiled' - foundry_requires_dir = foundry_definition_dir / 'requires' - foundry_llvm_dir = foundry.out / 'kompiled-llvm' - foundry_contracts_file = foundry_definition_dir / 'contracts.k' - foundry_main_file = foundry_definition_dir / 'foundry.k' - kompiled_timestamp = foundry_definition_dir / 'timestamp' - main_module = 'FOUNDRY-MAIN' - ensure_dir_path(foundry_definition_dir) - ensure_dir_path(foundry_requires_dir) - ensure_dir_path(foundry_llvm_dir) - - requires_paths: dict[str, str] = {} - - foundry.build() - - if not foundry.up_to_date(): - _LOGGER.info('Detected updates to contracts, regenerating K definition.') - regen = True - - for r in requires: - req = Path(r) - if not req.exists(): - raise ValueError(f'No such file: {req}') - if req.name in requires_paths.keys(): - raise ValueError( - f'Required K files have conflicting names: {r} and {requires_paths[req.name]}. Consider changing the name of one of these files.' - ) - requires_paths[req.name] = r - req_path = foundry_requires_dir / req.name - if regen or not req_path.exists(): - _LOGGER.info(f'Copying requires path: {req} -> {req_path}') - shutil.copy(req, req_path) - regen = True - - _imports: dict[str, list[str]] = {contract.name: [] for contract in foundry.contracts.values()} - for i in imports: - imp = i.split(':') - if not len(imp) == 2: - raise ValueError(f'module imports must be of the form "[ContractName]:[MODULE-NAME]". Got: {i}') - if imp[0] in _imports: - _imports[imp[0]].append(imp[1]) - else: - raise ValueError(f'Could not find contract: {imp[0]}') - - if regen or not foundry_contracts_file.exists() or not foundry_main_file.exists(): - copied_requires = [] - copied_requires += [f'requires/{name}' for name in list(requires_paths.keys())] - imports = ['FOUNDRY'] - kevm = KEVM(KompileTarget.FOUNDRY.definition_dir) - empty_config = kevm.definition.empty_config(Foundry.Sorts.FOUNDRY_CELL) - bin_runtime_definition = _foundry_to_contract_def( - empty_config=empty_config, - contracts=foundry.contracts.values(), - requires=['foundry.md'], - ) - - contract_main_definition = _foundry_to_main_def( - main_module=main_module, - empty_config=empty_config, - contracts=foundry.contracts.values(), - requires=(['contracts.k'] + copied_requires), - imports=_imports, - ) - - kevm = KEVM( - KompileTarget.FOUNDRY.definition_dir, - extra_unparsing_modules=(bin_runtime_definition.all_modules + contract_main_definition.all_modules), - ) - foundry_contracts_file.write_text(kevm.pretty_print(bin_runtime_definition, unalias=False) + '\n') - _LOGGER.info(f'Wrote file: {foundry_contracts_file}') - foundry_main_file.write_text(kevm.pretty_print(contract_main_definition) + '\n') - _LOGGER.info(f'Wrote file: {foundry_main_file}') - - def _kompile( - out_dir: Path, - backend: KompileTarget, - llvm_kompile_type: LLVMKompileType | None = None, - ) -> None: - kevm_kompile( - target=backend, - output_dir=out_dir, - main_file=foundry_main_file, - main_module=main_module, - syntax_module=syntax_module, - includes=[include for include in includes if Path(include).exists()], - emit_json=True, - ccopts=ccopts, - llvm_kompile_type=llvm_kompile_type, - debug=debug, - verbose=verbose, - ) - - def kompilation_digest() -> str: - k_files = list(requires) + [foundry_contracts_file, foundry_main_file] - return hash_str(''.join([hash_str(Path(k_file).read_text()) for k_file in k_files])) - - def kompilation_up_to_date() -> bool: - digest_file = foundry_definition_dir / 'digest' - if not digest_file.exists(): - return False - old_digest = digest_file.read_text() - - return old_digest == kompilation_digest() - - def kompile_haskell() -> None: - _LOGGER.info(f'Kompiling definition: {foundry_main_file}') - _kompile(foundry_definition_dir, KompileTarget.HASKELL) - - def kompile_llvm() -> None: - _LOGGER.info(f'Kompiling definition to LLVM dynamic library: {foundry_main_file}') - _kompile( - foundry_llvm_dir, - KompileTarget.LLVM, - llvm_kompile_type=LLVMKompileType.C, - ) - - def update_kompilation_digest() -> None: - digest_file = foundry_definition_dir / 'digest' - digest_file.write_text(kompilation_digest()) - - if not kompilation_up_to_date() or rekompile or not kompiled_timestamp.exists(): - with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor: - futures: list[Future] = [] - futures.append(executor.submit(kompile_haskell)) - if llvm_library: - futures.append(executor.submit(kompile_llvm)) - [future.result() for future in futures] - - update_kompilation_digest() - foundry.update_digest() - - -def foundry_prove( - foundry_root: Path, - max_depth: int = 1000, - max_iterations: int | None = None, - reinit: bool = False, - tests: Iterable[str] = (), - exclude_tests: Iterable[str] = (), - workers: int = 1, - simplify_init: bool = True, - break_every_step: bool = False, - break_on_jumpi: bool = False, - break_on_calls: bool = True, - bmc_depth: int | None = None, - bug_report: bool = False, - kore_rpc_command: str | Iterable[str] | None = None, - use_booster: bool = False, - smt_timeout: int | None = None, - smt_retry_limit: int | None = None, - failure_info: bool = True, - counterexample_info: bool = False, - trace_rewrites: bool = False, - auto_abstract_gas: bool = False, -) -> dict[str, tuple[bool, list[str] | None]]: - if workers <= 0: - raise ValueError(f'Must have at least one worker, found: --workers {workers}') - if max_iterations is not None and max_iterations < 0: - raise ValueError(f'Must have a non-negative number of iterations, found: --max-iterations {max_iterations}') - - br = BugReport(foundry_root / 'bug_report') if bug_report else None - foundry = Foundry(foundry_root, bug_report=br) - - save_directory = foundry.out / 'apr_proofs' - save_directory.mkdir(exist_ok=True) - - if use_booster: - try: - run_process(('which', 'kore-rpc-booster'), pipe_stderr=True).stdout.strip() - except CalledProcessError: - raise RuntimeError( - "Couldn't locate the kore-rpc-booster RPC binary. Please put 'kore-rpc-booster' on PATH manually or using kup install/kup shell." - ) from None - - if kore_rpc_command is None: - kore_rpc_command = ('kore-rpc-booster',) if use_booster else ('kore-rpc',) - - all_tests = [ - f'{contract.name}.{method.name}' - for contract in foundry.contracts.values() - if contract.name.endswith('Test') - for method in contract.methods - if method.name.startswith('test') - ] - all_non_tests = [ - f'{contract.name}.{method.name}' - for contract in foundry.contracts.values() - for method in contract.methods - if f'{contract.name}.{method.name}' not in all_tests - ] - unfound_tests: list[str] = [] - tests = list(tests) - if not tests: - tests = all_tests - for _t in tests: - if _t not in (all_tests + all_non_tests): - unfound_tests.append(_t) - for _t in exclude_tests: - if _t not in all_tests: - unfound_tests.append(_t) - if _t in tests: - tests.remove(_t) - - tests = foundry.matching_tests(list(tests), list(exclude_tests)) - _LOGGER.info(f'Running tests: {tests}') - - setup_methods: dict[str, str] = {} - contracts = set(unique({test.split('.')[0] for test in tests})) - for contract_name in contracts: - if 'setUp' in foundry.contracts[contract_name].method_by_name: - setup_methods[contract_name] = f'{contract_name}.setUp()' - - test_methods = [ - method - for contract in foundry.contracts.values() - for method in contract.methods - if ( - f'{method.contract_name}.{method.signature}' in tests - or (method.is_setup and method.contract_name in contracts) - ) - ] - - out_of_date_methods: set[str] = set() - for method in test_methods: - if not method.up_to_date(foundry.out / 'digest') or reinit: - out_of_date_methods.add(method.qualified_name) - _LOGGER.info(f'Method {method.qualified_name} is out of date, so it was reinitialized') - else: - _LOGGER.info(f'Method {method.qualified_name} not reinitialized because it is up to date') - if not method.contract_up_to_date(foundry.out / 'digest'): - _LOGGER.warning( - f'Method {method.qualified_name} not reinitialized because digest was up to date, but the contract it is a part of has changed.' - ) - method.update_digest(foundry.out / 'digest') - - def _init_and_run_proof(_init_problem: tuple[str, str]) -> tuple[bool, list[str] | None]: - proof_id = f'{_init_problem[0]}.{_init_problem[1]}' - llvm_definition_dir = foundry.out / 'kompiled-llvm' if use_booster else None - - with legacy_explore( - foundry.kevm, - kcfg_semantics=KEVMSemantics(auto_abstract_gas=auto_abstract_gas), - id=proof_id, - bug_report=br, - kore_rpc_command=kore_rpc_command, - llvm_definition_dir=llvm_definition_dir, - smt_timeout=smt_timeout, - smt_retry_limit=smt_retry_limit, - trace_rewrites=trace_rewrites, - ) as kcfg_explore: - contract_name, method_sig = _init_problem - contract = foundry.contracts[contract_name] - method = contract.method_by_sig[method_sig] - proof = _method_to_apr_proof( - foundry=foundry, - contract=contract, - method=method, - save_directory=save_directory, - kcfg_explore=kcfg_explore, - reinit=(method.qualified_name in out_of_date_methods), - simplify_init=simplify_init, - bmc_depth=bmc_depth, - ) - - passed = kevm_prove( - foundry.kevm, - proof, - kcfg_explore, - max_depth=max_depth, - max_iterations=max_iterations, - break_every_step=break_every_step, - break_on_jumpi=break_on_jumpi, - break_on_calls=break_on_calls, - ) - failure_log = None - if not passed: - failure_log = print_failure_info(proof, kcfg_explore, counterexample_info) - return passed, failure_log - - def run_cfg_group(tests: list[str]) -> dict[str, tuple[bool, list[str] | None]]: - def _split_test(test: str) -> tuple[str, str]: - contract, method = test.split('.') - return contract, method - - init_problems = [_split_test(test) for test in tests] - - _apr_proofs: list[tuple[bool, list[str] | None]] - if workers > 1: - with ProcessPool(ncpus=workers) as process_pool: - _apr_proofs = process_pool.map(_init_and_run_proof, init_problems) - else: - _apr_proofs = [] - for init_problem in init_problems: - _apr_proofs.append(_init_and_run_proof(init_problem)) - - apr_proofs = dict(zip(tests, _apr_proofs, strict=True)) - return apr_proofs - - _LOGGER.info(f'Running setup functions in parallel: {list(setup_methods.values())}') - results = run_cfg_group(list(setup_methods.values())) - failed = [setup_cfg for setup_cfg, passed in results.items() if not passed] - if failed: - raise ValueError(f'Running setUp method failed for {len(failed)} contracts: {failed}') - - _LOGGER.info(f'Running test functions in parallel: {tests}') - results = run_cfg_group(tests) - - return results - - -def foundry_show( - foundry_root: Path, - test: str, - nodes: Iterable[NodeIdLike] = (), - node_deltas: Iterable[tuple[NodeIdLike, NodeIdLike]] = (), - to_module: bool = False, - minimize: bool = True, - sort_collections: bool = False, - omit_unstable_output: bool = False, - pending: bool = False, - failing: bool = False, - failure_info: bool = False, - counterexample_info: bool = False, -) -> str: - contract_name = test.split('.')[0] - foundry = Foundry(foundry_root) - proof = foundry.get_proof(test) - assert isinstance(proof, APRProof) - - if pending: - nodes = list(nodes) + [node.id for node in proof.pending] - if failing: - nodes = list(nodes) + [node.id for node in proof.failing] - nodes = unique(nodes) - - unstable_cells = [ - '', - '', - '', - '', - '', - ] - - node_printer = foundry_node_printer(foundry, contract_name, proof) - proof_show = APRProofShow(foundry.kevm, node_printer=node_printer) - - res_lines = proof_show.show( - proof, - nodes=nodes, - node_deltas=node_deltas, - to_module=to_module, - minimize=minimize, - sort_collections=sort_collections, - omit_cells=(unstable_cells if omit_unstable_output else []), - ) - - if failure_info: - with legacy_explore(foundry.kevm, kcfg_semantics=KEVMSemantics(), id=proof.id) as kcfg_explore: - res_lines += print_failure_info(proof, kcfg_explore, counterexample_info) - res_lines += Foundry.help_info() - - return '\n'.join(res_lines) - - -def foundry_to_dot(foundry_root: Path, test: str) -> None: - foundry = Foundry(foundry_root) - proofs_dir = foundry.out / 'apr_proofs' - dump_dir = proofs_dir / 'dump' - contract_name, test_name = test.split('.') - proof = foundry.get_apr_proof(test) - - node_printer = foundry_node_printer(foundry, contract_name, proof) - proof_show = APRProofShow(foundry.kevm, node_printer=node_printer) - - proof_show.dump(proof, dump_dir, dot=True) - - -def foundry_list(foundry_root: Path) -> list[str]: - foundry = Foundry(foundry_root) - apr_proofs_dir = foundry.out / 'apr_proofs' - - all_methods = [ - f'{contract.name}.{method.signature}' for contract in foundry.contracts.values() for method in contract.methods - ] - - lines: list[str] = [] - for method in sorted(all_methods): - if Proof.proof_data_exists(method, apr_proofs_dir): - proof = foundry.get_proof(method) - lines.extend(proof.summary.lines) - lines.append('') - if len(lines) > 0: - lines = lines[0:-1] - - return lines - - -def foundry_remove_node(foundry_root: Path, test: str, node: NodeIdLike) -> None: - foundry = Foundry(foundry_root) - apr_proof = foundry.get_apr_proof(test) - node_ids = apr_proof.prune_from(node) - _LOGGER.info(f'Pruned nodes: {node_ids}') - apr_proof.write_proof_data() - - -def foundry_simplify_node( - foundry_root: Path, - test: str, - node: NodeIdLike, - replace: bool = False, - minimize: bool = True, - sort_collections: bool = False, - bug_report: bool = False, - smt_timeout: int | None = None, - smt_retry_limit: int | None = None, - trace_rewrites: bool = False, -) -> str: - br = BugReport(Path(f'{test}.bug_report')) if bug_report else None - foundry = Foundry(foundry_root, bug_report=br) - apr_proof = foundry.get_apr_proof(test) - cterm = apr_proof.kcfg.node(node).cterm - with legacy_explore( - foundry.kevm, - kcfg_semantics=KEVMSemantics(), - id=apr_proof.id, - bug_report=br, - smt_timeout=smt_timeout, - smt_retry_limit=smt_retry_limit, - trace_rewrites=trace_rewrites, - ) as kcfg_explore: - new_term, _ = kcfg_explore.cterm_simplify(cterm) - if replace: - apr_proof.kcfg.replace_node(node, CTerm.from_kast(new_term)) - apr_proof.write_proof_data() - res_term = minimize_term(new_term) if minimize else new_term - return foundry.kevm.pretty_print(res_term, unalias=False, sort_collections=sort_collections) - - -def foundry_merge_nodes( - foundry_root: Path, - test: str, - node_ids: Iterable[NodeIdLike], - bug_report: bool = False, - include_disjunct: bool = False, -) -> None: - def check_cells_equal(cell: str, nodes: Iterable[KCFG.Node]) -> bool: - nodes = list(nodes) - if len(nodes) < 2: - return True - cell_value = nodes[0].cterm.cell(cell) - for node in nodes[1:]: - if cell_value != node.cterm.cell(cell): - return False - return True - - br = BugReport(Path(f'{test}.bug_report')) if bug_report else None - foundry = Foundry(foundry_root, bug_report=br) - proof = foundry.get_apr_proof(test) - - if not isinstance(proof, APRProof): - raise ValueError('Specified proof is not an APRProof.') - - if len(list(node_ids)) < 2: - raise ValueError(f'Must supply at least 2 nodes to merge, got: {node_ids}') - - nodes = [proof.kcfg.node(int(node_id)) for node_id in node_ids] - check_cells = ['K_CELL', 'PROGRAM_CELL', 'PC_CELL', 'CALLDEPTH_CELL'] - check_cells_ne = [check_cell for check_cell in check_cells if not check_cells_equal(check_cell, nodes)] - if check_cells_ne: - raise ValueError(f'Nodes {node_ids} cannot be merged because they differ in: {check_cells_ne}') - - anti_unification = nodes[0].cterm - for node in nodes[1:]: - anti_unification, _, _ = anti_unification.anti_unify(node.cterm, keep_values=True, kdef=foundry.kevm.definition) - new_node = proof.kcfg.create_node(anti_unification) - for node in nodes: - proof.kcfg.create_cover(node.id, new_node.id) - - proof.write_proof_data() - - print(f'Merged nodes {node_ids} into new node {new_node.id}.') - print(foundry.kevm.pretty_print(new_node.cterm.kast)) - - -def foundry_step_node( - foundry_root: Path, - test: str, - node: NodeIdLike, - repeat: int = 1, - depth: int = 1, - bug_report: bool = False, - smt_timeout: int | None = None, - smt_retry_limit: int | None = None, - trace_rewrites: bool = False, -) -> None: - if repeat < 1: - raise ValueError(f'Expected positive value for --repeat, got: {repeat}') - if depth < 1: - raise ValueError(f'Expected positive value for --depth, got: {depth}') - - br = BugReport(Path(f'{test}.bug_report')) if bug_report else None - foundry = Foundry(foundry_root, bug_report=br) - - apr_proof = foundry.get_apr_proof(test) - with legacy_explore( - foundry.kevm, - kcfg_semantics=KEVMSemantics(), - id=apr_proof.id, - bug_report=br, - smt_timeout=smt_timeout, - smt_retry_limit=smt_retry_limit, - trace_rewrites=trace_rewrites, - ) as kcfg_explore: - for _i in range(repeat): - node = kcfg_explore.step(apr_proof.kcfg, node, apr_proof.logs, depth=depth) - apr_proof.write_proof_data() - - -def foundry_section_edge( - foundry_root: Path, - test: str, - edge: tuple[str, str], - sections: int = 2, - replace: bool = False, - bug_report: bool = False, - smt_timeout: int | None = None, - smt_retry_limit: int | None = None, - trace_rewrites: bool = False, -) -> None: - br = BugReport(Path(f'{test}.bug_report')) if bug_report else None - foundry = Foundry(foundry_root, bug_report=br) - apr_proof = foundry.get_apr_proof(test) - source_id, target_id = edge - with legacy_explore( - foundry.kevm, - kcfg_semantics=KEVMSemantics(), - id=apr_proof.id, - bug_report=br, - smt_timeout=smt_timeout, - smt_retry_limit=smt_retry_limit, - trace_rewrites=trace_rewrites, - ) as kcfg_explore: - kcfg_explore.section_edge( - apr_proof.kcfg, source_id=int(source_id), target_id=int(target_id), logs=apr_proof.logs, sections=sections - ) - apr_proof.write_proof_data() - - -def foundry_get_model( - foundry_root: Path, - test: str, - nodes: Iterable[NodeIdLike] = (), - pending: bool = False, - failing: bool = False, -) -> str: - foundry = Foundry(foundry_root) - proof = foundry.get_proof(test) - assert isinstance(proof, APRProof) - - if not nodes: - _LOGGER.warning('Node ID is not provided. Displaying models of failing and pending nodes:') - failing = pending = True - - if pending: - nodes = list(nodes) + [node.id for node in proof.pending] - if failing: - nodes = list(nodes) + [node.id for node in proof.failing] - nodes = unique(nodes) - - res_lines = [] - - with legacy_explore(foundry.kevm, kcfg_semantics=KEVMSemantics(), id=proof.id) as kcfg_explore: - for node_id in nodes: - res_lines.append('') - res_lines.append(f'Node id: {node_id}') - node = proof.kcfg.node(node_id) - res_lines.extend(print_model(node, kcfg_explore)) - - return '\n'.join(res_lines) - - -def _write_cfg(cfg: KCFG, path: Path) -> None: - path.write_text(cfg.to_json()) - _LOGGER.info(f'Updated CFG file: {path}') - - -def _foundry_to_contract_def( - empty_config: KInner, - contracts: Iterable[Contract], - requires: Iterable[str], -) -> KDefinition: - modules = [contract_to_main_module(contract, empty_config, imports=['FOUNDRY']) for contract in contracts] - # First module is chosen as main module arbitrarily, since the contract definition is just a set of - # contract modules. - main_module = Contract.contract_to_module_name(list(contracts)[0].name_upper) - - return KDefinition( - main_module, - modules, - requires=(KRequire(req) for req in list(requires)), - ) - - -def _foundry_to_main_def( - main_module: str, - contracts: Iterable[Contract], - empty_config: KInner, - requires: Iterable[str], - imports: dict[str, list[str]], -) -> KDefinition: - modules = [ - contract_to_verification_module(contract, empty_config, imports=imports[contract.name]) - for contract in contracts - ] - _main_module = KFlatModule( - main_module, - imports=(KImport(mname) for mname in [_m.name for _m in modules]), - ) - - return KDefinition( - main_module, - [_main_module] + modules, - requires=(KRequire(req) for req in list(requires)), - ) - - -def _method_to_apr_proof( - foundry: Foundry, - contract: Contract, - method: Contract.Method, - save_directory: Path, - kcfg_explore: KCFGExplore, - reinit: bool = False, - simplify_init: bool = True, - bmc_depth: int | None = None, -) -> APRProof | APRBMCProof: - contract_name = contract.name - method_sig = method.signature - test = f'{contract_name}.{method_sig}' - proof_digest = foundry.proof_digest(contract_name, method_sig) - if Proof.proof_data_exists(proof_digest, save_directory) and not reinit: - apr_proof = foundry.get_apr_proof(test) - assert isinstance(apr_proof, APRProof) - else: - _LOGGER.info(f'Initializing KCFG for test: {test}') - - setup_digest = None - if method_sig != 'setUp()' and 'setUp' in contract.method_by_name: - setup_digest = foundry.proof_digest(contract_name, 'setUp()') - _LOGGER.info(f'Using setUp method for test: {test}') - - empty_config = foundry.kevm.definition.empty_config(GENERATED_TOP_CELL) - kcfg, init_node_id, target_node_id = _method_to_cfg( - empty_config, contract, method, save_directory, init_state=setup_digest - ) - - _LOGGER.info(f'Expanding macros in initial state for test: {test}') - init_term = kcfg.node(init_node_id).cterm.kast - init_term = KDefinition__expand_macros(foundry.kevm.definition, init_term) - init_cterm = CTerm.from_kast(init_term) - _LOGGER.info(f'Computing definedness constraint for test: {test}') - init_cterm = kcfg_explore.cterm_assume_defined(init_cterm) - kcfg.replace_node(init_node_id, init_cterm) - - _LOGGER.info(f'Expanding macros in target state for test: {test}') - target_term = kcfg.node(target_node_id).cterm.kast - target_term = KDefinition__expand_macros(foundry.kevm.definition, target_term) - target_cterm = CTerm.from_kast(target_term) - kcfg.replace_node(target_node_id, target_cterm) - - if simplify_init: - _LOGGER.info(f'Simplifying KCFG for test: {test}') - kcfg_explore.simplify(kcfg, {}) - if bmc_depth is not None: - apr_proof = APRBMCProof( - proof_digest, kcfg, init_node_id, target_node_id, {}, bmc_depth, proof_dir=save_directory - ) - else: - apr_proof = APRProof(proof_digest, kcfg, init_node_id, target_node_id, {}, proof_dir=save_directory) - - apr_proof.write_proof_data() - return apr_proof - - -def _method_to_cfg( - empty_config: KInner, - contract: Contract, - method: Contract.Method, - kcfgs_dir: Path, - init_state: str | None = None, -) -> tuple[KCFG, NodeIdLike, NodeIdLike]: - calldata = method.calldata_cell(contract) - callvalue = method.callvalue_cell - init_cterm = _init_cterm( - empty_config, - contract.name, - kcfgs_dir, - calldata=calldata, - callvalue=callvalue, - init_state=init_state, - ) - is_test = method.name.startswith('test') - failing = method.name.startswith('testFail') - final_cterm = _final_cterm(empty_config, contract.name, failing=failing, is_test=is_test) - - cfg = KCFG() - init_node = cfg.create_node(init_cterm) - target_node = cfg.create_node(final_cterm) - - return cfg, init_node.id, target_node.id - - -def get_final_accounts_cell(proof_digest: str, proof_dir: Path) -> tuple[KInner, Iterable[KInner]]: - apr_proof = APRProof.read_proof_data(proof_dir, proof_digest) - target = apr_proof.kcfg.node(apr_proof.target) - target_states = apr_proof.kcfg.covers(target_id=target.id) - if len(target_states) == 0: - raise ValueError( - f'setUp() function for {apr_proof.id} did not reach the end of execution. Maybe --max-iterations is too low?' - ) - if len(target_states) > 1: - raise ValueError(f'setUp() function for {apr_proof.id} branched and has {len(target_states)} target states.') - cterm = single(target_states).source.cterm - acct_cell = cterm.cell('ACCOUNTS_CELL') - fvars = free_vars(acct_cell) - acct_cons = constraints_for(fvars, cterm.constraints) - return (acct_cell, acct_cons) - - -def _init_cterm( - empty_config: KInner, - contract_name: str, - kcfgs_dir: Path, - *, - calldata: KInner | None = None, - callvalue: KInner | None = None, - init_state: str | None = None, -) -> CTerm: - program = KEVM.bin_runtime(KApply(f'contract_{contract_name}')) - account_cell = KEVM.account_cell( - Foundry.address_TEST_CONTRACT(), - intToken(0), - program, - KApply('.Map'), - KApply('.Map'), - intToken(1), - ) - init_subst = { - 'MODE_CELL': KApply('NORMAL'), - 'SCHEDULE_CELL': KApply('LONDON_EVM'), - 'STATUSCODE_CELL': KVariable('STATUSCODE'), - 'CALLSTACK_CELL': KApply('.List'), - 'CALLDEPTH_CELL': intToken(0), - 'PROGRAM_CELL': program, - 'JUMPDESTS_CELL': KEVM.compute_valid_jumpdests(program), - 'ORIGIN_CELL': KVariable('ORIGIN_ID'), - 'LOG_CELL': KApply('.List'), - 'ID_CELL': Foundry.address_TEST_CONTRACT(), - 'CALLER_CELL': KVariable('CALLER_ID'), - 'ACCESSEDACCOUNTS_CELL': KApply('.Set'), - 'ACCESSEDSTORAGE_CELL': KApply('.Map'), - 'INTERIMSTATES_CELL': KApply('.List'), - 'LOCALMEM_CELL': KApply('.Bytes_BYTES-HOOKED_Bytes'), - 'PREVCALLER_CELL': KApply('.Account_EVM-TYPES_Account'), - 'PREVORIGIN_CELL': KApply('.Account_EVM-TYPES_Account'), - 'NEWCALLER_CELL': KApply('.Account_EVM-TYPES_Account'), - 'NEWORIGIN_CELL': KApply('.Account_EVM-TYPES_Account'), - 'ACTIVE_CELL': FALSE, - 'STATIC_CELL': FALSE, - 'MEMORYUSED_CELL': intToken(0), - 'WORDSTACK_CELL': KApply('.WordStack_EVM-TYPES_WordStack'), - 'PC_CELL': intToken(0), - 'GAS_CELL': intToken(9223372036854775807), - 'K_CELL': KSequence([KEVM.sharp_execute(), KVariable('CONTINUATION')]), - 'ACCOUNTS_CELL': KEVM.accounts( - [ - account_cell, # test contract address - Foundry.account_CHEATCODE_ADDRESS(KApply('.Map')), - ] - ), - 'SINGLECALL_CELL': FALSE, - 'ISREVERTEXPECTED_CELL': FALSE, - 'ISOPCODEEXPECTED_CELL': FALSE, - 'EXPECTEDADDRESS_CELL': KApply('.Account_EVM-TYPES_Account'), - 'EXPECTEDVALUE_CELL': intToken(0), - 'EXPECTEDDATA_CELL': KApply('.Bytes_BYTES-HOOKED_Bytes'), - 'OPCODETYPE_CELL': KApply('.OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType'), - 'RECORDEVENT_CELL': FALSE, - 'ISEVENTEXPECTED_CELL': FALSE, - 'ISCALLWHITELISTACTIVE_CELL': FALSE, - 'ISSTORAGEWHITELISTACTIVE_CELL': FALSE, - 'ADDRESSSET_CELL': KApply('.Set'), - 'STORAGESLOTSET_CELL': KApply('.Set'), - } - - constraints = None - if init_state: - accts, constraints = get_final_accounts_cell(init_state, kcfgs_dir) - init_subst['ACCOUNTS_CELL'] = accts - - if calldata is not None: - init_subst['CALLDATA_CELL'] = calldata - - if callvalue is not None: - init_subst['CALLVALUE_CELL'] = callvalue - - init_term = Subst(init_subst)(empty_config) - init_cterm = CTerm.from_kast(init_term) - init_cterm = KEVM.add_invariant(init_cterm) - if constraints is None: - return init_cterm - else: - for constraint in constraints: - init_cterm = init_cterm.add_constraint(constraint) - return init_cterm - - -def _final_cterm(empty_config: KInner, contract_name: str, *, failing: bool, is_test: bool = True) -> CTerm: - final_term = _final_term(empty_config, contract_name) - dst_failed_post = KEVM.lookup(KVariable('CHEATCODE_STORAGE_FINAL'), Foundry.loc_FOUNDRY_FAILED()) - foundry_success = Foundry.success( - KVariable('STATUSCODE_FINAL'), - dst_failed_post, - KVariable('ISREVERTEXPECTED_FINAL'), - KVariable('ISOPCODEEXPECTED_FINAL'), - KVariable('RECORDEVENT_FINAL'), - KVariable('ISEVENTEXPECTED_FINAL'), - ) - final_cterm = CTerm.from_kast(final_term) - if is_test: - if not failing: - return final_cterm.add_constraint(mlEqualsTrue(foundry_success)) - else: - return final_cterm.add_constraint(mlEqualsTrue(notBool(foundry_success))) - return final_cterm - - -def _final_term(empty_config: KInner, contract_name: str) -> KInner: - program = KEVM.bin_runtime(KApply(f'contract_{contract_name}')) - post_account_cell = KEVM.account_cell( - Foundry.address_TEST_CONTRACT(), - KVariable('ACCT_BALANCE_FINAL'), - program, - KVariable('ACCT_STORAGE_FINAL'), - KVariable('ACCT_ORIGSTORAGE_FINAL'), - KVariable('ACCT_NONCE_FINAL'), - ) - final_subst = { - 'K_CELL': KSequence([KEVM.halt(), KVariable('CONTINUATION')]), - 'STATUSCODE_CELL': KVariable('STATUSCODE_FINAL'), - 'ID_CELL': Foundry.address_TEST_CONTRACT(), - 'ACCOUNTS_CELL': KEVM.accounts( - [ - post_account_cell, # test contract address - Foundry.account_CHEATCODE_ADDRESS(KVariable('CHEATCODE_STORAGE_FINAL')), - KVariable('ACCOUNTS_FINAL'), - ] - ), - 'ISREVERTEXPECTED_CELL': KVariable('ISREVERTEXPECTED_FINAL'), - 'ISOPCODEEXPECTED_CELL': KVariable('ISOPCODEEXPECTED_FINAL'), - 'RECORDEVENT_CELL': KVariable('RECORDEVENT_FINAL'), - 'ISEVENTEXPECTED_CELL': KVariable('ISEVENTEXPECTED_FINAL'), - 'ISCALLWHITELISTACTIVE_CELL': KVariable('ISCALLWHITELISTACTIVE_FINAL'), - 'ISSTORAGEWHITELISTACTIVE_CELL': KVariable('ISSTORAGEWHITELISTACTIVE_FINAL'), - 'ADDRESSSET_CELL': KVariable('ADDRESSSET_FINAL'), - 'STORAGESLOTSET_CELL': KVariable('STORAGESLOTSET_FINAL'), - } - return abstract_cell_vars( - Subst(final_subst)(empty_config), - [ - KVariable('STATUSCODE_FINAL'), - KVariable('ACCOUNTS_FINAL'), - KVariable('ISREVERTEXPECTED_FINAL'), - KVariable('ISOPCODEEXPECTED_FINAL'), - KVariable('RECORDEVENT_FINAL'), - KVariable('ISEVENTEXPECTED_FINAL'), - KVariable('ISCALLWHITELISTACTIVE_FINAL'), - KVariable('ISSTORAGEWHITELISTACTIVE_FINAL'), - KVariable('ADDRESSSET_FINAL'), - KVariable('STORAGESLOTSET_FINAL'), - ], - ) - - -class FoundryNodePrinter(KEVMNodePrinter): - foundry: Foundry - contract_name: str - - def __init__(self, foundry: Foundry, contract_name: str): - KEVMNodePrinter.__init__(self, foundry.kevm) - self.foundry = foundry - self.contract_name = contract_name - - def print_node(self, kcfg: KCFG, node: KCFG.Node) -> list[str]: - ret_strs = super().print_node(kcfg, node) - _pc = node.cterm.cell('PC_CELL') - if type(_pc) is KToken and _pc.sort == INT: - srcmap_data = self.foundry.srcmap_data(self.contract_name, int(_pc.token)) - if srcmap_data is not None: - path, start, end = srcmap_data - ret_strs.append(f'src: {str(path)}:{start}:{end}') - return ret_strs - - -class FoundryAPRNodePrinter(FoundryNodePrinter, APRProofNodePrinter): - def __init__(self, foundry: Foundry, contract_name: str, proof: APRProof): - FoundryNodePrinter.__init__(self, foundry, contract_name) - APRProofNodePrinter.__init__(self, proof, foundry.kevm) - - -class FoundryAPRBMCNodePrinter(FoundryNodePrinter, APRBMCProofNodePrinter): - def __init__(self, foundry: Foundry, contract_name: str, proof: APRBMCProof): - FoundryNodePrinter.__init__(self, foundry, contract_name) - APRBMCProofNodePrinter.__init__(self, proof, foundry.kevm) - - -def foundry_node_printer(foundry: Foundry, contract_name: str, proof: APRProof) -> NodePrinter: - if type(proof) is APRBMCProof: - return FoundryAPRBMCNodePrinter(foundry, contract_name, proof) - if type(proof) is APRProof: - return FoundryAPRNodePrinter(foundry, contract_name, proof) - raise ValueError(f'Cannot build NodePrinter for proof type: {type(proof)}') diff --git a/kevm-pyk/src/kontrol/solc_to_k.py b/kevm-pyk/src/kontrol/solc_to_k.py deleted file mode 100644 index 503f67c040..0000000000 --- a/kevm-pyk/src/kontrol/solc_to_k.py +++ /dev/null @@ -1,720 +0,0 @@ -from __future__ import annotations - -import json -import logging -import re -from dataclasses import dataclass -from functools import cached_property -from subprocess import CalledProcessError -from typing import TYPE_CHECKING - -from pyk.kast.inner import KApply, KLabel, KRewrite, KSort, KVariable -from pyk.kast.kast import KAtt -from pyk.kast.manip import abstract_term_safely -from pyk.kast.outer import KDefinition, KFlatModule, KImport, KNonTerminal, KProduction, KRequire, KRule, KTerminal -from pyk.prelude.kbool import TRUE, andBool -from pyk.prelude.kint import intToken -from pyk.prelude.string import stringToken -from pyk.utils import FrozenDict, hash_str, run_process, single - -from kevm_pyk.kevm import KEVM - -if TYPE_CHECKING: - from collections.abc import Iterable - from pathlib import Path - from typing import Any, Final - - from pyk.kast import KInner - from pyk.kast.outer import KProductionItem, KSentence - -_LOGGER: Final = logging.getLogger(__name__) - - -def solc_to_k( - definition_dir: Path, - contract_file: Path, - contract_name: str, - main_module: str | None, - requires: Iterable[str] = (), - imports: Iterable[str] = (), -) -> str: - kevm = KEVM(definition_dir) - empty_config = kevm.definition.empty_config(KEVM.Sorts.KEVM_CELL) - - solc_json = solc_compile(contract_file) - contract_json = solc_json['contracts'][contract_file.name][contract_name] - if 'sources' in solc_json and contract_file.name in solc_json['sources']: - contract_source = solc_json['sources'][contract_file.name] - for key in ['id', 'ast']: - if key not in contract_json and key in contract_source: - contract_json[key] = contract_source[key] - contract = Contract(contract_name, contract_json, foundry=False) - - imports = list(imports) - requires = list(requires) - contract_module = contract_to_main_module(contract, empty_config, imports=['EDSL'] + imports) - _main_module = KFlatModule( - main_module if main_module else 'MAIN', [], [KImport(mname) for mname in [contract_module.name] + imports] - ) - modules = (contract_module, _main_module) - bin_runtime_definition = KDefinition( - _main_module.name, modules, requires=tuple(KRequire(req) for req in ['edsl.md'] + requires) - ) - - _kprint = KEVM(definition_dir, extra_unparsing_modules=modules) - return _kprint.pretty_print(bin_runtime_definition, unalias=False) + '\n' - - -@dataclass -class Contract: - @dataclass - class Method: - name: str - id: int - sort: KSort - arg_names: tuple[str, ...] - arg_types: tuple[str, ...] - contract_name: str - contract_digest: str - contract_storage_digest: str - payable: bool - signature: str - ast: dict | None - - def __init__( - self, - msig: str, - id: int, - abi: dict, - ast: dict | None, - contract_name: str, - contract_digest: str, - contract_storage_digest: str, - sort: KSort, - ) -> None: - self.signature = msig - self.name = abi['name'] - self.id = id - self.arg_names = tuple([f'V{i}_{input["name"].replace("-", "_")}' for i, input in enumerate(abi['inputs'])]) - self.arg_types = tuple([input['type'] for input in abi['inputs']]) - self.contract_name = contract_name - self.contract_digest = contract_digest - self.contract_storage_digest = contract_storage_digest - self.sort = sort - # TODO: Check that we're handling all state mutability cases - self.payable = abi['stateMutability'] == 'payable' - self.ast = ast - - @property - def klabel(self) -> KLabel: - args_list = '_'.join(self.arg_types) - return KLabel(f'method_{self.contract_name}_{self.unique_name}_{args_list}') - - @property - def unique_klabel(self) -> KLabel: - args_list = '_'.join(self.arg_types) - return KLabel(f'method_{self.contract_name}_{self.unique_name}_{args_list}') - - @property - def unique_name(self) -> str: - return f'{Contract.escaped(self.name, "S2K")}' - - @cached_property - def qualified_name(self) -> str: - return f'{self.contract_name}.{self.signature}' - - @property - def selector_alias_rule(self) -> KRule: - return KRule(KRewrite(KEVM.abi_selector(self.signature), intToken(self.id))) - - @cached_property - def is_setup(self) -> bool: - return self.name == 'setUp' - - def up_to_date(self, digest_file: Path) -> bool: - if not digest_file.exists(): - return False - digest_dict = json.loads(digest_file.read_text()) - if 'methods' not in digest_dict: - digest_dict['methods'] = {} - digest_file.write_text(json.dumps(digest_dict)) - if self.qualified_name not in digest_dict['methods']: - return False - return digest_dict['methods'][self.qualified_name]['method'] == self.digest - - def contract_up_to_date(self, digest_file: Path) -> bool: - if not digest_file.exists(): - return False - digest_dict = json.loads(digest_file.read_text()) - if 'methods' not in digest_dict: - digest_dict['methods'] = {} - digest_file.write_text(json.dumps(digest_dict)) - if self.qualified_name not in digest_dict['methods']: - return False - return digest_dict['methods'][self.qualified_name]['contract'] == self.contract_digest - - def update_digest(self, digest_file: Path) -> None: - digest_dict = {} - if digest_file.exists(): - digest_dict = json.loads(digest_file.read_text()) - if 'methods' not in digest_dict: - digest_dict['methods'] = {} - digest_dict['methods'][self.qualified_name] = {'method': self.digest, 'contract': self.contract_digest} - digest_file.write_text(json.dumps(digest_dict)) - - _LOGGER.info(f'Updated method {self.qualified_name} in digest file: {digest_file}') - - @cached_property - def digest(self) -> str: - ast = json.dumps(self.ast, sort_keys=True) if self.ast is not None else {} - contract_digest = self.contract_digest if not self.is_setup else {} - return hash_str(f'{self.signature}{ast}{self.contract_storage_digest}{contract_digest}') - - @property - def production(self) -> KProduction: - items_before: list[KProductionItem] = [KTerminal(self.unique_name), KTerminal('(')] - - items_args: list[KProductionItem] = [] - for i, input_type in enumerate(self.arg_types): - if i > 0: - items_args += [KTerminal(',')] - items_args += [KNonTerminal(_evm_base_sort(input_type)), KTerminal(':'), KTerminal(input_type)] - - items_after: list[KProductionItem] = [KTerminal(')')] - return KProduction( - self.sort, - items_before + items_args + items_after, - klabel=self.unique_klabel, - att=KAtt({'symbol': ''}), - ) - - def rule(self, contract: KInner, application_label: KLabel, contract_name: str) -> KRule | None: - arg_vars = [KVariable(aname) for aname in self.arg_names] - prod_klabel = self.unique_klabel - assert prod_klabel is not None - args: list[KInner] = [] - conjuncts: list[KInner] = [] - for input_name, input_type in zip(self.arg_names, self.arg_types, strict=True): - args.append(KEVM.abi_type(input_type, KVariable(input_name))) - rp = _range_predicate(KVariable(input_name), input_type) - if rp is None: - _LOGGER.info( - f'Unsupported ABI type for method {contract_name}.{prod_klabel.name}, will not generate calldata sugar: {input_type}' - ) - return None - conjuncts.append(rp) - lhs = KApply(application_label, [contract, KApply(prod_klabel, arg_vars)]) - rhs = KEVM.abi_calldata(self.name, args) - ensures = andBool(conjuncts) - return KRule(KRewrite(lhs, rhs), ensures=ensures) - - @cached_property - def callvalue_cell(self) -> KInner: - return ( - intToken(0) - if not self.payable - else abstract_term_safely(KVariable('_###CALLVALUE###_'), base_name='CALLVALUE') - ) - - def calldata_cell(self, contract: Contract) -> KInner: - return KApply(contract.klabel_method, [KApply(contract.klabel), self.application]) - - @cached_property - def application(self) -> KInner: - klabel = self.klabel - assert klabel is not None - args = [ - abstract_term_safely(KVariable('_###SOLIDITY_ARG_VAR###_'), base_name=f'V{name}') - for name in self.arg_names - ] - return klabel(args) - - name: str - contract_json: dict - contract_id: int - contract_path: str - bytecode: str - raw_sourcemap: str | None - methods: tuple[Method, ...] - fields: FrozenDict - PREFIX_CODE: Final = 'Z' - - def __init__(self, contract_name: str, contract_json: dict, foundry: bool = False) -> None: - self.name = contract_name - self.contract_json = contract_json - - self.contract_id = self.contract_json['id'] - self.contract_path = self.contract_json['ast']['absolutePath'] - - evm = self.contract_json['evm'] if not foundry else self.contract_json - - deployed_bytecode = evm['deployedBytecode'] - self.bytecode = deployed_bytecode['object'].replace('0x', '') - self.raw_sourcemap = deployed_bytecode['sourceMap'] if 'sourceMap' in deployed_bytecode else None - - contract_ast_nodes = [ - node - for node in self.contract_json['ast']['nodes'] - if node['nodeType'] == 'ContractDefinition' and node['name'] == self.name - ] - contract_ast = single(contract_ast_nodes) if len(contract_ast_nodes) > 0 else {'nodes': []} - function_asts = { - node['functionSelector']: node - for node in contract_ast['nodes'] - if node['nodeType'] == 'FunctionDefinition' and 'functionSelector' in node - } - - _methods = [] - for method in contract_json['abi']: - if method['type'] != 'function': - continue - msig = method_sig_from_abi(method) - method_selector: str = str(evm['methodIdentifiers'][msig]) - mid = int(method_selector, 16) - method_ast = function_asts[method_selector] if method_selector in function_asts else None - _m = Contract.Method( - msig, mid, method, method_ast, self.name, self.digest, self.storage_digest, self.sort_method - ) - _methods.append(_m) - - self.methods = tuple(sorted(_methods, key=(lambda method: method.signature))) - - self.fields = FrozenDict({}) - if 'storageLayout' in self.contract_json and 'storage' in self.contract_json['storageLayout']: - _fields_list = [(_f['label'], int(_f['slot'])) for _f in self.contract_json['storageLayout']['storage']] - _fields = {} - for _l, _s in _fields_list: - if _l in _fields: - _LOGGER.info(f'Found duplicate field access key on contract {self.name}: {_l}') - continue - _fields[_l] = _s - self.fields = FrozenDict(_fields) - - @cached_property - def digest(self) -> str: - return hash_str(f'{self.name} - {json.dumps(self.contract_json, sort_keys=True)}') - - @cached_property - def storage_digest(self) -> str: - storage_layout = self.contract_json.get('storageLayout') or {} - return hash_str(f'{self.name} - {json.dumps(storage_layout, sort_keys=True)}') - - @cached_property - def srcmap(self) -> dict[int, tuple[int, int, int, str, int]]: - _srcmap = {} - - if len(self.bytecode) > 0 and self.raw_sourcemap is not None: - instr_to_pc = {} - pc = 0 - instr = 0 - bs = [int(self.bytecode[i : i + 2], 16) for i in range(0, len(self.bytecode), 2)] - while pc < len(bs): - b = bs[pc] - instr_to_pc[instr] = pc - if 0x60 <= b and b < 0x7F: - push_width = b - 0x5F - pc = pc + push_width - pc += 1 - instr += 1 - - instrs_srcmap = self.raw_sourcemap.split(';') - - s, l, f, j, m = (0, 0, 0, '', 0) - for i, instr_srcmap in enumerate(instrs_srcmap): - fields = instr_srcmap.split(':') - if len(fields) > 0 and fields[0] != '': - s = int(fields[0]) - if len(fields) > 1 and fields[1] != '': - l = int(fields[1]) - if len(fields) > 2 and fields[2] != '': - f = int(fields[2]) - if len(fields) > 3 and fields[3] != '': - j = fields[3] - if len(fields) > 4 and fields[4] != '': - m = int(fields[4]) - _srcmap[i] = (s, l, f, j, m) - - return _srcmap - - @staticmethod - def contract_to_module_name(c: str) -> str: - return c + '-CONTRACT' - - @staticmethod - def contract_to_verification_module_name(c: str) -> str: - return c + '-VERIFICATION' - - @staticmethod - def test_to_claim_name(t: str) -> str: - return t.replace('_', '-') - - @property - def name_upper(self) -> str: - return self.name[0:1].upper() + self.name[1:] - - @staticmethod - def escaped_chars() -> list[str]: - return [Contract.PREFIX_CODE, '_', '$'] - - @staticmethod - def escape_char(char: str) -> str: - match char: - case Contract.PREFIX_CODE: - as_ecaped = Contract.PREFIX_CODE - case '_': - as_ecaped = 'Und' - case '$': - as_ecaped = 'Dlr' - case _: - as_ecaped = hex(ord(char)).removeprefix('0x') - return f'{Contract.PREFIX_CODE}{as_ecaped}' - - @staticmethod - def unescape_seq(seq: str) -> tuple[str, int]: - if seq.startswith(Contract.PREFIX_CODE + Contract.PREFIX_CODE): - return Contract.PREFIX_CODE, 1 - elif seq.startswith('Und'): - return '_', 3 - elif seq.startswith('Dlr'): - return '$', 3 - else: - return chr(int(seq, base=16)), 4 - - @staticmethod - def escaped(name: str, prefix: str) -> str: - """ - escape all the chars that would cause issues once kompiling and add a prefix to mark it as "escaped" - """ - escaped = [Contract.escape_char(char) if char in Contract.escaped_chars() else char for char in iter(name)] - return prefix + ''.join(escaped) - - @staticmethod - def unescaped(name: str, prefix: str = '') -> str: - if not name.startswith(prefix): - raise RuntimeError(f'name {name} should start with {prefix}') - unescaped = name.removeprefix(prefix) - res = [] - skipped = 0 - i = 0 - while i + skipped < len(unescaped[:-1]): - j = i + skipped - char = unescaped[j] - next_char = unescaped[j + 1] - if char == Contract.PREFIX_CODE: - unesc, to_skip = Contract.unescape_seq(unescaped[(j + 1) : (j + 4)]) - res.append(unesc) - for _ in range(to_skip): - skipped += 1 - else: - res.append(char) - # write last char - if j + 2 == len(unescaped): - res.append(next_char) - i += 1 - return ''.join(res) - - @property - def sort(self) -> KSort: - return KSort(f'{Contract.escaped(self.name, "S2K")}Contract') - - @property - def sort_field(self) -> KSort: - return KSort(f'{self.name}Field') - - @property - def sort_method(self) -> KSort: - return KSort(f'{Contract.escaped(self.name, "S2K")}Method') - - @property - def klabel(self) -> KLabel: - return KLabel(f'contract_{self.name}') - - @property - def klabel_method(self) -> KLabel: - return KLabel(f'method_{self.name}') - - @property - def klabel_field(self) -> KLabel: - return KLabel(f'field_{self.name}') - - @property - def subsort(self) -> KProduction: - return KProduction(KSort('Contract'), [KNonTerminal(self.sort)]) - - @property - def subsort_field(self) -> KProduction: - return KProduction(KSort('Field'), [KNonTerminal(self.sort_field)]) - - @property - def production(self) -> KProduction: - return KProduction( - self.sort, [KTerminal(Contract.escaped(self.name, 'S2K'))], klabel=self.klabel, att=KAtt({'symbol': ''}) - ) - - @property - def macro_bin_runtime(self) -> KRule: - if self.has_unlinked(): - raise ValueError( - f'Some library placeholders have been found in contract {self.name}. Please link the library(ies) first. Ref: https://docs.soliditylang.org/en/v0.8.20/using-the-compiler.html#library-linking' - ) - return KRule( - KRewrite(KEVM.bin_runtime(KApply(self.klabel)), KEVM.parse_bytestack(stringToken('0x' + self.bytecode))) - ) - - def has_unlinked(self) -> bool: - return 0 <= self.bytecode.find('__') - - @property - def method_sentences(self) -> list[KSentence]: - method_application_production: KSentence = KProduction( - KSort('Bytes'), - [KNonTerminal(self.sort), KTerminal('.'), KNonTerminal(self.sort_method)], - klabel=self.klabel_method, - att=KAtt({'function': '', 'symbol': ''}), - ) - res: list[KSentence] = [method_application_production] - res.extend(method.production for method in self.methods) - method_rules = (method.rule(KApply(self.klabel), self.klabel_method, self.name) for method in self.methods) - res.extend(rule for rule in method_rules if rule) - res.extend(method.selector_alias_rule for method in self.methods) - return res if len(res) > 1 else [] - - @property - def field_sentences(self) -> list[KSentence]: - prods: list[KSentence] = [self.subsort_field] - rules: list[KSentence] = [] - for field, slot in self.fields.items(): - klabel = KLabel(self.klabel_field.name + f'_{field}') - prods.append(KProduction(self.sort_field, [KTerminal(field)], klabel=klabel, att=KAtt({'symbol': ''}))) - rule_lhs = KEVM.loc(KApply(KLabel('contract_access_field'), [KApply(self.klabel), KApply(klabel)])) - rule_rhs = intToken(slot) - rules.append(KRule(KRewrite(rule_lhs, rule_rhs))) - if len(prods) == 1 and not rules: - return [] - return prods + rules - - @property - def sentences(self) -> list[KSentence]: - return [self.subsort, self.production, self.macro_bin_runtime] + self.field_sentences + self.method_sentences - - @property - def method_by_name(self) -> dict[str, Contract.Method]: - return {method.name: method for method in self.methods} - - @property - def method_by_sig(self) -> dict[str, Contract.Method]: - return {method.signature: method for method in self.methods} - - -def solc_compile(contract_file: Path) -> dict[str, Any]: - # TODO: add check to kevm: - # solc version should be >=0.8.0 due to: - # https://github.com/ethereum/solidity/issues/10276 - - args = { - 'language': 'Solidity', - 'sources': { - contract_file.name: { - 'urls': [ - str(contract_file), - ], - }, - }, - 'settings': { - 'outputSelection': { - '*': { - '*': [ - 'abi', - 'storageLayout', - 'evm.methodIdentifiers', - 'evm.deployedBytecode.object', - 'evm.deployedBytecode.sourceMap', - ], - '': ['ast'], - }, - }, - }, - } - - try: - process_res = run_process(['solc', '--standard-json'], logger=_LOGGER, input=json.dumps(args)) - except CalledProcessError as err: - raise RuntimeError('solc error', err.stdout, err.stderr) from err - result = json.loads(process_res.stdout) - if 'errors' in result: - failed = False - for error in result['errors']: - if error['severity'] == 'error': - _LOGGER.error(f'solc error:\n{error["formattedMessage"]}') - failed = True - elif error['severity'] == 'warning': - _LOGGER.warning(f'solc warning:\n{error["formattedMessage"]}') - else: - _LOGGER.warning( - f'Unknown solc error severity level {error["severity"]}:\n{json.dumps(error, indent=2)}' - ) - if failed: - raise ValueError('Compilation failed.') - return result - - -def contract_to_main_module(contract: Contract, empty_config: KInner, imports: Iterable[str] = ()) -> KFlatModule: - module_name = Contract.contract_to_module_name(contract.name) - return KFlatModule(module_name, contract.sentences, [KImport(i) for i in list(imports)]) - - -def contract_to_verification_module(contract: Contract, empty_config: KInner, imports: Iterable[str]) -> KFlatModule: - main_module_name = Contract.contract_to_module_name(contract.name) - verification_module_name = Contract.contract_to_verification_module_name(contract.name) - return KFlatModule(verification_module_name, [], [KImport(main_module_name)] + [KImport(i) for i in list(imports)]) - - -# Helpers - - -def _evm_base_sort(type_label: str) -> KSort: - if _evm_base_sort_int(type_label): - return KSort('Int') - - if type_label == 'bytes': - return KSort('Bytes') - - if type_label == 'string': - return KSort('String') - - _LOGGER.info(f'Using generic sort K for type: {type_label}') - return KSort('K') - - -def _evm_base_sort_int(type_label: str) -> bool: - success = False - - # Check address and bool - if type_label in {'address', 'bool'}: - success = True - - # Check bytes - if type_label.startswith('bytes') and len(type_label) > 5 and not type_label.endswith(']'): - width = int(type_label[5:]) - if not (0 < width <= 32): - raise ValueError(f'Unsupported evm base sort type: {type_label}') - else: - success = True - - # Check ints - if type_label.startswith('int') and not type_label.endswith(']'): - width = int(type_label[3:]) - if not (0 < width and width <= 256 and width % 8 == 0): - raise ValueError(f'Unsupported evm base sort type: {type_label}') - else: - success = True - - # Check uints - if type_label.startswith('uint') and not type_label.endswith(']'): - width = int(type_label[4:]) - if not (0 < width and width <= 256 and width % 8 == 0): - raise ValueError(f'Unsupported evm base sort type: {type_label}') - else: - success = True - - return success - - -def _range_predicate(term: KInner, type_label: str) -> KInner | None: - match type_label: - case 'address': - return KEVM.range_address(term) - case 'bool': - return KEVM.range_bool(term) - case 'bytes': - return KEVM.range_uint(128, KEVM.size_bytes(term)) - case 'string': - return TRUE - - predicate_functions = [ - _range_predicate_uint, - _range_predicate_int, - _range_predicate_bytes, - ] - - for f in predicate_functions: - (success, result) = f(term, type_label) - if success: - return result - - _LOGGER.info(f'Unknown range predicate for type: {type_label}') - return None - - -def _range_predicate_uint(term: KInner, type_label: str) -> tuple[bool, KInner | None]: - if type_label.startswith('uint') and not type_label.endswith(']'): - if type_label == 'uint': - width = 256 - else: - width = int(type_label[4:]) - if not (0 < width <= 256 and width % 8 == 0): - raise ValueError(f'Unsupported range predicate uint type: {type_label}') - return (True, KEVM.range_uint(width, term)) - else: - return (False, None) - - -def _range_predicate_int(term: KInner, type_label: str) -> tuple[bool, KInner | None]: - if type_label.startswith('int') and not type_label.endswith(']'): - if type_label == 'int': - width = 256 - else: - width = int(type_label[3:]) - if not (0 < width and width <= 256 and width % 8 == 0): - raise ValueError(f'Unsupported range predicate int type: {type_label}') - return (True, KEVM.range_sint(width, term)) - else: - return (False, None) - - -def _range_predicate_bytes(term: KInner, type_label: str) -> tuple[bool, KInner | None]: - if type_label.startswith('bytes') and not type_label.endswith(']'): - str_width = type_label[5:] - if str_width != '': - width = int(str_width) - if not (0 < width and width <= 32): - raise ValueError(f'Unsupported range predicate bytes type: {type_label}') - return (True, KEVM.range_bytes(intToken(width), term)) - return (False, None) - - -def method_sig_from_abi(method_json: dict) -> str: - def unparse_input(input_json: dict) -> str: - is_array = False - is_sized = False - array_size = 0 - base_type = input_json['type'] - if re.match(r'.+\[.*\]', base_type): - is_array = True - array_size_str = base_type.split('[')[1][:-1] - if array_size_str != '': - is_sized = True - array_size = int(array_size_str) - base_type = base_type.split('[')[0] - if base_type == 'tuple': - input_type = '(' - for i, component in enumerate(input_json['components']): - if i != 0: - input_type += ',' - input_type += unparse_input(component) - input_type += ')' - if is_array and not (is_sized): - input_type += '[]' - elif is_array and is_sized: - input_type += f'[{array_size}]' - return input_type - else: - return input_json['type'] - - method_name = method_json['name'] - method_args = '' - for i, _input in enumerate(method_json['inputs']): - if i != 0: - method_args += ',' - method_args += unparse_input(_input) - return f'{method_name}({method_args})' diff --git a/kevm-pyk/src/tests/__init__.py b/kevm-pyk/src/tests/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/kevm-pyk/src/tests/conftest.py b/kevm-pyk/src/tests/conftest.py deleted file mode 100644 index 7a2b381d3b..0000000000 --- a/kevm-pyk/src/tests/conftest.py +++ /dev/null @@ -1,33 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING - -import pytest - -if TYPE_CHECKING: - from pytest import FixtureRequest, Parser - - -def pytest_addoption(parser: Parser) -> None: - parser.addoption( - '--update-expected-output', - action='store_true', - default=False, - help='Write expected output files for proof tests', - ) - parser.addoption( - '--use-booster', - action='store_true', - default=False, - help='Use the kore-rpc-booster binary instead of kore-rpc', - ) - - -@pytest.fixture -def update_expected_output(request: FixtureRequest) -> bool: - return request.config.getoption('--update-expected-output') - - -@pytest.fixture(scope='session') -def use_booster(request: FixtureRequest) -> bool: - return request.config.getoption('--use-booster') diff --git a/kevm-pyk/src/tests/integration/__init__.py b/kevm-pyk/src/tests/integration/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/kevm-pyk/src/tests/integration/conftest.py b/kevm-pyk/src/tests/integration/conftest.py deleted file mode 100644 index 39dc3c3e52..0000000000 --- a/kevm-pyk/src/tests/integration/conftest.py +++ /dev/null @@ -1,17 +0,0 @@ -from __future__ import annotations - -from functools import partial -from typing import TYPE_CHECKING - -import pytest - -from .utils import gen_bin_runtime - -if TYPE_CHECKING: - from collections.abc import Callable - from pathlib import Path - - -@pytest.fixture -def bin_runtime(tmp_path: Path) -> Callable[[Path], tuple[Path, str]]: - return partial(gen_bin_runtime, output_dir=tmp_path) diff --git a/kevm-pyk/src/tests/integration/test-data/contracts.k.expected b/kevm-pyk/src/tests/integration/test-data/contracts.k.expected deleted file mode 100644 index ae6536bc8e..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/contracts.k.expected +++ /dev/null @@ -1,7576 +0,0 @@ -requires "foundry.md" - -module AccountParamsTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KAccountParamsTestContract - - syntax S2KAccountParamsTestContract ::= "S2KAccountParamsTest" [symbol(), klabel(contract_AccountParamsTest)] - - - - syntax Field ::= AccountParamsTestField - - syntax AccountParamsTestField ::= "IS_TEST" [symbol(), klabel(field_AccountParamsTest_IS_TEST)] - - syntax AccountParamsTestField ::= "_failed" [symbol(), klabel(field_AccountParamsTest__failed)] - - syntax AccountParamsTestField ::= "IS_SCRIPT" [symbol(), klabel(field_AccountParamsTest_IS_SCRIPT)] - - syntax AccountParamsTestField ::= "stdstore" [symbol(), klabel(field_AccountParamsTest_stdstore)] - - rule ( #loc ( S2KAccountParamsTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KAccountParamsTest . _failed ) => 0 ) - - - rule ( #loc ( S2KAccountParamsTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KAccountParamsTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KAccountParamsTestContract "." S2KAccountParamsTestMethod [function(), symbol(), klabel(method_AccountParamsTest)] - - syntax S2KAccountParamsTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_AccountParamsTest_S2KISZUndSCRIPT_)] - - syntax S2KAccountParamsTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_AccountParamsTest_S2KISZUndTEST_)] - - syntax S2KAccountParamsTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_AccountParamsTest_S2Kfailed_)] - - syntax S2KAccountParamsTestMethod ::= "S2KtestDealConcrete" "(" ")" [symbol(), klabel(method_AccountParamsTest_S2KtestDealConcrete_)] - - syntax S2KAccountParamsTestMethod ::= "S2KtestDealSymbolic" "(" Int ":" "uint256" ")" [symbol(), klabel(method_AccountParamsTest_S2KtestDealSymbolic_uint256)] - - syntax S2KAccountParamsTestMethod ::= "S2KtestEtchConcrete" "(" ")" [symbol(), klabel(method_AccountParamsTest_S2KtestEtchConcrete_)] - - syntax S2KAccountParamsTestMethod ::= "S2KtestEtchSymbolic" "(" Bytes ":" "bytes" ")" [symbol(), klabel(method_AccountParamsTest_S2KtestEtchSymbolic_bytes)] - - syntax S2KAccountParamsTestMethod ::= "S2KtestFailZUndGetNonceZUndfalse" "(" ")" [symbol(), klabel(method_AccountParamsTest_S2KtestFailZUndGetNonceZUndfalse_)] - - syntax S2KAccountParamsTestMethod ::= "S2KtestFailZUndGetNonceZUndtrue" "(" ")" [symbol(), klabel(method_AccountParamsTest_S2KtestFailZUndGetNonceZUndtrue_)] - - syntax S2KAccountParamsTestMethod ::= "S2KtestNonceSymbolic" "(" Int ":" "uint64" ")" [symbol(), klabel(method_AccountParamsTest_S2KtestNonceSymbolic_uint64)] - - syntax S2KAccountParamsTestMethod ::= "S2KtestZUndGetNonceZUndfalse" "(" ")" [symbol(), klabel(method_AccountParamsTest_S2KtestZUndGetNonceZUndfalse_)] - - syntax S2KAccountParamsTestMethod ::= "S2KtestZUndGetNonceZUndtrue" "(" ")" [symbol(), klabel(method_AccountParamsTest_S2KtestZUndGetNonceZUndtrue_)] - - syntax S2KAccountParamsTestMethod ::= "S2KtestZUndNonceZUndExistentAddress" "(" ")" [symbol(), klabel(method_AccountParamsTest_S2KtestZUndNonceZUndExistentAddress_)] - - syntax S2KAccountParamsTestMethod ::= "S2KtestZUndNonceZUndNonExistentAddress" "(" ")" [symbol(), klabel(method_AccountParamsTest_S2KtestZUndNonceZUndNonExistentAddress_)] - - syntax S2KAccountParamsTestMethod ::= "S2KtestZUndgetNonceZUndunknownSymbolic" "(" Int ":" "address" ")" [symbol(), klabel(method_AccountParamsTest_S2KtestZUndgetNonceZUndunknownSymbolic_address)] - - syntax S2KAccountParamsTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_AccountParamsTest_S2Kvm_)] - - rule ( S2KAccountParamsTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KAccountParamsTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KAccountParamsTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KAccountParamsTest . S2KtestDealConcrete ( ) => #abiCallData ( "testDealConcrete" , .TypedArgs ) ) - - - rule ( S2KAccountParamsTest . S2KtestDealSymbolic ( V0_value : uint256 ) => #abiCallData ( "testDealSymbolic" , #uint256 ( V0_value ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_value ) - - - rule ( S2KAccountParamsTest . S2KtestEtchConcrete ( ) => #abiCallData ( "testEtchConcrete" , .TypedArgs ) ) - - - rule ( S2KAccountParamsTest . S2KtestEtchSymbolic ( V0_code : bytes ) => #abiCallData ( "testEtchSymbolic" , #bytes ( V0_code ) , .TypedArgs ) ) - ensures #rangeUInt ( 128 , lengthBytes ( V0_code ) ) - - - rule ( S2KAccountParamsTest . S2KtestFailZUndGetNonceZUndfalse ( ) => #abiCallData ( "testFail_GetNonce_false" , .TypedArgs ) ) - - - rule ( S2KAccountParamsTest . S2KtestFailZUndGetNonceZUndtrue ( ) => #abiCallData ( "testFail_GetNonce_true" , .TypedArgs ) ) - - - rule ( S2KAccountParamsTest . S2KtestNonceSymbolic ( V0_newNonce : uint64 ) => #abiCallData ( "testNonceSymbolic" , #uint64 ( V0_newNonce ) , .TypedArgs ) ) - ensures #rangeUInt ( 64 , V0_newNonce ) - - - rule ( S2KAccountParamsTest . S2KtestZUndGetNonceZUndfalse ( ) => #abiCallData ( "test_GetNonce_false" , .TypedArgs ) ) - - - rule ( S2KAccountParamsTest . S2KtestZUndGetNonceZUndtrue ( ) => #abiCallData ( "test_GetNonce_true" , .TypedArgs ) ) - - - rule ( S2KAccountParamsTest . S2KtestZUndNonceZUndExistentAddress ( ) => #abiCallData ( "test_Nonce_ExistentAddress" , .TypedArgs ) ) - - - rule ( S2KAccountParamsTest . S2KtestZUndNonceZUndNonExistentAddress ( ) => #abiCallData ( "test_Nonce_NonExistentAddress" , .TypedArgs ) ) - - - rule ( S2KAccountParamsTest . S2KtestZUndgetNonceZUndunknownSymbolic ( V0_addr : address ) => #abiCallData ( "test_getNonce_unknownSymbolic" , #address ( V0_addr ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_addr ) - - - rule ( S2KAccountParamsTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testDealConcrete()" ) => 530093250 ) - - - rule ( selector ( "testDealSymbolic(uint256)" ) => 2584982624 ) - - - rule ( selector ( "testEtchConcrete()" ) => 807503996 ) - - - rule ( selector ( "testEtchSymbolic(bytes)" ) => 2109411263 ) - - - rule ( selector ( "testFail_GetNonce_false()" ) => 2393877859 ) - - - rule ( selector ( "testFail_GetNonce_true()" ) => 1067907152 ) - - - rule ( selector ( "testNonceSymbolic(uint64)" ) => 1310260491 ) - - - rule ( selector ( "test_GetNonce_false()" ) => 3545243759 ) - - - rule ( selector ( "test_GetNonce_true()" ) => 3968101798 ) - - - rule ( selector ( "test_Nonce_ExistentAddress()" ) => 1598387740 ) - - - rule ( selector ( "test_Nonce_NonExistentAddress()" ) => 2985064833 ) - - - rule ( selector ( "test_getNonce_unknownSymbolic(address)" ) => 3941547284 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module AddrTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KAddrTestContract - - syntax S2KAddrTestContract ::= "S2KAddrTest" [symbol(), klabel(contract_AddrTest)] - - - - syntax Field ::= AddrTestField - - syntax AddrTestField ::= "IS_TEST" [symbol(), klabel(field_AddrTest_IS_TEST)] - - syntax AddrTestField ::= "_failed" [symbol(), klabel(field_AddrTest__failed)] - - syntax AddrTestField ::= "IS_SCRIPT" [symbol(), klabel(field_AddrTest_IS_SCRIPT)] - - syntax AddrTestField ::= "stdstore" [symbol(), klabel(field_AddrTest_stdstore)] - - rule ( #loc ( S2KAddrTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KAddrTest . _failed ) => 0 ) - - - rule ( #loc ( S2KAddrTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KAddrTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KAddrTestContract "." S2KAddrTestMethod [function(), symbol(), klabel(method_AddrTest)] - - syntax S2KAddrTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_AddrTest_S2KISZUndSCRIPT_)] - - syntax S2KAddrTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_AddrTest_S2KISZUndTEST_)] - - syntax S2KAddrTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_AddrTest_S2Kfailed_)] - - syntax S2KAddrTestMethod ::= "S2Kkevm" "(" ")" [symbol(), klabel(method_AddrTest_S2Kkevm_)] - - syntax S2KAddrTestMethod ::= "S2KtestFailZUndaddrZUndfalse" "(" ")" [symbol(), klabel(method_AddrTest_S2KtestFailZUndaddrZUndfalse_)] - - syntax S2KAddrTestMethod ::= "S2KtestFailZUndaddrZUndtrue" "(" ")" [symbol(), klabel(method_AddrTest_S2KtestFailZUndaddrZUndtrue_)] - - syntax S2KAddrTestMethod ::= "S2KtestZUndaddrZUndfalse" "(" ")" [symbol(), klabel(method_AddrTest_S2KtestZUndaddrZUndfalse_)] - - syntax S2KAddrTestMethod ::= "S2KtestZUndaddrZUndsymbolic" "(" Int ":" "uint256" ")" [symbol(), klabel(method_AddrTest_S2KtestZUndaddrZUndsymbolic_uint256)] - - syntax S2KAddrTestMethod ::= "S2KtestZUndaddrZUndtrue" "(" ")" [symbol(), klabel(method_AddrTest_S2KtestZUndaddrZUndtrue_)] - - syntax S2KAddrTestMethod ::= "S2KtestZUndbuiltInAddresses" "(" ")" [symbol(), klabel(method_AddrTest_S2KtestZUndbuiltInAddresses_)] - - syntax S2KAddrTestMethod ::= "S2KtestZUndnotBuiltinAddressZUndconcrete" "(" ")" [symbol(), klabel(method_AddrTest_S2KtestZUndnotBuiltinAddressZUndconcrete_)] - - syntax S2KAddrTestMethod ::= "S2KtestZUndnotBuiltinAddressZUndsymbolic" "(" Int ":" "address" ")" [symbol(), klabel(method_AddrTest_S2KtestZUndnotBuiltinAddressZUndsymbolic_address)] - - syntax S2KAddrTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_AddrTest_S2Kvm_)] - - rule ( S2KAddrTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KAddrTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KAddrTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KAddrTest . S2Kkevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( S2KAddrTest . S2KtestFailZUndaddrZUndfalse ( ) => #abiCallData ( "testFail_addr_false" , .TypedArgs ) ) - - - rule ( S2KAddrTest . S2KtestFailZUndaddrZUndtrue ( ) => #abiCallData ( "testFail_addr_true" , .TypedArgs ) ) - - - rule ( S2KAddrTest . S2KtestZUndaddrZUndfalse ( ) => #abiCallData ( "test_addr_false" , .TypedArgs ) ) - - - rule ( S2KAddrTest . S2KtestZUndaddrZUndsymbolic ( V0_pk : uint256 ) => #abiCallData ( "test_addr_symbolic" , #uint256 ( V0_pk ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_pk ) - - - rule ( S2KAddrTest . S2KtestZUndaddrZUndtrue ( ) => #abiCallData ( "test_addr_true" , .TypedArgs ) ) - - - rule ( S2KAddrTest . S2KtestZUndbuiltInAddresses ( ) => #abiCallData ( "test_builtInAddresses" , .TypedArgs ) ) - - - rule ( S2KAddrTest . S2KtestZUndnotBuiltinAddressZUndconcrete ( ) => #abiCallData ( "test_notBuiltinAddress_concrete" , .TypedArgs ) ) - - - rule ( S2KAddrTest . S2KtestZUndnotBuiltinAddressZUndsymbolic ( V0_addr : address ) => #abiCallData ( "test_notBuiltinAddress_symbolic" , #address ( V0_addr ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_addr ) - - - rule ( S2KAddrTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - - rule ( selector ( "testFail_addr_false()" ) => 3302866643 ) - - - rule ( selector ( "testFail_addr_true()" ) => 2486005453 ) - - - rule ( selector ( "test_addr_false()" ) => 4124294109 ) - - - rule ( selector ( "test_addr_symbolic(uint256)" ) => 3071220939 ) - - - rule ( selector ( "test_addr_true()" ) => 809049819 ) - - - rule ( selector ( "test_builtInAddresses()" ) => 3220291840 ) - - - rule ( selector ( "test_notBuiltinAddress_concrete()" ) => 2409208231 ) - - - rule ( selector ( "test_notBuiltinAddress_symbolic(address)" ) => 2160641203 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module AllowChangesTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KAllowChangesTestContract - - syntax S2KAllowChangesTestContract ::= "S2KAllowChangesTest" [symbol(), klabel(contract_AllowChangesTest)] - - - - syntax Field ::= AllowChangesTestField - - syntax AllowChangesTestField ::= "IS_TEST" [symbol(), klabel(field_AllowChangesTest_IS_TEST)] - - syntax AllowChangesTestField ::= "_failed" [symbol(), klabel(field_AllowChangesTest__failed)] - - syntax AllowChangesTestField ::= "IS_SCRIPT" [symbol(), klabel(field_AllowChangesTest_IS_SCRIPT)] - - syntax AllowChangesTestField ::= "stdstore" [symbol(), klabel(field_AllowChangesTest_stdstore)] - - rule ( #loc ( S2KAllowChangesTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KAllowChangesTest . _failed ) => 0 ) - - - rule ( #loc ( S2KAllowChangesTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KAllowChangesTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KAllowChangesTestContract "." S2KAllowChangesTestMethod [function(), symbol(), klabel(method_AllowChangesTest)] - - syntax S2KAllowChangesTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_AllowChangesTest_S2KISZUndSCRIPT_)] - - syntax S2KAllowChangesTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_AllowChangesTest_S2KISZUndTEST_)] - - syntax S2KAllowChangesTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_AllowChangesTest_S2Kfailed_)] - - syntax S2KAllowChangesTestMethod ::= "S2Kkevm" "(" ")" [symbol(), klabel(method_AllowChangesTest_S2Kkevm_)] - - syntax S2KAllowChangesTestMethod ::= "S2Ktest" "(" ")" [symbol(), klabel(method_AllowChangesTest_S2Ktest_)] - - syntax S2KAllowChangesTestMethod ::= "S2KtestAllow" "(" ")" [symbol(), klabel(method_AllowChangesTest_S2KtestAllow_)] - - syntax S2KAllowChangesTestMethod ::= "S2KtestAllowZUndfail" "(" ")" [symbol(), klabel(method_AllowChangesTest_S2KtestAllowZUndfail_)] - - syntax S2KAllowChangesTestMethod ::= "S2KtestFailAllowCallsToAddress" "(" ")" [symbol(), klabel(method_AllowChangesTest_S2KtestFailAllowCallsToAddress_)] - - syntax S2KAllowChangesTestMethod ::= "S2KtestFailAllowChangesToStorage" "(" ")" [symbol(), klabel(method_AllowChangesTest_S2KtestFailAllowChangesToStorage_)] - - syntax S2KAllowChangesTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_AllowChangesTest_S2Kvm_)] - - rule ( S2KAllowChangesTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KAllowChangesTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KAllowChangesTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KAllowChangesTest . S2Kkevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( S2KAllowChangesTest . S2Ktest ( ) => #abiCallData ( "test" , .TypedArgs ) ) - - - rule ( S2KAllowChangesTest . S2KtestAllow ( ) => #abiCallData ( "testAllow" , .TypedArgs ) ) - - - rule ( S2KAllowChangesTest . S2KtestAllowZUndfail ( ) => #abiCallData ( "testAllow_fail" , .TypedArgs ) ) - - - rule ( S2KAllowChangesTest . S2KtestFailAllowCallsToAddress ( ) => #abiCallData ( "testFailAllowCallsToAddress" , .TypedArgs ) ) - - - rule ( S2KAllowChangesTest . S2KtestFailAllowChangesToStorage ( ) => #abiCallData ( "testFailAllowChangesToStorage" , .TypedArgs ) ) - - - rule ( S2KAllowChangesTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - - rule ( selector ( "test()" ) => 4171824493 ) - - - rule ( selector ( "testAllow()" ) => 3693132891 ) - - - rule ( selector ( "testAllow_fail()" ) => 4129570225 ) - - - rule ( selector ( "testFailAllowCallsToAddress()" ) => 1262828121 ) - - - rule ( selector ( "testFailAllowChangesToStorage()" ) => 1529992487 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module ValueStore-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KValueStoreContract - - syntax S2KValueStoreContract ::= "S2KValueStore" [symbol(), klabel(contract_ValueStore)] - - - - syntax Field ::= ValueStoreField - - syntax ValueStoreField ::= "value1" [symbol(), klabel(field_ValueStore_value1)] - - syntax ValueStoreField ::= "value2" [symbol(), klabel(field_ValueStore_value2)] - - rule ( #loc ( S2KValueStore . value1 ) => 0 ) - - - rule ( #loc ( S2KValueStore . value2 ) => 1 ) - - - syntax Bytes ::= S2KValueStoreContract "." S2KValueStoreMethod [function(), symbol(), klabel(method_ValueStore)] - - syntax S2KValueStoreMethod ::= "S2KchangeValue1" "(" Int ":" "uint256" ")" [symbol(), klabel(method_ValueStore_S2KchangeValue1_uint256)] - - syntax S2KValueStoreMethod ::= "S2KchangeValue2" "(" Int ":" "uint256" ")" [symbol(), klabel(method_ValueStore_S2KchangeValue2_uint256)] - - syntax S2KValueStoreMethod ::= "S2Kvalue1" "(" ")" [symbol(), klabel(method_ValueStore_S2Kvalue1_)] - - syntax S2KValueStoreMethod ::= "S2Kvalue2" "(" ")" [symbol(), klabel(method_ValueStore_S2Kvalue2_)] - - rule ( S2KValueStore . S2KchangeValue1 ( V0_newValue : uint256 ) => #abiCallData ( "changeValue1" , #uint256 ( V0_newValue ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_newValue ) - - - rule ( S2KValueStore . S2KchangeValue2 ( V0_newValue : uint256 ) => #abiCallData ( "changeValue2" , #uint256 ( V0_newValue ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_newValue ) - - - rule ( S2KValueStore . S2Kvalue1 ( ) => #abiCallData ( "value1" , .TypedArgs ) ) - - - rule ( S2KValueStore . S2Kvalue2 ( ) => #abiCallData ( "value2" , .TypedArgs ) ) - - - rule ( selector ( "changeValue1(uint256)" ) => 1634438405 ) - - - rule ( selector ( "changeValue2(uint256)" ) => 367426214 ) - - - rule ( selector ( "value1()" ) => 808665403 ) - - - rule ( selector ( "value2()" ) => 1563665023 ) - - -endmodule - -module ArithmeticTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KArithmeticTestContract - - syntax S2KArithmeticTestContract ::= "S2KArithmeticTest" [symbol(), klabel(contract_ArithmeticTest)] - - - - syntax Field ::= ArithmeticTestField - - syntax ArithmeticTestField ::= "IS_TEST" [symbol(), klabel(field_ArithmeticTest_IS_TEST)] - - syntax ArithmeticTestField ::= "_failed" [symbol(), klabel(field_ArithmeticTest__failed)] - - syntax ArithmeticTestField ::= "IS_SCRIPT" [symbol(), klabel(field_ArithmeticTest_IS_SCRIPT)] - - syntax ArithmeticTestField ::= "stdstore" [symbol(), klabel(field_ArithmeticTest_stdstore)] - - rule ( #loc ( S2KArithmeticTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KArithmeticTest . _failed ) => 0 ) - - - rule ( #loc ( S2KArithmeticTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KArithmeticTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KArithmeticTestContract "." S2KArithmeticTestMethod [function(), symbol(), klabel(method_ArithmeticTest)] - - syntax S2KArithmeticTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_ArithmeticTest_S2KISZUndSCRIPT_)] - - syntax S2KArithmeticTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_ArithmeticTest_S2KISZUndTEST_)] - - syntax S2KArithmeticTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_ArithmeticTest_S2Kfailed_)] - - syntax S2KArithmeticTestMethod ::= "S2KtestZUnddecreasingZUnddiv" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_S2KtestZUnddecreasingZUnddiv_uint256_uint256)] - - syntax S2KArithmeticTestMethod ::= "S2KtestZUndmax1" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_S2KtestZUndmax1_uint256_uint256)] - - syntax S2KArithmeticTestMethod ::= "S2KtestZUndmax1ZUndbroken" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_S2KtestZUndmax1ZUndbroken_uint256_uint256)] - - syntax S2KArithmeticTestMethod ::= "S2KtestZUndmax2" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_S2KtestZUndmax2_uint256_uint256)] - - syntax S2KArithmeticTestMethod ::= "S2KtestZUndwdivZUndrounding" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_S2KtestZUndwdivZUndrounding_uint256_uint256)] - - syntax S2KArithmeticTestMethod ::= "S2KtestZUndwmulZUndincreasing" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_S2KtestZUndwmulZUndincreasing_uint256_uint256)] - - syntax S2KArithmeticTestMethod ::= "S2KtestZUndwmulZUndincreasingZUndgtZUndone" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_S2KtestZUndwmulZUndincreasingZUndgtZUndone_uint256_uint256)] - - syntax S2KArithmeticTestMethod ::= "S2KtestZUndwmulZUndincreasingZUndoverflow" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_S2KtestZUndwmulZUndincreasingZUndoverflow_uint256_uint256)] - - syntax S2KArithmeticTestMethod ::= "S2KtestZUndwmulZUndincreasingZUndpositive" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_S2KtestZUndwmulZUndincreasingZUndpositive_uint256_uint256)] - - syntax S2KArithmeticTestMethod ::= "S2KtestZUndwmulZUndrounding" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_S2KtestZUndwmulZUndrounding_uint256_uint256)] - - syntax S2KArithmeticTestMethod ::= "S2KtestZUndwmulZUndwdivZUndinverse" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_S2KtestZUndwmulZUndwdivZUndinverse_uint256_uint256)] - - syntax S2KArithmeticTestMethod ::= "S2KtestZUndwmulZUndwdivZUndinverseZUndunderflow" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_S2KtestZUndwmulZUndwdivZUndinverseZUndunderflow_uint256_uint256)] - - syntax S2KArithmeticTestMethod ::= "S2KtestZUndwmulZUndweaklyZUndincreasingZUndpositive" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_S2KtestZUndwmulZUndweaklyZUndincreasingZUndpositive_uint256_uint256)] - - syntax S2KArithmeticTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_ArithmeticTest_S2Kvm_)] - - rule ( S2KArithmeticTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KArithmeticTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KArithmeticTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KArithmeticTest . S2KtestZUnddecreasingZUnddiv ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_decreasing_div" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KArithmeticTest . S2KtestZUndmax1 ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_max1" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KArithmeticTest . S2KtestZUndmax1ZUndbroken ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_max1_broken" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KArithmeticTest . S2KtestZUndmax2 ( V0_x : uint256 , V1_y : uint256 ) => #abiCallData ( "test_max2" , #uint256 ( V0_x ) , #uint256 ( V1_y ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_x ) - andBool ( #rangeUInt ( 256 , V1_y ) - )) - - - rule ( S2KArithmeticTest . S2KtestZUndwdivZUndrounding ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wdiv_rounding" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KArithmeticTest . S2KtestZUndwmulZUndincreasing ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_increasing" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KArithmeticTest . S2KtestZUndwmulZUndincreasingZUndgtZUndone ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_increasing_gt_one" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KArithmeticTest . S2KtestZUndwmulZUndincreasingZUndoverflow ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_increasing_overflow" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KArithmeticTest . S2KtestZUndwmulZUndincreasingZUndpositive ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_increasing_positive" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KArithmeticTest . S2KtestZUndwmulZUndrounding ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_rounding" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KArithmeticTest . S2KtestZUndwmulZUndwdivZUndinverse ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_wdiv_inverse" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KArithmeticTest . S2KtestZUndwmulZUndwdivZUndinverseZUndunderflow ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_wdiv_inverse_underflow" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KArithmeticTest . S2KtestZUndwmulZUndweaklyZUndincreasingZUndpositive ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_weakly_increasing_positive" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KArithmeticTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "test_decreasing_div(uint256,uint256)" ) => 1011519306 ) - - - rule ( selector ( "test_max1(uint256,uint256)" ) => 1625765100 ) - - - rule ( selector ( "test_max1_broken(uint256,uint256)" ) => 2809107068 ) - - - rule ( selector ( "test_max2(uint256,uint256)" ) => 434746443 ) - - - rule ( selector ( "test_wdiv_rounding(uint256,uint256)" ) => 345004095 ) - - - rule ( selector ( "test_wmul_increasing(uint256,uint256)" ) => 2784670501 ) - - - rule ( selector ( "test_wmul_increasing_gt_one(uint256,uint256)" ) => 899022695 ) - - - rule ( selector ( "test_wmul_increasing_overflow(uint256,uint256)" ) => 1123042280 ) - - - rule ( selector ( "test_wmul_increasing_positive(uint256,uint256)" ) => 490103800 ) - - - rule ( selector ( "test_wmul_rounding(uint256,uint256)" ) => 4261140569 ) - - - rule ( selector ( "test_wmul_wdiv_inverse(uint256,uint256)" ) => 3719613508 ) - - - rule ( selector ( "test_wmul_wdiv_inverse_underflow(uint256,uint256)" ) => 2736038219 ) - - - rule ( selector ( "test_wmul_weakly_increasing_positive(uint256,uint256)" ) => 1421647895 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module AssumeTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KAssumeTestContract - - syntax S2KAssumeTestContract ::= "S2KAssumeTest" [symbol(), klabel(contract_AssumeTest)] - - - - syntax Field ::= AssumeTestField - - syntax AssumeTestField ::= "IS_TEST" [symbol(), klabel(field_AssumeTest_IS_TEST)] - - syntax AssumeTestField ::= "_failed" [symbol(), klabel(field_AssumeTest__failed)] - - syntax AssumeTestField ::= "IS_SCRIPT" [symbol(), klabel(field_AssumeTest_IS_SCRIPT)] - - syntax AssumeTestField ::= "stdstore" [symbol(), klabel(field_AssumeTest_stdstore)] - - rule ( #loc ( S2KAssumeTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KAssumeTest . _failed ) => 0 ) - - - rule ( #loc ( S2KAssumeTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KAssumeTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KAssumeTestContract "." S2KAssumeTestMethod [function(), symbol(), klabel(method_AssumeTest)] - - syntax S2KAssumeTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_AssumeTest_S2KISZUndSCRIPT_)] - - syntax S2KAssumeTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_AssumeTest_S2KISZUndTEST_)] - - syntax S2KAssumeTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_AssumeTest_S2Kfailed_)] - - syntax S2KAssumeTestMethod ::= "S2KtestFailZUndassumeZUndfalse" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_AssumeTest_S2KtestFailZUndassumeZUndfalse_uint256_uint256)] - - syntax S2KAssumeTestMethod ::= "S2KtestFailZUndassumeZUndtrue" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_AssumeTest_S2KtestFailZUndassumeZUndtrue_uint256_uint256)] - - syntax S2KAssumeTestMethod ::= "S2KtestZUndassumeZUndfalse" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_AssumeTest_S2KtestZUndassumeZUndfalse_uint256_uint256)] - - syntax S2KAssumeTestMethod ::= "S2KtestZUndassumeZUndstaticCall" "(" Int ":" "bool" ")" [symbol(), klabel(method_AssumeTest_S2KtestZUndassumeZUndstaticCall_bool)] - - syntax S2KAssumeTestMethod ::= "S2KtestZUndassumeZUndtrue" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_AssumeTest_S2KtestZUndassumeZUndtrue_uint256_uint256)] - - syntax S2KAssumeTestMethod ::= "S2KtestZUndmultiZUndassume" "(" Int ":" "address" "," Int ":" "address" ")" [symbol(), klabel(method_AssumeTest_S2KtestZUndmultiZUndassume_address_address)] - - syntax S2KAssumeTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_AssumeTest_S2Kvm_)] - - rule ( S2KAssumeTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KAssumeTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KAssumeTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KAssumeTest . S2KtestFailZUndassumeZUndfalse ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "testFail_assume_false" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KAssumeTest . S2KtestFailZUndassumeZUndtrue ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "testFail_assume_true" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KAssumeTest . S2KtestZUndassumeZUndfalse ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_assume_false" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KAssumeTest . S2KtestZUndassumeZUndstaticCall ( V0_a : bool ) => #abiCallData ( "test_assume_staticCall" , #bool ( V0_a ) , .TypedArgs ) ) - ensures #rangeBool ( V0_a ) - - - rule ( S2KAssumeTest . S2KtestZUndassumeZUndtrue ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_assume_true" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( S2KAssumeTest . S2KtestZUndmultiZUndassume ( V0_alice : address , V1_bob : address ) => #abiCallData ( "test_multi_assume" , #address ( V0_alice ) , #address ( V1_bob ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_alice ) - andBool ( #rangeAddress ( V1_bob ) - )) - - - rule ( S2KAssumeTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testFail_assume_false(uint256,uint256)" ) => 1596879099 ) - - - rule ( selector ( "testFail_assume_true(uint256,uint256)" ) => 246830810 ) - - - rule ( selector ( "test_assume_false(uint256,uint256)" ) => 3827036084 ) - - - rule ( selector ( "test_assume_staticCall(bool)" ) => 1479621703 ) - - - rule ( selector ( "test_assume_true(uint256,uint256)" ) => 1861181564 ) - - - rule ( selector ( "test_multi_assume(address,address)" ) => 2625007844 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module BMCLoopsTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KBMCLoopsTestContract - - syntax S2KBMCLoopsTestContract ::= "S2KBMCLoopsTest" [symbol(), klabel(contract_BMCLoopsTest)] - - - - syntax Field ::= BMCLoopsTestField - - syntax BMCLoopsTestField ::= "IS_TEST" [symbol(), klabel(field_BMCLoopsTest_IS_TEST)] - - syntax BMCLoopsTestField ::= "_failed" [symbol(), klabel(field_BMCLoopsTest__failed)] - - syntax BMCLoopsTestField ::= "IS_SCRIPT" [symbol(), klabel(field_BMCLoopsTest_IS_SCRIPT)] - - syntax BMCLoopsTestField ::= "stdstore" [symbol(), klabel(field_BMCLoopsTest_stdstore)] - - rule ( #loc ( S2KBMCLoopsTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KBMCLoopsTest . _failed ) => 0 ) - - - rule ( #loc ( S2KBMCLoopsTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KBMCLoopsTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KBMCLoopsTestContract "." S2KBMCLoopsTestMethod [function(), symbol(), klabel(method_BMCLoopsTest)] - - syntax S2KBMCLoopsTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_BMCLoopsTest_S2KISZUndSCRIPT_)] - - syntax S2KBMCLoopsTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_BMCLoopsTest_S2KISZUndTEST_)] - - syntax S2KBMCLoopsTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_BMCLoopsTest_S2Kfailed_)] - - syntax S2KBMCLoopsTestMethod ::= "S2KtestZUndbmc" "(" Int ":" "uint256" ")" [symbol(), klabel(method_BMCLoopsTest_S2KtestZUndbmc_uint256)] - - syntax S2KBMCLoopsTestMethod ::= "S2KtestZUndcountdownZUndconcrete" "(" ")" [symbol(), klabel(method_BMCLoopsTest_S2KtestZUndcountdownZUndconcrete_)] - - syntax S2KBMCLoopsTestMethod ::= "S2KtestZUndcountdownZUndsymbolic" "(" Int ":" "uint256" ")" [symbol(), klabel(method_BMCLoopsTest_S2KtestZUndcountdownZUndsymbolic_uint256)] - - syntax S2KBMCLoopsTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_BMCLoopsTest_S2Kvm_)] - - rule ( S2KBMCLoopsTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KBMCLoopsTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KBMCLoopsTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KBMCLoopsTest . S2KtestZUndbmc ( V0_n : uint256 ) => #abiCallData ( "test_bmc" , #uint256 ( V0_n ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_n ) - - - rule ( S2KBMCLoopsTest . S2KtestZUndcountdownZUndconcrete ( ) => #abiCallData ( "test_countdown_concrete" , .TypedArgs ) ) - - - rule ( S2KBMCLoopsTest . S2KtestZUndcountdownZUndsymbolic ( V0_n : uint256 ) => #abiCallData ( "test_countdown_symbolic" , #uint256 ( V0_n ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_n ) - - - rule ( S2KBMCLoopsTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "test_bmc(uint256)" ) => 2531276689 ) - - - rule ( selector ( "test_countdown_concrete()" ) => 1189516988 ) - - - rule ( selector ( "test_countdown_symbolic(uint256)" ) => 3183316184 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module BlockParamsTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KBlockParamsTestContract - - syntax S2KBlockParamsTestContract ::= "S2KBlockParamsTest" [symbol(), klabel(contract_BlockParamsTest)] - - - - syntax Field ::= BlockParamsTestField - - syntax BlockParamsTestField ::= "IS_TEST" [symbol(), klabel(field_BlockParamsTest_IS_TEST)] - - syntax BlockParamsTestField ::= "_failed" [symbol(), klabel(field_BlockParamsTest__failed)] - - syntax BlockParamsTestField ::= "IS_SCRIPT" [symbol(), klabel(field_BlockParamsTest_IS_SCRIPT)] - - syntax BlockParamsTestField ::= "stdstore" [symbol(), klabel(field_BlockParamsTest_stdstore)] - - rule ( #loc ( S2KBlockParamsTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KBlockParamsTest . _failed ) => 0 ) - - - rule ( #loc ( S2KBlockParamsTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KBlockParamsTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KBlockParamsTestContract "." S2KBlockParamsTestMethod [function(), symbol(), klabel(method_BlockParamsTest)] - - syntax S2KBlockParamsTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_BlockParamsTest_S2KISZUndSCRIPT_)] - - syntax S2KBlockParamsTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_BlockParamsTest_S2KISZUndTEST_)] - - syntax S2KBlockParamsTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_BlockParamsTest_S2Kfailed_)] - - syntax S2KBlockParamsTestMethod ::= "S2KtestBlockNumber" "(" ")" [symbol(), klabel(method_BlockParamsTest_S2KtestBlockNumber_)] - - syntax S2KBlockParamsTestMethod ::= "S2KtestChainId" "(" Int ":" "uint256" ")" [symbol(), klabel(method_BlockParamsTest_S2KtestChainId_uint256)] - - syntax S2KBlockParamsTestMethod ::= "S2KtestCoinBase" "(" ")" [symbol(), klabel(method_BlockParamsTest_S2KtestCoinBase_)] - - syntax S2KBlockParamsTestMethod ::= "S2KtestFee" "(" Int ":" "uint256" ")" [symbol(), klabel(method_BlockParamsTest_S2KtestFee_uint256)] - - syntax S2KBlockParamsTestMethod ::= "S2KtestRoll" "(" Int ":" "uint256" ")" [symbol(), klabel(method_BlockParamsTest_S2KtestRoll_uint256)] - - syntax S2KBlockParamsTestMethod ::= "S2KtestWarp" "(" Int ":" "uint256" ")" [symbol(), klabel(method_BlockParamsTest_S2KtestWarp_uint256)] - - syntax S2KBlockParamsTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_BlockParamsTest_S2Kvm_)] - - rule ( S2KBlockParamsTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KBlockParamsTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KBlockParamsTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KBlockParamsTest . S2KtestBlockNumber ( ) => #abiCallData ( "testBlockNumber" , .TypedArgs ) ) - - - rule ( S2KBlockParamsTest . S2KtestChainId ( V0_newChainId : uint256 ) => #abiCallData ( "testChainId" , #uint256 ( V0_newChainId ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_newChainId ) - - - rule ( S2KBlockParamsTest . S2KtestCoinBase ( ) => #abiCallData ( "testCoinBase" , .TypedArgs ) ) - - - rule ( S2KBlockParamsTest . S2KtestFee ( V0_newFee : uint256 ) => #abiCallData ( "testFee" , #uint256 ( V0_newFee ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_newFee ) - - - rule ( S2KBlockParamsTest . S2KtestRoll ( V0_newHeight : uint256 ) => #abiCallData ( "testRoll" , #uint256 ( V0_newHeight ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_newHeight ) - - - rule ( S2KBlockParamsTest . S2KtestWarp ( V0_time : uint256 ) => #abiCallData ( "testWarp" , #uint256 ( V0_time ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_time ) - - - rule ( S2KBlockParamsTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testBlockNumber()" ) => 3916490861 ) - - - rule ( selector ( "testChainId(uint256)" ) => 486990902 ) - - - rule ( selector ( "testCoinBase()" ) => 2231467180 ) - - - rule ( selector ( "testFee(uint256)" ) => 687351365 ) - - - rule ( selector ( "testRoll(uint256)" ) => 3832502715 ) - - - rule ( selector ( "testWarp(uint256)" ) => 1957961066 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module BroadcastTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KBroadcastTestContract - - syntax S2KBroadcastTestContract ::= "S2KBroadcastTest" [symbol(), klabel(contract_BroadcastTest)] - - - - syntax Field ::= BroadcastTestField - - syntax BroadcastTestField ::= "IS_TEST" [symbol(), klabel(field_BroadcastTest_IS_TEST)] - - syntax BroadcastTestField ::= "_failed" [symbol(), klabel(field_BroadcastTest__failed)] - - syntax BroadcastTestField ::= "IS_SCRIPT" [symbol(), klabel(field_BroadcastTest_IS_SCRIPT)] - - syntax BroadcastTestField ::= "stdstore" [symbol(), klabel(field_BroadcastTest_stdstore)] - - syntax BroadcastTestField ::= "ACCOUNT_A" [symbol(), klabel(field_BroadcastTest_ACCOUNT_A)] - - syntax BroadcastTestField ::= "ACCOUNT_B" [symbol(), klabel(field_BroadcastTest_ACCOUNT_B)] - - rule ( #loc ( S2KBroadcastTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KBroadcastTest . _failed ) => 0 ) - - - rule ( #loc ( S2KBroadcastTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KBroadcastTest . stdstore ) => 1 ) - - - rule ( #loc ( S2KBroadcastTest . ACCOUNT_A ) => 8 ) - - - rule ( #loc ( S2KBroadcastTest . ACCOUNT_B ) => 9 ) - - - syntax Bytes ::= S2KBroadcastTestContract "." S2KBroadcastTestMethod [function(), symbol(), klabel(method_BroadcastTest)] - - syntax S2KBroadcastTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_BroadcastTest_S2KISZUndSCRIPT_)] - - syntax S2KBroadcastTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_BroadcastTest_S2KISZUndTEST_)] - - syntax S2KBroadcastTestMethod ::= "S2KdeployNoArgs" "(" ")" [symbol(), klabel(method_BroadcastTest_S2KdeployNoArgs_)] - - syntax S2KBroadcastTestMethod ::= "S2KdeployOther" "(" ")" [symbol(), klabel(method_BroadcastTest_S2KdeployOther_)] - - syntax S2KBroadcastTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_BroadcastTest_S2Kfailed_)] - - syntax S2KBroadcastTestMethod ::= "S2KsetUp" "(" ")" [symbol(), klabel(method_BroadcastTest_S2KsetUp_)] - - syntax S2KBroadcastTestMethod ::= "S2KtestDeploy" "(" ")" [symbol(), klabel(method_BroadcastTest_S2KtestDeploy_)] - - syntax S2KBroadcastTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_BroadcastTest_S2Kvm_)] - - rule ( S2KBroadcastTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KBroadcastTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KBroadcastTest . S2KdeployNoArgs ( ) => #abiCallData ( "deployNoArgs" , .TypedArgs ) ) - - - rule ( S2KBroadcastTest . S2KdeployOther ( ) => #abiCallData ( "deployOther" , .TypedArgs ) ) - - - rule ( S2KBroadcastTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KBroadcastTest . S2KsetUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( S2KBroadcastTest . S2KtestDeploy ( ) => #abiCallData ( "testDeploy" , .TypedArgs ) ) - - - rule ( S2KBroadcastTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "deployNoArgs()" ) => 1902058844 ) - - - rule ( selector ( "deployOther()" ) => 4254441026 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testDeploy()" ) => 894117685 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Constants-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KConstantsContract - - syntax S2KConstantsContract ::= "S2KConstants" [symbol(), klabel(contract_Constants)] - - - -endmodule - -module Contract-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KContractContract - - syntax S2KContractContract ::= "S2KContract" [symbol(), klabel(contract_Contract)] - - - -endmodule - -module ContractTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KContractTestContract - - syntax S2KContractTestContract ::= "S2KContractTest" [symbol(), klabel(contract_ContractTest)] - - - - syntax Field ::= ContractTestField - - syntax ContractTestField ::= "IS_TEST" [symbol(), klabel(field_ContractTest_IS_TEST)] - - syntax ContractTestField ::= "_failed" [symbol(), klabel(field_ContractTest__failed)] - - syntax ContractTestField ::= "IS_SCRIPT" [symbol(), klabel(field_ContractTest_IS_SCRIPT)] - - syntax ContractTestField ::= "stdstore" [symbol(), klabel(field_ContractTest_stdstore)] - - rule ( #loc ( S2KContractTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KContractTest . _failed ) => 0 ) - - - rule ( #loc ( S2KContractTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KContractTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KContractTestContract "." S2KContractTestMethod [function(), symbol(), klabel(method_ContractTest)] - - syntax S2KContractTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_ContractTest_S2KISZUndSCRIPT_)] - - syntax S2KContractTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_ContractTest_S2KISZUndTEST_)] - - syntax S2KContractTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_ContractTest_S2Kfailed_)] - - syntax S2KContractTestMethod ::= "S2KtestExample" "(" ")" [symbol(), klabel(method_ContractTest_S2KtestExample_)] - - syntax S2KContractTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_ContractTest_S2Kvm_)] - - rule ( S2KContractTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KContractTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KContractTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KContractTest . S2KtestExample ( ) => #abiCallData ( "testExample" , .TypedArgs ) ) - - - rule ( S2KContractTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testExample()" ) => 1062881834 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module ContractBTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KContractBTestContract - - syntax S2KContractBTestContract ::= "S2KContractBTest" [symbol(), klabel(contract_ContractBTest)] - - - - syntax Field ::= ContractBTestField - - syntax ContractBTestField ::= "IS_TEST" [symbol(), klabel(field_ContractBTest_IS_TEST)] - - syntax ContractBTestField ::= "_failed" [symbol(), klabel(field_ContractBTest__failed)] - - syntax ContractBTestField ::= "IS_SCRIPT" [symbol(), klabel(field_ContractBTest_IS_SCRIPT)] - - syntax ContractBTestField ::= "stdstore" [symbol(), klabel(field_ContractBTest_stdstore)] - - syntax ContractBTestField ::= "testNumber" [symbol(), klabel(field_ContractBTest_testNumber)] - - rule ( #loc ( S2KContractBTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KContractBTest . _failed ) => 0 ) - - - rule ( #loc ( S2KContractBTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KContractBTest . stdstore ) => 1 ) - - - rule ( #loc ( S2KContractBTest . testNumber ) => 8 ) - - - syntax Bytes ::= S2KContractBTestContract "." S2KContractBTestMethod [function(), symbol(), klabel(method_ContractBTest)] - - syntax S2KContractBTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_ContractBTest_S2KISZUndSCRIPT_)] - - syntax S2KContractBTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_ContractBTest_S2KISZUndTEST_)] - - syntax S2KContractBTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_ContractBTest_S2Kfailed_)] - - syntax S2KContractBTestMethod ::= "S2KsetUp" "(" ")" [symbol(), klabel(method_ContractBTest_S2KsetUp_)] - - syntax S2KContractBTestMethod ::= "S2KtestCannotSubtract43" "(" ")" [symbol(), klabel(method_ContractBTest_S2KtestCannotSubtract43_)] - - syntax S2KContractBTestMethod ::= "S2KtestFailSubtract43" "(" ")" [symbol(), klabel(method_ContractBTest_S2KtestFailSubtract43_)] - - syntax S2KContractBTestMethod ::= "S2KtestNumberIs42" "(" ")" [symbol(), klabel(method_ContractBTest_S2KtestNumberIs42_)] - - syntax S2KContractBTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_ContractBTest_S2Kvm_)] - - rule ( S2KContractBTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KContractBTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KContractBTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KContractBTest . S2KsetUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( S2KContractBTest . S2KtestCannotSubtract43 ( ) => #abiCallData ( "testCannotSubtract43" , .TypedArgs ) ) - - - rule ( S2KContractBTest . S2KtestFailSubtract43 ( ) => #abiCallData ( "testFailSubtract43" , .TypedArgs ) ) - - - rule ( S2KContractBTest . S2KtestNumberIs42 ( ) => #abiCallData ( "testNumberIs42" , .TypedArgs ) ) - - - rule ( S2KContractBTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testCannotSubtract43()" ) => 932201548 ) - - - rule ( selector ( "testFailSubtract43()" ) => 1021814620 ) - - - rule ( selector ( "testNumberIs42()" ) => 795542700 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Counter-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KCounterContract - - syntax S2KCounterContract ::= "S2KCounter" [symbol(), klabel(contract_Counter)] - - - - syntax Field ::= CounterField - - syntax CounterField ::= "number" [symbol(), klabel(field_Counter_number)] - - rule ( #loc ( S2KCounter . number ) => 0 ) - - - syntax Bytes ::= S2KCounterContract "." S2KCounterMethod [function(), symbol(), klabel(method_Counter)] - - syntax S2KCounterMethod ::= "S2Kincrement" "(" ")" [symbol(), klabel(method_Counter_S2Kincrement_)] - - syntax S2KCounterMethod ::= "S2Knumber" "(" ")" [symbol(), klabel(method_Counter_S2Knumber_)] - - syntax S2KCounterMethod ::= "S2KsetNumber" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Counter_S2KsetNumber_uint256)] - - rule ( S2KCounter . S2Kincrement ( ) => #abiCallData ( "increment" , .TypedArgs ) ) - - - rule ( S2KCounter . S2Knumber ( ) => #abiCallData ( "number" , .TypedArgs ) ) - - - rule ( S2KCounter . S2KsetNumber ( V0_newNumber : uint256 ) => #abiCallData ( "setNumber" , #uint256 ( V0_newNumber ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_newNumber ) - - - rule ( selector ( "increment()" ) => 3500007562 ) - - - rule ( selector ( "number()" ) => 2206332298 ) - - - rule ( selector ( "setNumber(uint256)" ) => 1068876235 ) - - -endmodule - -module CounterTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KCounterTestContract - - syntax S2KCounterTestContract ::= "S2KCounterTest" [symbol(), klabel(contract_CounterTest)] - - - - syntax Field ::= CounterTestField - - syntax CounterTestField ::= "IS_TEST" [symbol(), klabel(field_CounterTest_IS_TEST)] - - syntax CounterTestField ::= "_failed" [symbol(), klabel(field_CounterTest__failed)] - - syntax CounterTestField ::= "IS_SCRIPT" [symbol(), klabel(field_CounterTest_IS_SCRIPT)] - - syntax CounterTestField ::= "stdstore" [symbol(), klabel(field_CounterTest_stdstore)] - - syntax CounterTestField ::= "counter" [symbol(), klabel(field_CounterTest_counter)] - - rule ( #loc ( S2KCounterTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KCounterTest . _failed ) => 0 ) - - - rule ( #loc ( S2KCounterTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KCounterTest . stdstore ) => 1 ) - - - rule ( #loc ( S2KCounterTest . counter ) => 8 ) - - - syntax Bytes ::= S2KCounterTestContract "." S2KCounterTestMethod [function(), symbol(), klabel(method_CounterTest)] - - syntax S2KCounterTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_CounterTest_S2KISZUndSCRIPT_)] - - syntax S2KCounterTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_CounterTest_S2KISZUndTEST_)] - - syntax S2KCounterTestMethod ::= "S2Kcounter" "(" ")" [symbol(), klabel(method_CounterTest_S2Kcounter_)] - - syntax S2KCounterTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_CounterTest_S2Kfailed_)] - - syntax S2KCounterTestMethod ::= "S2Kkevm" "(" ")" [symbol(), klabel(method_CounterTest_S2Kkevm_)] - - syntax S2KCounterTestMethod ::= "S2KtestIncrement" "(" ")" [symbol(), klabel(method_CounterTest_S2KtestIncrement_)] - - syntax S2KCounterTestMethod ::= "S2KtestSetNumber" "(" Int ":" "uint256" ")" [symbol(), klabel(method_CounterTest_S2KtestSetNumber_uint256)] - - syntax S2KCounterTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_CounterTest_S2Kvm_)] - - rule ( S2KCounterTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KCounterTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KCounterTest . S2Kcounter ( ) => #abiCallData ( "counter" , .TypedArgs ) ) - - - rule ( S2KCounterTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KCounterTest . S2Kkevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( S2KCounterTest . S2KtestIncrement ( ) => #abiCallData ( "testIncrement" , .TypedArgs ) ) - - - rule ( S2KCounterTest . S2KtestSetNumber ( V0_x : uint256 ) => #abiCallData ( "testSetNumber" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( S2KCounterTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "counter()" ) => 1639719450 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - - rule ( selector ( "testIncrement()" ) => 3105072586 ) - - - rule ( selector ( "testSetNumber(uint256)" ) => 1895400894 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module DynamicTypes-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KDynamicTypesContract - - syntax S2KDynamicTypesContract ::= "S2KDynamicTypes" [symbol(), klabel(contract_DynamicTypes)] - - - - syntax Field ::= DynamicTypesField - - syntax DynamicTypesField ::= "IS_TEST" [symbol(), klabel(field_DynamicTypes_IS_TEST)] - - syntax DynamicTypesField ::= "_failed" [symbol(), klabel(field_DynamicTypes__failed)] - - syntax DynamicTypesField ::= "IS_SCRIPT" [symbol(), klabel(field_DynamicTypes_IS_SCRIPT)] - - syntax DynamicTypesField ::= "stdstore" [symbol(), klabel(field_DynamicTypes_stdstore)] - - rule ( #loc ( S2KDynamicTypes . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KDynamicTypes . _failed ) => 0 ) - - - rule ( #loc ( S2KDynamicTypes . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KDynamicTypes . stdstore ) => 1 ) - - - syntax Bytes ::= S2KDynamicTypesContract "." S2KDynamicTypesMethod [function(), symbol(), klabel(method_DynamicTypes)] - - syntax S2KDynamicTypesMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_DynamicTypes_S2KISZUndSCRIPT_)] - - syntax S2KDynamicTypesMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_DynamicTypes_S2KISZUndTEST_)] - - syntax S2KDynamicTypesMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_DynamicTypes_S2Kfailed_)] - - syntax S2KDynamicTypesMethod ::= "S2KtestZUnddynamicZUndbyteZUndread" "(" Bytes ":" "bytes" "," Int ":" "uint256" ")" [symbol(), klabel(method_DynamicTypes_S2KtestZUnddynamicZUndbyteZUndread_bytes_uint256)] - - syntax S2KDynamicTypesMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_DynamicTypes_S2Kvm_)] - - rule ( S2KDynamicTypes . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KDynamicTypes . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KDynamicTypes . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KDynamicTypes . S2KtestZUnddynamicZUndbyteZUndread ( V0_data : bytes , V1_offset : uint256 ) => #abiCallData ( "test_dynamic_byte_read" , #bytes ( V0_data ) , #uint256 ( V1_offset ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 128 , lengthBytes ( V0_data ) ) - andBool ( #rangeUInt ( 256 , V1_offset ) - )) - - - rule ( S2KDynamicTypes . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "test_dynamic_byte_read(bytes,uint256)" ) => 4003228173 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module ExpectEmit-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KExpectEmitContract - - syntax S2KExpectEmitContract ::= "S2KExpectEmit" [symbol(), klabel(contract_ExpectEmit)] - - - - syntax Bytes ::= S2KExpectEmitContract "." S2KExpectEmitMethod [function(), symbol(), klabel(method_ExpectEmit)] - - syntax S2KExpectEmitMethod ::= "S2Kt" "(" ")" [symbol(), klabel(method_ExpectEmit_S2Kt_)] - - rule ( S2KExpectEmit . S2Kt ( ) => #abiCallData ( "t" , .TypedArgs ) ) - - - rule ( selector ( "t()" ) => 2463158611 ) - - -endmodule - -module EmitContractTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KEmitContractTestContract - - syntax S2KEmitContractTestContract ::= "S2KEmitContractTest" [symbol(), klabel(contract_EmitContractTest)] - - - - syntax Field ::= EmitContractTestField - - syntax EmitContractTestField ::= "IS_TEST" [symbol(), klabel(field_EmitContractTest_IS_TEST)] - - syntax EmitContractTestField ::= "_failed" [symbol(), klabel(field_EmitContractTest__failed)] - - syntax EmitContractTestField ::= "IS_SCRIPT" [symbol(), klabel(field_EmitContractTest_IS_SCRIPT)] - - syntax EmitContractTestField ::= "stdstore" [symbol(), klabel(field_EmitContractTest_stdstore)] - - rule ( #loc ( S2KEmitContractTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KEmitContractTest . _failed ) => 0 ) - - - rule ( #loc ( S2KEmitContractTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KEmitContractTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KEmitContractTestContract "." S2KEmitContractTestMethod [function(), symbol(), klabel(method_EmitContractTest)] - - syntax S2KEmitContractTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_EmitContractTest_S2KISZUndSCRIPT_)] - - syntax S2KEmitContractTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_EmitContractTest_S2KISZUndTEST_)] - - syntax S2KEmitContractTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_EmitContractTest_S2Kfailed_)] - - syntax S2KEmitContractTestMethod ::= "S2KtestExpectEmit" "(" ")" [symbol(), klabel(method_EmitContractTest_S2KtestExpectEmit_)] - - syntax S2KEmitContractTestMethod ::= "S2KtestExpectEmitCheckEmitter" "(" ")" [symbol(), klabel(method_EmitContractTest_S2KtestExpectEmitCheckEmitter_)] - - syntax S2KEmitContractTestMethod ::= "S2KtestExpectEmitDoNotCheckData" "(" ")" [symbol(), klabel(method_EmitContractTest_S2KtestExpectEmitDoNotCheckData_)] - - syntax S2KEmitContractTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_EmitContractTest_S2Kvm_)] - - rule ( S2KEmitContractTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KEmitContractTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KEmitContractTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KEmitContractTest . S2KtestExpectEmit ( ) => #abiCallData ( "testExpectEmit" , .TypedArgs ) ) - - - rule ( S2KEmitContractTest . S2KtestExpectEmitCheckEmitter ( ) => #abiCallData ( "testExpectEmitCheckEmitter" , .TypedArgs ) ) - - - rule ( S2KEmitContractTest . S2KtestExpectEmitDoNotCheckData ( ) => #abiCallData ( "testExpectEmitDoNotCheckData" , .TypedArgs ) ) - - - rule ( S2KEmitContractTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testExpectEmit()" ) => 2385562937 ) - - - rule ( selector ( "testExpectEmitCheckEmitter()" ) => 3822672185 ) - - - rule ( selector ( "testExpectEmitDoNotCheckData()" ) => 4244930061 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module EnvTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KEnvTestContract - - syntax S2KEnvTestContract ::= "S2KEnvTest" [symbol(), klabel(contract_EnvTest)] - - - - syntax Field ::= EnvTestField - - syntax EnvTestField ::= "IS_TEST" [symbol(), klabel(field_EnvTest_IS_TEST)] - - syntax EnvTestField ::= "_failed" [symbol(), klabel(field_EnvTest__failed)] - - syntax EnvTestField ::= "IS_SCRIPT" [symbol(), klabel(field_EnvTest_IS_SCRIPT)] - - syntax EnvTestField ::= "stdstore" [symbol(), klabel(field_EnvTest_stdstore)] - - rule ( #loc ( S2KEnvTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KEnvTest . _failed ) => 0 ) - - - rule ( #loc ( S2KEnvTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KEnvTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KEnvTestContract "." S2KEnvTestMethod [function(), symbol(), klabel(method_EnvTest)] - - syntax S2KEnvTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_EnvTest_S2KISZUndSCRIPT_)] - - syntax S2KEnvTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_EnvTest_S2KISZUndTEST_)] - - syntax S2KEnvTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_EnvTest_S2Kfailed_)] - - syntax S2KEnvTestMethod ::= "S2KtestEnvAddress" "(" ")" [symbol(), klabel(method_EnvTest_S2KtestEnvAddress_)] - - syntax S2KEnvTestMethod ::= "S2KtestEnvAddresseArray" "(" ")" [symbol(), klabel(method_EnvTest_S2KtestEnvAddresseArray_)] - - syntax S2KEnvTestMethod ::= "S2KtestEnvBool" "(" ")" [symbol(), klabel(method_EnvTest_S2KtestEnvBool_)] - - syntax S2KEnvTestMethod ::= "S2KtestEnvBoolArray" "(" ")" [symbol(), klabel(method_EnvTest_S2KtestEnvBoolArray_)] - - syntax S2KEnvTestMethod ::= "S2KtestEnvBytes" "(" ")" [symbol(), klabel(method_EnvTest_S2KtestEnvBytes_)] - - syntax S2KEnvTestMethod ::= "S2KtestEnvBytes32" "(" ")" [symbol(), klabel(method_EnvTest_S2KtestEnvBytes32_)] - - syntax S2KEnvTestMethod ::= "S2KtestEnvBytes32Array" "(" ")" [symbol(), klabel(method_EnvTest_S2KtestEnvBytes32Array_)] - - syntax S2KEnvTestMethod ::= "S2KtestEnvBytesArray" "(" ")" [symbol(), klabel(method_EnvTest_S2KtestEnvBytesArray_)] - - syntax S2KEnvTestMethod ::= "S2KtestEnvInt" "(" ")" [symbol(), klabel(method_EnvTest_S2KtestEnvInt_)] - - syntax S2KEnvTestMethod ::= "S2KtestEnvIntArray" "(" ")" [symbol(), klabel(method_EnvTest_S2KtestEnvIntArray_)] - - syntax S2KEnvTestMethod ::= "S2KtestEnvString" "(" ")" [symbol(), klabel(method_EnvTest_S2KtestEnvString_)] - - syntax S2KEnvTestMethod ::= "S2KtestEnvStringArray" "(" ")" [symbol(), klabel(method_EnvTest_S2KtestEnvStringArray_)] - - syntax S2KEnvTestMethod ::= "S2KtestEnvUInt" "(" ")" [symbol(), klabel(method_EnvTest_S2KtestEnvUInt_)] - - syntax S2KEnvTestMethod ::= "S2KtestEnvUIntArray" "(" ")" [symbol(), klabel(method_EnvTest_S2KtestEnvUIntArray_)] - - syntax S2KEnvTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_EnvTest_S2Kvm_)] - - rule ( S2KEnvTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2KtestEnvAddress ( ) => #abiCallData ( "testEnvAddress" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2KtestEnvAddresseArray ( ) => #abiCallData ( "testEnvAddresseArray" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2KtestEnvBool ( ) => #abiCallData ( "testEnvBool" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2KtestEnvBoolArray ( ) => #abiCallData ( "testEnvBoolArray" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2KtestEnvBytes ( ) => #abiCallData ( "testEnvBytes" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2KtestEnvBytes32 ( ) => #abiCallData ( "testEnvBytes32" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2KtestEnvBytes32Array ( ) => #abiCallData ( "testEnvBytes32Array" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2KtestEnvBytesArray ( ) => #abiCallData ( "testEnvBytesArray" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2KtestEnvInt ( ) => #abiCallData ( "testEnvInt" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2KtestEnvIntArray ( ) => #abiCallData ( "testEnvIntArray" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2KtestEnvString ( ) => #abiCallData ( "testEnvString" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2KtestEnvStringArray ( ) => #abiCallData ( "testEnvStringArray" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2KtestEnvUInt ( ) => #abiCallData ( "testEnvUInt" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2KtestEnvUIntArray ( ) => #abiCallData ( "testEnvUIntArray" , .TypedArgs ) ) - - - rule ( S2KEnvTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testEnvAddress()" ) => 2862857531 ) - - - rule ( selector ( "testEnvAddresseArray()" ) => 3294476741 ) - - - rule ( selector ( "testEnvBool()" ) => 894343624 ) - - - rule ( selector ( "testEnvBoolArray()" ) => 2095834153 ) - - - rule ( selector ( "testEnvBytes()" ) => 1439135834 ) - - - rule ( selector ( "testEnvBytes32()" ) => 1818390676 ) - - - rule ( selector ( "testEnvBytes32Array()" ) => 1427447379 ) - - - rule ( selector ( "testEnvBytesArray()" ) => 2593538909 ) - - - rule ( selector ( "testEnvInt()" ) => 446472630 ) - - - rule ( selector ( "testEnvIntArray()" ) => 994678527 ) - - - rule ( selector ( "testEnvString()" ) => 1097637738 ) - - - rule ( selector ( "testEnvStringArray()" ) => 3587215751 ) - - - rule ( selector ( "testEnvUInt()" ) => 2066287170 ) - - - rule ( selector ( "testEnvUIntArray()" ) => 551796351 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Dummy-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KDummyContract - - syntax S2KDummyContract ::= "S2KDummy" [symbol(), klabel(contract_Dummy)] - - - - syntax Bytes ::= S2KDummyContract "." S2KDummyMethod [function(), symbol(), klabel(method_Dummy)] - - syntax S2KDummyMethod ::= "S2KnumberA" "(" ")" [symbol(), klabel(method_Dummy_S2KnumberA_)] - - rule ( S2KDummy . S2KnumberA ( ) => #abiCallData ( "numberA" , .TypedArgs ) ) - - - rule ( selector ( "numberA()" ) => 2571869527 ) - - -endmodule - -module ExpectCallTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KExpectCallTestContract - - syntax S2KExpectCallTestContract ::= "S2KExpectCallTest" [symbol(), klabel(contract_ExpectCallTest)] - - - - syntax Field ::= ExpectCallTestField - - syntax ExpectCallTestField ::= "IS_TEST" [symbol(), klabel(field_ExpectCallTest_IS_TEST)] - - syntax ExpectCallTestField ::= "_failed" [symbol(), klabel(field_ExpectCallTest__failed)] - - syntax ExpectCallTestField ::= "IS_SCRIPT" [symbol(), klabel(field_ExpectCallTest_IS_SCRIPT)] - - syntax ExpectCallTestField ::= "stdstore" [symbol(), klabel(field_ExpectCallTest_stdstore)] - - rule ( #loc ( S2KExpectCallTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KExpectCallTest . _failed ) => 0 ) - - - rule ( #loc ( S2KExpectCallTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KExpectCallTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KExpectCallTestContract "." S2KExpectCallTestMethod [function(), symbol(), klabel(method_ExpectCallTest)] - - syntax S2KExpectCallTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_ExpectCallTest_S2KISZUndSCRIPT_)] - - syntax S2KExpectCallTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_ExpectCallTest_S2KISZUndTEST_)] - - syntax S2KExpectCallTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_ExpectCallTest_S2Kfailed_)] - - syntax S2KExpectCallTestMethod ::= "S2Kkevm" "(" ")" [symbol(), klabel(method_ExpectCallTest_S2Kkevm_)] - - syntax S2KExpectCallTestMethod ::= "S2KtestExpectRegularCall" "(" ")" [symbol(), klabel(method_ExpectCallTest_S2KtestExpectRegularCall_)] - - syntax S2KExpectCallTestMethod ::= "S2KtestExpectStaticCall" "(" ")" [symbol(), klabel(method_ExpectCallTest_S2KtestExpectStaticCall_)] - - syntax S2KExpectCallTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_ExpectCallTest_S2Kvm_)] - - rule ( S2KExpectCallTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KExpectCallTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KExpectCallTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KExpectCallTest . S2Kkevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( S2KExpectCallTest . S2KtestExpectRegularCall ( ) => #abiCallData ( "testExpectRegularCall" , .TypedArgs ) ) - - - rule ( S2KExpectCallTest . S2KtestExpectStaticCall ( ) => #abiCallData ( "testExpectStaticCall" , .TypedArgs ) ) - - - rule ( S2KExpectCallTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - - rule ( selector ( "testExpectRegularCall()" ) => 676731872 ) - - - rule ( selector ( "testExpectStaticCall()" ) => 3219733999 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module DepthReverter-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KDepthReverterContract - - syntax S2KDepthReverterContract ::= "S2KDepthReverter" [symbol(), klabel(contract_DepthReverter)] - - - - syntax Field ::= DepthReverterField - - syntax DepthReverterField ::= "reverter" [symbol(), klabel(field_DepthReverter_reverter)] - - rule ( #loc ( S2KDepthReverter . reverter ) => 0 ) - - - syntax Bytes ::= S2KDepthReverterContract "." S2KDepthReverterMethod [function(), symbol(), klabel(method_DepthReverter)] - - syntax S2KDepthReverterMethod ::= "S2KrevertAtNextDepth" "(" ")" [symbol(), klabel(method_DepthReverter_S2KrevertAtNextDepth_)] - - rule ( S2KDepthReverter . S2KrevertAtNextDepth ( ) => #abiCallData ( "revertAtNextDepth" , .TypedArgs ) ) - - - rule ( selector ( "revertAtNextDepth()" ) => 332278727 ) - - -endmodule - -module ExpectRevertTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KExpectRevertTestContract - - syntax S2KExpectRevertTestContract ::= "S2KExpectRevertTest" [symbol(), klabel(contract_ExpectRevertTest)] - - - - syntax Field ::= ExpectRevertTestField - - syntax ExpectRevertTestField ::= "IS_TEST" [symbol(), klabel(field_ExpectRevertTest_IS_TEST)] - - syntax ExpectRevertTestField ::= "_failed" [symbol(), klabel(field_ExpectRevertTest__failed)] - - syntax ExpectRevertTestField ::= "IS_SCRIPT" [symbol(), klabel(field_ExpectRevertTest_IS_SCRIPT)] - - syntax ExpectRevertTestField ::= "stdstore" [symbol(), klabel(field_ExpectRevertTest_stdstore)] - - rule ( #loc ( S2KExpectRevertTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KExpectRevertTest . _failed ) => 0 ) - - - rule ( #loc ( S2KExpectRevertTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KExpectRevertTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KExpectRevertTestContract "." S2KExpectRevertTestMethod [function(), symbol(), klabel(method_ExpectRevertTest)] - - syntax S2KExpectRevertTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_ExpectRevertTest_S2KISZUndSCRIPT_)] - - syntax S2KExpectRevertTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_ExpectRevertTest_S2KISZUndTEST_)] - - syntax S2KExpectRevertTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_ExpectRevertTest_S2Kfailed_)] - - syntax S2KExpectRevertTestMethod ::= "S2KtestFailZUndExpectRevertZUndfailAndSuccess" "(" ")" [symbol(), klabel(method_ExpectRevertTest_S2KtestFailZUndExpectRevertZUndfailAndSuccess_)] - - syntax S2KExpectRevertTestMethod ::= "S2KtestFailZUndexpectRevertZUndbytes4" "(" ")" [symbol(), klabel(method_ExpectRevertTest_S2KtestFailZUndexpectRevertZUndbytes4_)] - - syntax S2KExpectRevertTestMethod ::= "S2KtestFailZUndexpectRevertZUndempty" "(" ")" [symbol(), klabel(method_ExpectRevertTest_S2KtestFailZUndexpectRevertZUndempty_)] - - syntax S2KExpectRevertTestMethod ::= "S2KtestFailZUndexpectRevertZUndfalse" "(" ")" [symbol(), klabel(method_ExpectRevertTest_S2KtestFailZUndexpectRevertZUndfalse_)] - - syntax S2KExpectRevertTestMethod ::= "S2KtestFailZUndexpectRevertZUndmultipleReverts" "(" ")" [symbol(), klabel(method_ExpectRevertTest_S2KtestFailZUndexpectRevertZUndmultipleReverts_)] - - syntax S2KExpectRevertTestMethod ::= "S2KtestZUndExpectRevertZUndincreasedDepth" "(" ")" [symbol(), klabel(method_ExpectRevertTest_S2KtestZUndExpectRevertZUndincreasedDepth_)] - - syntax S2KExpectRevertTestMethod ::= "S2KtestZUndexpectRevertZUndbytes4" "(" ")" [symbol(), klabel(method_ExpectRevertTest_S2KtestZUndexpectRevertZUndbytes4_)] - - syntax S2KExpectRevertTestMethod ::= "S2KtestZUndexpectRevertZUndencodedSymbolic" "(" Int ":" "address" ")" [symbol(), klabel(method_ExpectRevertTest_S2KtestZUndexpectRevertZUndencodedSymbolic_address)] - - syntax S2KExpectRevertTestMethod ::= "S2KtestZUndexpectRevertZUndinternalCall" "(" ")" [symbol(), klabel(method_ExpectRevertTest_S2KtestZUndexpectRevertZUndinternalCall_)] - - syntax S2KExpectRevertTestMethod ::= "S2KtestZUndexpectRevertZUndmessage" "(" ")" [symbol(), klabel(method_ExpectRevertTest_S2KtestZUndexpectRevertZUndmessage_)] - - syntax S2KExpectRevertTestMethod ::= "S2KtestZUndexpectRevertZUndreturnValue" "(" ")" [symbol(), klabel(method_ExpectRevertTest_S2KtestZUndexpectRevertZUndreturnValue_)] - - syntax S2KExpectRevertTestMethod ::= "S2KtestZUndexpectRevertZUndtrue" "(" ")" [symbol(), klabel(method_ExpectRevertTest_S2KtestZUndexpectRevertZUndtrue_)] - - syntax S2KExpectRevertTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_ExpectRevertTest_S2Kvm_)] - - rule ( S2KExpectRevertTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KExpectRevertTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KExpectRevertTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KExpectRevertTest . S2KtestFailZUndExpectRevertZUndfailAndSuccess ( ) => #abiCallData ( "testFail_ExpectRevert_failAndSuccess" , .TypedArgs ) ) - - - rule ( S2KExpectRevertTest . S2KtestFailZUndexpectRevertZUndbytes4 ( ) => #abiCallData ( "testFail_expectRevert_bytes4" , .TypedArgs ) ) - - - rule ( S2KExpectRevertTest . S2KtestFailZUndexpectRevertZUndempty ( ) => #abiCallData ( "testFail_expectRevert_empty" , .TypedArgs ) ) - - - rule ( S2KExpectRevertTest . S2KtestFailZUndexpectRevertZUndfalse ( ) => #abiCallData ( "testFail_expectRevert_false" , .TypedArgs ) ) - - - rule ( S2KExpectRevertTest . S2KtestFailZUndexpectRevertZUndmultipleReverts ( ) => #abiCallData ( "testFail_expectRevert_multipleReverts" , .TypedArgs ) ) - - - rule ( S2KExpectRevertTest . S2KtestZUndExpectRevertZUndincreasedDepth ( ) => #abiCallData ( "test_ExpectRevert_increasedDepth" , .TypedArgs ) ) - - - rule ( S2KExpectRevertTest . S2KtestZUndexpectRevertZUndbytes4 ( ) => #abiCallData ( "test_expectRevert_bytes4" , .TypedArgs ) ) - - - rule ( S2KExpectRevertTest . S2KtestZUndexpectRevertZUndencodedSymbolic ( V0_controller : address ) => #abiCallData ( "test_expectRevert_encodedSymbolic" , #address ( V0_controller ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_controller ) - - - rule ( S2KExpectRevertTest . S2KtestZUndexpectRevertZUndinternalCall ( ) => #abiCallData ( "test_expectRevert_internalCall" , .TypedArgs ) ) - - - rule ( S2KExpectRevertTest . S2KtestZUndexpectRevertZUndmessage ( ) => #abiCallData ( "test_expectRevert_message" , .TypedArgs ) ) - - - rule ( S2KExpectRevertTest . S2KtestZUndexpectRevertZUndreturnValue ( ) => #abiCallData ( "test_expectRevert_returnValue" , .TypedArgs ) ) - - - rule ( S2KExpectRevertTest . S2KtestZUndexpectRevertZUndtrue ( ) => #abiCallData ( "test_expectRevert_true" , .TypedArgs ) ) - - - rule ( S2KExpectRevertTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testFail_ExpectRevert_failAndSuccess()" ) => 2386222785 ) - - - rule ( selector ( "testFail_expectRevert_bytes4()" ) => 3540765930 ) - - - rule ( selector ( "testFail_expectRevert_empty()" ) => 3691097669 ) - - - rule ( selector ( "testFail_expectRevert_false()" ) => 2152588325 ) - - - rule ( selector ( "testFail_expectRevert_multipleReverts()" ) => 2539873268 ) - - - rule ( selector ( "test_ExpectRevert_increasedDepth()" ) => 910856553 ) - - - rule ( selector ( "test_expectRevert_bytes4()" ) => 1300765909 ) - - - rule ( selector ( "test_expectRevert_encodedSymbolic(address)" ) => 27292786 ) - - - rule ( selector ( "test_expectRevert_internalCall()" ) => 1766536967 ) - - - rule ( selector ( "test_expectRevert_message()" ) => 3706733127 ) - - - rule ( selector ( "test_expectRevert_returnValue()" ) => 4193569282 ) - - - rule ( selector ( "test_expectRevert_true()" ) => 2931127071 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Reverter-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KReverterContract - - syntax S2KReverterContract ::= "S2KReverter" [symbol(), klabel(contract_Reverter)] - - - - syntax Bytes ::= S2KReverterContract "." S2KReverterMethod [function(), symbol(), klabel(method_Reverter)] - - syntax S2KReverterMethod ::= "S2KnoRevert" "(" ")" [symbol(), klabel(method_Reverter_S2KnoRevert_)] - - syntax S2KReverterMethod ::= "S2KrevertWithReason" "(" String ":" "string" ")" [symbol(), klabel(method_Reverter_S2KrevertWithReason_string)] - - syntax S2KReverterMethod ::= "S2KrevertWithoutReason" "(" ")" [symbol(), klabel(method_Reverter_S2KrevertWithoutReason_)] - - rule ( S2KReverter . S2KnoRevert ( ) => #abiCallData ( "noRevert" , .TypedArgs ) ) - - - rule ( S2KReverter . S2KrevertWithReason ( V0__a : string ) => #abiCallData ( "revertWithReason" , #string ( V0__a ) , .TypedArgs ) ) - - - rule ( S2KReverter . S2KrevertWithoutReason ( ) => #abiCallData ( "revertWithoutReason" , .TypedArgs ) ) - - - rule ( selector ( "noRevert()" ) => 3072618433 ) - - - rule ( selector ( "revertWithReason(string)" ) => 4154655617 ) - - - rule ( selector ( "revertWithoutReason()" ) => 1097275021 ) - - -endmodule - -module ReverterWithReturn-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KReverterWithReturnContract - - syntax S2KReverterWithReturnContract ::= "S2KReverterWithReturn" [symbol(), klabel(contract_ReverterWithReturn)] - - - - syntax Bytes ::= S2KReverterWithReturnContract "." S2KReverterWithReturnMethod [function(), symbol(), klabel(method_ReverterWithReturn)] - - syntax S2KReverterWithReturnMethod ::= "S2KreturnBytesUnless" "(" Int ":" "bool" ")" [symbol(), klabel(method_ReverterWithReturn_S2KreturnBytesUnless_bool)] - - syntax S2KReverterWithReturnMethod ::= "S2KreturnTupleUnless" "(" Int ":" "bool" ")" [symbol(), klabel(method_ReverterWithReturn_S2KreturnTupleUnless_bool)] - - rule ( S2KReverterWithReturn . S2KreturnBytesUnless ( V0_revertInstead : bool ) => #abiCallData ( "returnBytesUnless" , #bool ( V0_revertInstead ) , .TypedArgs ) ) - ensures #rangeBool ( V0_revertInstead ) - - - rule ( S2KReverterWithReturn . S2KreturnTupleUnless ( V0_revertInstead : bool ) => #abiCallData ( "returnTupleUnless" , #bool ( V0_revertInstead ) , .TypedArgs ) ) - ensures #rangeBool ( V0_revertInstead ) - - - rule ( selector ( "returnBytesUnless(bool)" ) => 3511402276 ) - - - rule ( selector ( "returnTupleUnless(bool)" ) => 3931056962 ) - - -endmodule - -module FfiTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KFfiTestContract - - syntax S2KFfiTestContract ::= "S2KFfiTest" [symbol(), klabel(contract_FfiTest)] - - - - syntax Field ::= FfiTestField - - syntax FfiTestField ::= "IS_TEST" [symbol(), klabel(field_FfiTest_IS_TEST)] - - syntax FfiTestField ::= "_failed" [symbol(), klabel(field_FfiTest__failed)] - - syntax FfiTestField ::= "IS_SCRIPT" [symbol(), klabel(field_FfiTest_IS_SCRIPT)] - - syntax FfiTestField ::= "stdstore" [symbol(), klabel(field_FfiTest_stdstore)] - - rule ( #loc ( S2KFfiTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KFfiTest . _failed ) => 0 ) - - - rule ( #loc ( S2KFfiTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KFfiTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KFfiTestContract "." S2KFfiTestMethod [function(), symbol(), klabel(method_FfiTest)] - - syntax S2KFfiTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_FfiTest_S2KISZUndSCRIPT_)] - - syntax S2KFfiTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_FfiTest_S2KISZUndTEST_)] - - syntax S2KFfiTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_FfiTest_S2Kfailed_)] - - syntax S2KFfiTestMethod ::= "S2KsetUp" "(" ")" [symbol(), klabel(method_FfiTest_S2KsetUp_)] - - syntax S2KFfiTestMethod ::= "S2KtestFFIFOO" "(" ")" [symbol(), klabel(method_FfiTest_S2KtestFFIFOO_)] - - syntax S2KFfiTestMethod ::= "S2KtestFFIScript" "(" ")" [symbol(), klabel(method_FfiTest_S2KtestFFIScript_)] - - syntax S2KFfiTestMethod ::= "S2KtestFFIScript2" "(" ")" [symbol(), klabel(method_FfiTest_S2KtestFFIScript2_)] - - syntax S2KFfiTestMethod ::= "S2Ktestffi" "(" ")" [symbol(), klabel(method_FfiTest_S2Ktestffi_)] - - syntax S2KFfiTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_FfiTest_S2Kvm_)] - - rule ( S2KFfiTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KFfiTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KFfiTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KFfiTest . S2KsetUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( S2KFfiTest . S2KtestFFIFOO ( ) => #abiCallData ( "testFFIFOO" , .TypedArgs ) ) - - - rule ( S2KFfiTest . S2KtestFFIScript ( ) => #abiCallData ( "testFFIScript" , .TypedArgs ) ) - - - rule ( S2KFfiTest . S2KtestFFIScript2 ( ) => #abiCallData ( "testFFIScript2" , .TypedArgs ) ) - - - rule ( S2KFfiTest . S2Ktestffi ( ) => #abiCallData ( "testffi" , .TypedArgs ) ) - - - rule ( S2KFfiTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testFFIFOO()" ) => 2415994822 ) - - - rule ( selector ( "testFFIScript()" ) => 2734086837 ) - - - rule ( selector ( "testFFIScript2()" ) => 4125794598 ) - - - rule ( selector ( "testffi()" ) => 4068116 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module FilesTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KFilesTestContract - - syntax S2KFilesTestContract ::= "S2KFilesTest" [symbol(), klabel(contract_FilesTest)] - - - - syntax Field ::= FilesTestField - - syntax FilesTestField ::= "IS_TEST" [symbol(), klabel(field_FilesTest_IS_TEST)] - - syntax FilesTestField ::= "_failed" [symbol(), klabel(field_FilesTest__failed)] - - syntax FilesTestField ::= "IS_SCRIPT" [symbol(), klabel(field_FilesTest_IS_SCRIPT)] - - syntax FilesTestField ::= "stdstore" [symbol(), klabel(field_FilesTest_stdstore)] - - rule ( #loc ( S2KFilesTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KFilesTest . _failed ) => 0 ) - - - rule ( #loc ( S2KFilesTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KFilesTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KFilesTestContract "." S2KFilesTestMethod [function(), symbol(), klabel(method_FilesTest)] - - syntax S2KFilesTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_FilesTest_S2KISZUndSCRIPT_)] - - syntax S2KFilesTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_FilesTest_S2KISZUndTEST_)] - - syntax S2KFilesTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_FilesTest_S2Kfailed_)] - - syntax S2KFilesTestMethod ::= "S2KtestFailRemoveFile" "(" ")" [symbol(), klabel(method_FilesTest_S2KtestFailRemoveFile_)] - - syntax S2KFilesTestMethod ::= "S2KtestReadWriteFile" "(" ")" [symbol(), klabel(method_FilesTest_S2KtestReadWriteFile_)] - - syntax S2KFilesTestMethod ::= "S2KtestReadWriteLine" "(" ")" [symbol(), klabel(method_FilesTest_S2KtestReadWriteLine_)] - - syntax S2KFilesTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_FilesTest_S2Kvm_)] - - rule ( S2KFilesTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KFilesTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KFilesTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KFilesTest . S2KtestFailRemoveFile ( ) => #abiCallData ( "testFailRemoveFile" , .TypedArgs ) ) - - - rule ( S2KFilesTest . S2KtestReadWriteFile ( ) => #abiCallData ( "testReadWriteFile" , .TypedArgs ) ) - - - rule ( S2KFilesTest . S2KtestReadWriteLine ( ) => #abiCallData ( "testReadWriteLine" , .TypedArgs ) ) - - - rule ( S2KFilesTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testFailRemoveFile()" ) => 2780725830 ) - - - rule ( selector ( "testReadWriteFile()" ) => 3880869465 ) - - - rule ( selector ( "testReadWriteLine()" ) => 3039298541 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module ForkTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KForkTestContract - - syntax S2KForkTestContract ::= "S2KForkTest" [symbol(), klabel(contract_ForkTest)] - - - - syntax Field ::= ForkTestField - - syntax ForkTestField ::= "IS_TEST" [symbol(), klabel(field_ForkTest_IS_TEST)] - - syntax ForkTestField ::= "_failed" [symbol(), klabel(field_ForkTest__failed)] - - syntax ForkTestField ::= "IS_SCRIPT" [symbol(), klabel(field_ForkTest_IS_SCRIPT)] - - syntax ForkTestField ::= "stdstore" [symbol(), klabel(field_ForkTest_stdstore)] - - rule ( #loc ( S2KForkTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KForkTest . _failed ) => 0 ) - - - rule ( #loc ( S2KForkTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KForkTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KForkTestContract "." S2KForkTestMethod [function(), symbol(), klabel(method_ForkTest)] - - syntax S2KForkTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_ForkTest_S2KISZUndSCRIPT_)] - - syntax S2KForkTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_ForkTest_S2KISZUndTEST_)] - - syntax S2KForkTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_ForkTest_S2Kfailed_)] - - syntax S2KForkTestMethod ::= "S2KtestActiveFork" "(" ")" [symbol(), klabel(method_ForkTest_S2KtestActiveFork_)] - - syntax S2KForkTestMethod ::= "S2KtestAllRPCUrl" "(" ")" [symbol(), klabel(method_ForkTest_S2KtestAllRPCUrl_)] - - syntax S2KForkTestMethod ::= "S2KtestCreateFork" "(" ")" [symbol(), klabel(method_ForkTest_S2KtestCreateFork_)] - - syntax S2KForkTestMethod ::= "S2KtestCreateForkBlock" "(" ")" [symbol(), klabel(method_ForkTest_S2KtestCreateForkBlock_)] - - syntax S2KForkTestMethod ::= "S2KtestCreateSelectFork" "(" ")" [symbol(), klabel(method_ForkTest_S2KtestCreateSelectFork_)] - - syntax S2KForkTestMethod ::= "S2KtestCreateSelectForkBlock" "(" ")" [symbol(), klabel(method_ForkTest_S2KtestCreateSelectForkBlock_)] - - syntax S2KForkTestMethod ::= "S2KtestRPCUrl" "(" ")" [symbol(), klabel(method_ForkTest_S2KtestRPCUrl_)] - - syntax S2KForkTestMethod ::= "S2KtestRPCUrlRevert" "(" ")" [symbol(), klabel(method_ForkTest_S2KtestRPCUrlRevert_)] - - syntax S2KForkTestMethod ::= "S2KtestRollFork" "(" ")" [symbol(), klabel(method_ForkTest_S2KtestRollFork_)] - - syntax S2KForkTestMethod ::= "S2KtestRollForkId" "(" ")" [symbol(), klabel(method_ForkTest_S2KtestRollForkId_)] - - syntax S2KForkTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_ForkTest_S2Kvm_)] - - rule ( S2KForkTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KForkTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KForkTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KForkTest . S2KtestActiveFork ( ) => #abiCallData ( "testActiveFork" , .TypedArgs ) ) - - - rule ( S2KForkTest . S2KtestAllRPCUrl ( ) => #abiCallData ( "testAllRPCUrl" , .TypedArgs ) ) - - - rule ( S2KForkTest . S2KtestCreateFork ( ) => #abiCallData ( "testCreateFork" , .TypedArgs ) ) - - - rule ( S2KForkTest . S2KtestCreateForkBlock ( ) => #abiCallData ( "testCreateForkBlock" , .TypedArgs ) ) - - - rule ( S2KForkTest . S2KtestCreateSelectFork ( ) => #abiCallData ( "testCreateSelectFork" , .TypedArgs ) ) - - - rule ( S2KForkTest . S2KtestCreateSelectForkBlock ( ) => #abiCallData ( "testCreateSelectForkBlock" , .TypedArgs ) ) - - - rule ( S2KForkTest . S2KtestRPCUrl ( ) => #abiCallData ( "testRPCUrl" , .TypedArgs ) ) - - - rule ( S2KForkTest . S2KtestRPCUrlRevert ( ) => #abiCallData ( "testRPCUrlRevert" , .TypedArgs ) ) - - - rule ( S2KForkTest . S2KtestRollFork ( ) => #abiCallData ( "testRollFork" , .TypedArgs ) ) - - - rule ( S2KForkTest . S2KtestRollForkId ( ) => #abiCallData ( "testRollForkId" , .TypedArgs ) ) - - - rule ( S2KForkTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testActiveFork()" ) => 2981024546 ) - - - rule ( selector ( "testAllRPCUrl()" ) => 707490019 ) - - - rule ( selector ( "testCreateFork()" ) => 9848133 ) - - - rule ( selector ( "testCreateForkBlock()" ) => 2820856803 ) - - - rule ( selector ( "testCreateSelectFork()" ) => 2307095206 ) - - - rule ( selector ( "testCreateSelectForkBlock()" ) => 269695700 ) - - - rule ( selector ( "testRPCUrl()" ) => 3938449696 ) - - - rule ( selector ( "testRPCUrlRevert()" ) => 470834373 ) - - - rule ( selector ( "testRollFork()" ) => 3222356361 ) - - - rule ( selector ( "testRollForkId()" ) => 3215996813 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module GasTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KGasTestContract - - syntax S2KGasTestContract ::= "S2KGasTest" [symbol(), klabel(contract_GasTest)] - - - - syntax Field ::= GasTestField - - syntax GasTestField ::= "IS_TEST" [symbol(), klabel(field_GasTest_IS_TEST)] - - syntax GasTestField ::= "_failed" [symbol(), klabel(field_GasTest__failed)] - - syntax GasTestField ::= "IS_SCRIPT" [symbol(), klabel(field_GasTest_IS_SCRIPT)] - - syntax GasTestField ::= "stdstore" [symbol(), klabel(field_GasTest_stdstore)] - - rule ( #loc ( S2KGasTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KGasTest . _failed ) => 0 ) - - - rule ( #loc ( S2KGasTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KGasTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KGasTestContract "." S2KGasTestMethod [function(), symbol(), klabel(method_GasTest)] - - syntax S2KGasTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_GasTest_S2KISZUndSCRIPT_)] - - syntax S2KGasTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_GasTest_S2KISZUndTEST_)] - - syntax S2KGasTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_GasTest_S2Kfailed_)] - - syntax S2KGasTestMethod ::= "S2Kkevm" "(" ")" [symbol(), klabel(method_GasTest_S2Kkevm_)] - - syntax S2KGasTestMethod ::= "S2KtestInfiniteGas" "(" ")" [symbol(), klabel(method_GasTest_S2KtestInfiniteGas_)] - - syntax S2KGasTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_GasTest_S2Kvm_)] - - rule ( S2KGasTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KGasTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KGasTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KGasTest . S2Kkevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( S2KGasTest . S2KtestInfiniteGas ( ) => #abiCallData ( "testInfiniteGas" , .TypedArgs ) ) - - - rule ( S2KGasTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - - rule ( selector ( "testInfiniteGas()" ) => 1677640502 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module GetCodeTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KGetCodeTestContract - - syntax S2KGetCodeTestContract ::= "S2KGetCodeTest" [symbol(), klabel(contract_GetCodeTest)] - - - - syntax Field ::= GetCodeTestField - - syntax GetCodeTestField ::= "IS_TEST" [symbol(), klabel(field_GetCodeTest_IS_TEST)] - - syntax GetCodeTestField ::= "_failed" [symbol(), klabel(field_GetCodeTest__failed)] - - syntax GetCodeTestField ::= "IS_SCRIPT" [symbol(), klabel(field_GetCodeTest_IS_SCRIPT)] - - syntax GetCodeTestField ::= "stdstore" [symbol(), klabel(field_GetCodeTest_stdstore)] - - syntax GetCodeTestField ::= "myToken" [symbol(), klabel(field_GetCodeTest_myToken)] - - rule ( #loc ( S2KGetCodeTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KGetCodeTest . _failed ) => 0 ) - - - rule ( #loc ( S2KGetCodeTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KGetCodeTest . stdstore ) => 1 ) - - - rule ( #loc ( S2KGetCodeTest . myToken ) => 8 ) - - - syntax Bytes ::= S2KGetCodeTestContract "." S2KGetCodeTestMethod [function(), symbol(), klabel(method_GetCodeTest)] - - syntax S2KGetCodeTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_GetCodeTest_S2KISZUndSCRIPT_)] - - syntax S2KGetCodeTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_GetCodeTest_S2KISZUndTEST_)] - - syntax S2KGetCodeTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_GetCodeTest_S2Kfailed_)] - - syntax S2KGetCodeTestMethod ::= "S2KsetUp" "(" ")" [symbol(), klabel(method_GetCodeTest_S2KsetUp_)] - - syntax S2KGetCodeTestMethod ::= "S2KtestGetCode" "(" ")" [symbol(), klabel(method_GetCodeTest_S2KtestGetCode_)] - - syntax S2KGetCodeTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_GetCodeTest_S2Kvm_)] - - rule ( S2KGetCodeTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KGetCodeTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KGetCodeTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KGetCodeTest . S2KsetUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( S2KGetCodeTest . S2KtestGetCode ( ) => #abiCallData ( "testGetCode" , .TypedArgs ) ) - - - rule ( S2KGetCodeTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testGetCode()" ) => 3906163359 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module KEVMCheats-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KKEVMCheatsContract - - syntax S2KKEVMCheatsContract ::= "S2KKEVMCheats" [symbol(), klabel(contract_KEVMCheats)] - - - - syntax Bytes ::= S2KKEVMCheatsContract "." S2KKEVMCheatsMethod [function(), symbol(), klabel(method_KEVMCheats)] - - syntax S2KKEVMCheatsMethod ::= "S2Kkevm" "(" ")" [symbol(), klabel(method_KEVMCheats_S2Kkevm_)] - - rule ( S2KKEVMCheats . S2Kkevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - -endmodule - -module KEVMCheatsBase-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KKEVMCheatsBaseContract - - syntax S2KKEVMCheatsBaseContract ::= "S2KKEVMCheatsBase" [symbol(), klabel(contract_KEVMCheatsBase)] - - - - syntax Bytes ::= S2KKEVMCheatsBaseContract "." S2KKEVMCheatsBaseMethod [function(), symbol(), klabel(method_KEVMCheatsBase)] - - syntax S2KKEVMCheatsBaseMethod ::= "S2KallowCallsToAddress" "(" Int ":" "address" ")" [symbol(), klabel(method_KEVMCheatsBase_S2KallowCallsToAddress_address)] - - syntax S2KKEVMCheatsBaseMethod ::= "S2KallowChangesToStorage" "(" Int ":" "address" "," Int ":" "uint256" ")" [symbol(), klabel(method_KEVMCheatsBase_S2KallowChangesToStorage_address_uint256)] - - syntax S2KKEVMCheatsBaseMethod ::= "S2KexpectCreate" "(" Int ":" "address" "," Int ":" "uint256" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_KEVMCheatsBase_S2KexpectCreate_address_uint256_bytes)] - - syntax S2KKEVMCheatsBaseMethod ::= "S2KexpectCreate2" "(" Int ":" "address" "," Int ":" "uint256" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_KEVMCheatsBase_S2KexpectCreate2_address_uint256_bytes)] - - syntax S2KKEVMCheatsBaseMethod ::= "S2KexpectDelegateCall" "(" Int ":" "address" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_KEVMCheatsBase_S2KexpectDelegateCall_address_bytes)] - - syntax S2KKEVMCheatsBaseMethod ::= "S2KexpectNoCall" "(" ")" [symbol(), klabel(method_KEVMCheatsBase_S2KexpectNoCall_)] - - syntax S2KKEVMCheatsBaseMethod ::= "S2KexpectRegularCall" "(" Int ":" "address" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_KEVMCheatsBase_S2KexpectRegularCall_address_bytes)] - - syntax S2KKEVMCheatsBaseMethod ::= "S2KexpectRegularCall" "(" Int ":" "address" "," Int ":" "uint256" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_KEVMCheatsBase_S2KexpectRegularCall_address_uint256_bytes)] - - syntax S2KKEVMCheatsBaseMethod ::= "S2KexpectStaticCall" "(" Int ":" "address" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_KEVMCheatsBase_S2KexpectStaticCall_address_bytes)] - - syntax S2KKEVMCheatsBaseMethod ::= "S2KinfiniteGas" "(" ")" [symbol(), klabel(method_KEVMCheatsBase_S2KinfiniteGas_)] - - syntax S2KKEVMCheatsBaseMethod ::= "S2KsymbolicStorage" "(" Int ":" "address" ")" [symbol(), klabel(method_KEVMCheatsBase_S2KsymbolicStorage_address)] - - rule ( S2KKEVMCheatsBase . S2KallowCallsToAddress ( V0_ : address ) => #abiCallData ( "allowCallsToAddress" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( S2KKEVMCheatsBase . S2KallowChangesToStorage ( V0_ : address , V1_ : uint256 ) => #abiCallData ( "allowChangesToStorage" , #address ( V0_ ) , #uint256 ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - )) - - - rule ( S2KKEVMCheatsBase . S2KexpectCreate ( V0_ : address , V1_ : uint256 , V2_ : bytes ) => #abiCallData ( "expectCreate" , #address ( V0_ ) , #uint256 ( V1_ ) , #bytes ( V2_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V2_ ) ) - ))) - - - rule ( S2KKEVMCheatsBase . S2KexpectCreate2 ( V0_ : address , V1_ : uint256 , V2_ : bytes ) => #abiCallData ( "expectCreate2" , #address ( V0_ ) , #uint256 ( V1_ ) , #bytes ( V2_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V2_ ) ) - ))) - - - rule ( S2KKEVMCheatsBase . S2KexpectDelegateCall ( V0_ : address , V1_ : bytes ) => #abiCallData ( "expectDelegateCall" , #address ( V0_ ) , #bytes ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V1_ ) ) - )) - - - rule ( S2KKEVMCheatsBase . S2KexpectNoCall ( ) => #abiCallData ( "expectNoCall" , .TypedArgs ) ) - - - rule ( S2KKEVMCheatsBase . S2KexpectRegularCall ( V0_ : address , V1_ : bytes ) => #abiCallData ( "expectRegularCall" , #address ( V0_ ) , #bytes ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V1_ ) ) - )) - - - rule ( S2KKEVMCheatsBase . S2KexpectRegularCall ( V0_ : address , V1_ : uint256 , V2_ : bytes ) => #abiCallData ( "expectRegularCall" , #address ( V0_ ) , #uint256 ( V1_ ) , #bytes ( V2_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V2_ ) ) - ))) - - - rule ( S2KKEVMCheatsBase . S2KexpectStaticCall ( V0_ : address , V1_ : bytes ) => #abiCallData ( "expectStaticCall" , #address ( V0_ ) , #bytes ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V1_ ) ) - )) - - - rule ( S2KKEVMCheatsBase . S2KinfiniteGas ( ) => #abiCallData ( "infiniteGas" , .TypedArgs ) ) - - - rule ( S2KKEVMCheatsBase . S2KsymbolicStorage ( V0_ : address ) => #abiCallData ( "symbolicStorage" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( selector ( "allowCallsToAddress(address)" ) => 1850795572 ) - - - rule ( selector ( "allowChangesToStorage(address,uint256)" ) => 4207417100 ) - - - rule ( selector ( "expectCreate(address,uint256,bytes)" ) => 658968394 ) - - - rule ( selector ( "expectCreate2(address,uint256,bytes)" ) => 3854582462 ) - - - rule ( selector ( "expectDelegateCall(address,bytes)" ) => 1030406631 ) - - - rule ( selector ( "expectNoCall()" ) => 3861374088 ) - - - rule ( selector ( "expectRegularCall(address,bytes)" ) => 3178868520 ) - - - rule ( selector ( "expectRegularCall(address,uint256,bytes)" ) => 1973496647 ) - - - rule ( selector ( "expectStaticCall(address,bytes)" ) => 2232945516 ) - - - rule ( selector ( "infiniteGas()" ) => 3986649939 ) - - - rule ( selector ( "symbolicStorage(address)" ) => 769677742 ) - - -endmodule - -module LabelTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KLabelTestContract - - syntax S2KLabelTestContract ::= "S2KLabelTest" [symbol(), klabel(contract_LabelTest)] - - - - syntax Field ::= LabelTestField - - syntax LabelTestField ::= "IS_TEST" [symbol(), klabel(field_LabelTest_IS_TEST)] - - syntax LabelTestField ::= "_failed" [symbol(), klabel(field_LabelTest__failed)] - - syntax LabelTestField ::= "IS_SCRIPT" [symbol(), klabel(field_LabelTest_IS_SCRIPT)] - - syntax LabelTestField ::= "stdstore" [symbol(), klabel(field_LabelTest_stdstore)] - - rule ( #loc ( S2KLabelTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KLabelTest . _failed ) => 0 ) - - - rule ( #loc ( S2KLabelTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KLabelTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KLabelTestContract "." S2KLabelTestMethod [function(), symbol(), klabel(method_LabelTest)] - - syntax S2KLabelTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_LabelTest_S2KISZUndSCRIPT_)] - - syntax S2KLabelTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_LabelTest_S2KISZUndTEST_)] - - syntax S2KLabelTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_LabelTest_S2Kfailed_)] - - syntax S2KLabelTestMethod ::= "S2KtestLabel" "(" ")" [symbol(), klabel(method_LabelTest_S2KtestLabel_)] - - syntax S2KLabelTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_LabelTest_S2Kvm_)] - - rule ( S2KLabelTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KLabelTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KLabelTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KLabelTest . S2KtestLabel ( ) => #abiCallData ( "testLabel" , .TypedArgs ) ) - - - rule ( S2KLabelTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testLabel()" ) => 799101117 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module LoopsTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KLoopsTestContract - - syntax S2KLoopsTestContract ::= "S2KLoopsTest" [symbol(), klabel(contract_LoopsTest)] - - - - syntax Field ::= LoopsTestField - - syntax LoopsTestField ::= "IS_TEST" [symbol(), klabel(field_LoopsTest_IS_TEST)] - - syntax LoopsTestField ::= "_failed" [symbol(), klabel(field_LoopsTest__failed)] - - syntax LoopsTestField ::= "IS_SCRIPT" [symbol(), klabel(field_LoopsTest_IS_SCRIPT)] - - syntax LoopsTestField ::= "stdstore" [symbol(), klabel(field_LoopsTest_stdstore)] - - rule ( #loc ( S2KLoopsTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KLoopsTest . _failed ) => 0 ) - - - rule ( #loc ( S2KLoopsTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KLoopsTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KLoopsTestContract "." S2KLoopsTestMethod [function(), symbol(), klabel(method_LoopsTest)] - - syntax S2KLoopsTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_LoopsTest_S2KISZUndSCRIPT_)] - - syntax S2KLoopsTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_LoopsTest_S2KISZUndTEST_)] - - syntax S2KLoopsTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_LoopsTest_S2Kfailed_)] - - syntax S2KLoopsTestMethod ::= "S2KsumZUndN" "(" Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_S2KsumZUndN_uint256)] - - syntax S2KLoopsTestMethod ::= "S2KtestIsNotPrime" "(" Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_S2KtestIsNotPrime_uint256)] - - syntax S2KLoopsTestMethod ::= "S2KtestIsPrime" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_S2KtestIsPrime_uint256_uint256)] - - syntax S2KLoopsTestMethod ::= "S2KtestIsPrimeBroken" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_S2KtestIsPrimeBroken_uint256_uint256)] - - syntax S2KLoopsTestMethod ::= "S2KtestIsPrimeOpt" "(" Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_S2KtestIsPrimeOpt_uint256)] - - syntax S2KLoopsTestMethod ::= "S2KtestMax" "(" K ":" "uint256[]" ")" [symbol(), klabel(method_LoopsTest_S2KtestMax_uint256[])] - - syntax S2KLoopsTestMethod ::= "S2KtestMaxBroken" "(" K ":" "uint256[]" ")" [symbol(), klabel(method_LoopsTest_S2KtestMaxBroken_uint256[])] - - syntax S2KLoopsTestMethod ::= "S2KtestNthPrime" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_S2KtestNthPrime_uint256_uint256)] - - syntax S2KLoopsTestMethod ::= "S2KtestSort" "(" K ":" "uint256[]" ")" [symbol(), klabel(method_LoopsTest_S2KtestSort_uint256[])] - - syntax S2KLoopsTestMethod ::= "S2KtestSortBroken" "(" K ":" "uint256[]" ")" [symbol(), klabel(method_LoopsTest_S2KtestSortBroken_uint256[])] - - syntax S2KLoopsTestMethod ::= "S2KtestSqrt" "(" Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_S2KtestSqrt_uint256)] - - syntax S2KLoopsTestMethod ::= "S2KtestSumToN" "(" Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_S2KtestSumToN_uint256)] - - syntax S2KLoopsTestMethod ::= "S2KtestSumToNBroken" "(" Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_S2KtestSumToNBroken_uint256)] - - syntax S2KLoopsTestMethod ::= "S2KtestZUndsumZUnd10" "(" ")" [symbol(), klabel(method_LoopsTest_S2KtestZUndsumZUnd10_)] - - syntax S2KLoopsTestMethod ::= "S2KtestZUndsumZUnd100" "(" ")" [symbol(), klabel(method_LoopsTest_S2KtestZUndsumZUnd100_)] - - syntax S2KLoopsTestMethod ::= "S2KtestZUndsumZUnd1000" "(" ")" [symbol(), klabel(method_LoopsTest_S2KtestZUndsumZUnd1000_)] - - syntax S2KLoopsTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_LoopsTest_S2Kvm_)] - - rule ( S2KLoopsTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KLoopsTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KLoopsTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KLoopsTest . S2KsumZUndN ( V0_n : uint256 ) => #abiCallData ( "sum_N" , #uint256 ( V0_n ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_n ) - - - rule ( S2KLoopsTest . S2KtestIsNotPrime ( V0_n : uint256 ) => #abiCallData ( "testIsNotPrime" , #uint256 ( V0_n ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_n ) - - - rule ( S2KLoopsTest . S2KtestIsPrime ( V0_n : uint256 , V1_i : uint256 ) => #abiCallData ( "testIsPrime" , #uint256 ( V0_n ) , #uint256 ( V1_i ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_n ) - andBool ( #rangeUInt ( 256 , V1_i ) - )) - - - rule ( S2KLoopsTest . S2KtestIsPrimeBroken ( V0_n : uint256 , V1_i : uint256 ) => #abiCallData ( "testIsPrimeBroken" , #uint256 ( V0_n ) , #uint256 ( V1_i ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_n ) - andBool ( #rangeUInt ( 256 , V1_i ) - )) - - - rule ( S2KLoopsTest . S2KtestIsPrimeOpt ( V0_n : uint256 ) => #abiCallData ( "testIsPrimeOpt" , #uint256 ( V0_n ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_n ) - - - rule ( S2KLoopsTest . S2KtestNthPrime ( V0_n : uint256 , V1_i : uint256 ) => #abiCallData ( "testNthPrime" , #uint256 ( V0_n ) , #uint256 ( V1_i ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_n ) - andBool ( #rangeUInt ( 256 , V1_i ) - )) - - - rule ( S2KLoopsTest . S2KtestSqrt ( V0_x : uint256 ) => #abiCallData ( "testSqrt" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( S2KLoopsTest . S2KtestSumToN ( V0_n : uint256 ) => #abiCallData ( "testSumToN" , #uint256 ( V0_n ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_n ) - - - rule ( S2KLoopsTest . S2KtestSumToNBroken ( V0_n : uint256 ) => #abiCallData ( "testSumToNBroken" , #uint256 ( V0_n ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_n ) - - - rule ( S2KLoopsTest . S2KtestZUndsumZUnd10 ( ) => #abiCallData ( "test_sum_10" , .TypedArgs ) ) - - - rule ( S2KLoopsTest . S2KtestZUndsumZUnd100 ( ) => #abiCallData ( "test_sum_100" , .TypedArgs ) ) - - - rule ( S2KLoopsTest . S2KtestZUndsumZUnd1000 ( ) => #abiCallData ( "test_sum_1000" , .TypedArgs ) ) - - - rule ( S2KLoopsTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "sum_N(uint256)" ) => 2123244496 ) - - - rule ( selector ( "testIsNotPrime(uint256)" ) => 809987623 ) - - - rule ( selector ( "testIsPrime(uint256,uint256)" ) => 111940912 ) - - - rule ( selector ( "testIsPrimeBroken(uint256,uint256)" ) => 1834826207 ) - - - rule ( selector ( "testIsPrimeOpt(uint256)" ) => 404719852 ) - - - rule ( selector ( "testMax(uint256[])" ) => 1575104263 ) - - - rule ( selector ( "testMaxBroken(uint256[])" ) => 1372438930 ) - - - rule ( selector ( "testNthPrime(uint256,uint256)" ) => 2702762242 ) - - - rule ( selector ( "testSort(uint256[])" ) => 2414037741 ) - - - rule ( selector ( "testSortBroken(uint256[])" ) => 3541275661 ) - - - rule ( selector ( "testSqrt(uint256)" ) => 233106198 ) - - - rule ( selector ( "testSumToN(uint256)" ) => 2289979355 ) - - - rule ( selector ( "testSumToNBroken(uint256)" ) => 1318374999 ) - - - rule ( selector ( "test_sum_10()" ) => 1087009050 ) - - - rule ( selector ( "test_sum_100()" ) => 1519953344 ) - - - rule ( selector ( "test_sum_1000()" ) => 222767225 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module MethodDisambiguateTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KMethodDisambiguateTestContract - - syntax S2KMethodDisambiguateTestContract ::= "S2KMethodDisambiguateTest" [symbol(), klabel(contract_MethodDisambiguateTest)] - - - - syntax Field ::= MethodDisambiguateTestField - - syntax MethodDisambiguateTestField ::= "IS_TEST" [symbol(), klabel(field_MethodDisambiguateTest_IS_TEST)] - - syntax MethodDisambiguateTestField ::= "_failed" [symbol(), klabel(field_MethodDisambiguateTest__failed)] - - syntax MethodDisambiguateTestField ::= "IS_SCRIPT" [symbol(), klabel(field_MethodDisambiguateTest_IS_SCRIPT)] - - syntax MethodDisambiguateTestField ::= "stdstore" [symbol(), klabel(field_MethodDisambiguateTest_stdstore)] - - rule ( #loc ( S2KMethodDisambiguateTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KMethodDisambiguateTest . _failed ) => 0 ) - - - rule ( #loc ( S2KMethodDisambiguateTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KMethodDisambiguateTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KMethodDisambiguateTestContract "." S2KMethodDisambiguateTestMethod [function(), symbol(), klabel(method_MethodDisambiguateTest)] - - syntax S2KMethodDisambiguateTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_MethodDisambiguateTest_S2KISZUndSCRIPT_)] - - syntax S2KMethodDisambiguateTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_MethodDisambiguateTest_S2KISZUndTEST_)] - - syntax S2KMethodDisambiguateTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_MethodDisambiguateTest_S2Kfailed_)] - - syntax S2KMethodDisambiguateTestMethod ::= "S2KgetNumber" "(" Int ":" "uint256" ")" [symbol(), klabel(method_MethodDisambiguateTest_S2KgetNumber_uint256)] - - syntax S2KMethodDisambiguateTestMethod ::= "S2KgetNumber" "(" Int ":" "uint32" ")" [symbol(), klabel(method_MethodDisambiguateTest_S2KgetNumber_uint32)] - - syntax S2KMethodDisambiguateTestMethod ::= "S2KtestZUndmethodZUndcall" "(" ")" [symbol(), klabel(method_MethodDisambiguateTest_S2KtestZUndmethodZUndcall_)] - - syntax S2KMethodDisambiguateTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_MethodDisambiguateTest_S2Kvm_)] - - rule ( S2KMethodDisambiguateTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KMethodDisambiguateTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KMethodDisambiguateTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KMethodDisambiguateTest . S2KgetNumber ( V0_x : uint256 ) => #abiCallData ( "getNumber" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( S2KMethodDisambiguateTest . S2KgetNumber ( V0_x : uint32 ) => #abiCallData ( "getNumber" , #uint32 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 32 , V0_x ) - - - rule ( S2KMethodDisambiguateTest . S2KtestZUndmethodZUndcall ( ) => #abiCallData ( "test_method_call" , .TypedArgs ) ) - - - rule ( S2KMethodDisambiguateTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "getNumber(uint256)" ) => 4233508440 ) - - - rule ( selector ( "getNumber(uint32)" ) => 144150998 ) - - - rule ( selector ( "test_method_call()" ) => 1803637680 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module MockCallTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KMockCallTestContract - - syntax S2KMockCallTestContract ::= "S2KMockCallTest" [symbol(), klabel(contract_MockCallTest)] - - - - syntax Field ::= MockCallTestField - - syntax MockCallTestField ::= "IS_TEST" [symbol(), klabel(field_MockCallTest_IS_TEST)] - - syntax MockCallTestField ::= "_failed" [symbol(), klabel(field_MockCallTest__failed)] - - syntax MockCallTestField ::= "IS_SCRIPT" [symbol(), klabel(field_MockCallTest_IS_SCRIPT)] - - syntax MockCallTestField ::= "stdstore" [symbol(), klabel(field_MockCallTest_stdstore)] - - rule ( #loc ( S2KMockCallTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KMockCallTest . _failed ) => 0 ) - - - rule ( #loc ( S2KMockCallTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KMockCallTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KMockCallTestContract "." S2KMockCallTestMethod [function(), symbol(), klabel(method_MockCallTest)] - - syntax S2KMockCallTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_MockCallTest_S2KISZUndSCRIPT_)] - - syntax S2KMockCallTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_MockCallTest_S2KISZUndTEST_)] - - syntax S2KMockCallTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_MockCallTest_S2Kfailed_)] - - syntax S2KMockCallTestMethod ::= "S2KtestMockCall" "(" ")" [symbol(), klabel(method_MockCallTest_S2KtestMockCall_)] - - syntax S2KMockCallTestMethod ::= "S2KtestMockCallValue" "(" ")" [symbol(), klabel(method_MockCallTest_S2KtestMockCallValue_)] - - syntax S2KMockCallTestMethod ::= "S2KtestMockCalls" "(" ")" [symbol(), klabel(method_MockCallTest_S2KtestMockCalls_)] - - syntax S2KMockCallTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_MockCallTest_S2Kvm_)] - - rule ( S2KMockCallTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KMockCallTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KMockCallTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KMockCallTest . S2KtestMockCall ( ) => #abiCallData ( "testMockCall" , .TypedArgs ) ) - - - rule ( S2KMockCallTest . S2KtestMockCallValue ( ) => #abiCallData ( "testMockCallValue" , .TypedArgs ) ) - - - rule ( S2KMockCallTest . S2KtestMockCalls ( ) => #abiCallData ( "testMockCalls" , .TypedArgs ) ) - - - rule ( S2KMockCallTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testMockCall()" ) => 3143830108 ) - - - rule ( selector ( "testMockCallValue()" ) => 1208641942 ) - - - rule ( selector ( "testMockCalls()" ) => 957910350 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module MyIERC20-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KMyIERC20Contract - - syntax S2KMyIERC20Contract ::= "S2KMyIERC20" [symbol(), klabel(contract_MyIERC20)] - - - - syntax Bytes ::= S2KMyIERC20Contract "." S2KMyIERC20Method [function(), symbol(), klabel(method_MyIERC20)] - - syntax S2KMyIERC20Method ::= "S2Kapprove" "(" Int ":" "address" "," Int ":" "uint256" ")" [symbol(), klabel(method_MyIERC20_S2Kapprove_address_uint256)] - - syntax S2KMyIERC20Method ::= "S2KbalanceOf" "(" Int ":" "address" ")" [symbol(), klabel(method_MyIERC20_S2KbalanceOf_address)] - - syntax S2KMyIERC20Method ::= "S2Kdecimals" "(" ")" [symbol(), klabel(method_MyIERC20_S2Kdecimals_)] - - syntax S2KMyIERC20Method ::= "S2Ksymbol" "(" ")" [symbol(), klabel(method_MyIERC20_S2Ksymbol_)] - - syntax S2KMyIERC20Method ::= "S2KtotalSupply" "(" ")" [symbol(), klabel(method_MyIERC20_S2KtotalSupply_)] - - syntax S2KMyIERC20Method ::= "S2Ktransfer" "(" Int ":" "address" "," Int ":" "uint256" ")" [symbol(), klabel(method_MyIERC20_S2Ktransfer_address_uint256)] - - syntax S2KMyIERC20Method ::= "S2KtransferFrom" "(" Int ":" "address" "," Int ":" "address" "," Int ":" "uint256" ")" [symbol(), klabel(method_MyIERC20_S2KtransferFrom_address_address_uint256)] - - rule ( S2KMyIERC20 . S2Kapprove ( V0_spender : address , V1_value : uint256 ) => #abiCallData ( "approve" , #address ( V0_spender ) , #uint256 ( V1_value ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_spender ) - andBool ( #rangeUInt ( 256 , V1_value ) - )) - - - rule ( S2KMyIERC20 . S2KbalanceOf ( V0_ : address ) => #abiCallData ( "balanceOf" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( S2KMyIERC20 . S2Kdecimals ( ) => #abiCallData ( "decimals" , .TypedArgs ) ) - - - rule ( S2KMyIERC20 . S2Ksymbol ( ) => #abiCallData ( "symbol" , .TypedArgs ) ) - - - rule ( S2KMyIERC20 . S2KtotalSupply ( ) => #abiCallData ( "totalSupply" , .TypedArgs ) ) - - - rule ( S2KMyIERC20 . S2Ktransfer ( V0_recipient : address , V1_amount : uint256 ) => #abiCallData ( "transfer" , #address ( V0_recipient ) , #uint256 ( V1_amount ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_recipient ) - andBool ( #rangeUInt ( 256 , V1_amount ) - )) - - - rule ( S2KMyIERC20 . S2KtransferFrom ( V0_sender : address , V1_recipient : address , V2_amount : uint256 ) => #abiCallData ( "transferFrom" , #address ( V0_sender ) , #address ( V1_recipient ) , #uint256 ( V2_amount ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_sender ) - andBool ( #rangeAddress ( V1_recipient ) - andBool ( #rangeUInt ( 256 , V2_amount ) - ))) - - - rule ( selector ( "approve(address,uint256)" ) => 157198259 ) - - - rule ( selector ( "balanceOf(address)" ) => 1889567281 ) - - - rule ( selector ( "decimals()" ) => 826074471 ) - - - rule ( selector ( "symbol()" ) => 2514000705 ) - - - rule ( selector ( "totalSupply()" ) => 404098525 ) - - - rule ( selector ( "transfer(address,uint256)" ) => 2835717307 ) - - - rule ( selector ( "transferFrom(address,address,uint256)" ) => 599290589 ) - - -endmodule - -module MyToken-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KMyTokenContract - - syntax S2KMyTokenContract ::= "S2KMyToken" [symbol(), klabel(contract_MyToken)] - - - - syntax Field ::= MyTokenField - - syntax MyTokenField ::= "token" [symbol(), klabel(field_MyToken_token)] - - syntax MyTokenField ::= "balances" [symbol(), klabel(field_MyToken_balances)] - - rule ( #loc ( S2KMyToken . token ) => 0 ) - - - rule ( #loc ( S2KMyToken . balances ) => 1 ) - - - syntax Bytes ::= S2KMyTokenContract "." S2KMyTokenMethod [function(), symbol(), klabel(method_MyToken)] - - syntax S2KMyTokenMethod ::= "S2KbalanceOf" "(" Int ":" "address" ")" [symbol(), klabel(method_MyToken_S2KbalanceOf_address)] - - syntax S2KMyTokenMethod ::= "S2Kbalances" "(" Int ":" "address" ")" [symbol(), klabel(method_MyToken_S2Kbalances_address)] - - syntax S2KMyTokenMethod ::= "S2Kpay" "(" Int ":" "address" ")" [symbol(), klabel(method_MyToken_S2Kpay_address)] - - syntax S2KMyTokenMethod ::= "S2Ktoken" "(" ")" [symbol(), klabel(method_MyToken_S2Ktoken_)] - - rule ( S2KMyToken . S2KbalanceOf ( V0_user : address ) => #abiCallData ( "balanceOf" , #address ( V0_user ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_user ) - - - rule ( S2KMyToken . S2Kbalances ( V0_ : address ) => #abiCallData ( "balances" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( S2KMyToken . S2Kpay ( V0_user : address ) => #abiCallData ( "pay" , #address ( V0_user ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_user ) - - - rule ( S2KMyToken . S2Ktoken ( ) => #abiCallData ( "token" , .TypedArgs ) ) - - - rule ( selector ( "balanceOf(address)" ) => 1889567281 ) - - - rule ( selector ( "balances(address)" ) => 669136355 ) - - - rule ( selector ( "pay(address)" ) => 202497757 ) - - - rule ( selector ( "token()" ) => 4228666474 ) - - -endmodule - -module NoImport-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KNoImportContract - - syntax S2KNoImportContract ::= "S2KNoImport" [symbol(), klabel(contract_NoImport)] - - - - syntax Bytes ::= S2KNoImportContract "." S2KNoImportMethod [function(), symbol(), klabel(method_NoImport)] - - syntax S2KNoImportMethod ::= "S2KtestZUndsourceZUndmap" "(" ")" [symbol(), klabel(method_NoImport_S2KtestZUndsourceZUndmap_)] - - rule ( S2KNoImport . S2KtestZUndsourceZUndmap ( ) => #abiCallData ( "test_source_map" , .TypedArgs ) ) - - - rule ( selector ( "test_source_map()" ) => 3563497491 ) - - -endmodule - -module OwnerUpOnly-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KOwnerUpOnlyContract - - syntax S2KOwnerUpOnlyContract ::= "S2KOwnerUpOnly" [symbol(), klabel(contract_OwnerUpOnly)] - - - - syntax Field ::= OwnerUpOnlyField - - syntax OwnerUpOnlyField ::= "count" [symbol(), klabel(field_OwnerUpOnly_count)] - - rule ( #loc ( S2KOwnerUpOnly . count ) => 0 ) - - - syntax Bytes ::= S2KOwnerUpOnlyContract "." S2KOwnerUpOnlyMethod [function(), symbol(), klabel(method_OwnerUpOnly)] - - syntax S2KOwnerUpOnlyMethod ::= "S2Kcount" "(" ")" [symbol(), klabel(method_OwnerUpOnly_S2Kcount_)] - - syntax S2KOwnerUpOnlyMethod ::= "S2Kincrement" "(" ")" [symbol(), klabel(method_OwnerUpOnly_S2Kincrement_)] - - syntax S2KOwnerUpOnlyMethod ::= "S2Kowner" "(" ")" [symbol(), klabel(method_OwnerUpOnly_S2Kowner_)] - - rule ( S2KOwnerUpOnly . S2Kcount ( ) => #abiCallData ( "count" , .TypedArgs ) ) - - - rule ( S2KOwnerUpOnly . S2Kincrement ( ) => #abiCallData ( "increment" , .TypedArgs ) ) - - - rule ( S2KOwnerUpOnly . S2Kowner ( ) => #abiCallData ( "owner" , .TypedArgs ) ) - - - rule ( selector ( "count()" ) => 107354813 ) - - - rule ( selector ( "increment()" ) => 3500007562 ) - - - rule ( selector ( "owner()" ) => 2376452955 ) - - -endmodule - -module OwnerUpOnlyTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KOwnerUpOnlyTestContract - - syntax S2KOwnerUpOnlyTestContract ::= "S2KOwnerUpOnlyTest" [symbol(), klabel(contract_OwnerUpOnlyTest)] - - - - syntax Field ::= OwnerUpOnlyTestField - - syntax OwnerUpOnlyTestField ::= "IS_TEST" [symbol(), klabel(field_OwnerUpOnlyTest_IS_TEST)] - - syntax OwnerUpOnlyTestField ::= "_failed" [symbol(), klabel(field_OwnerUpOnlyTest__failed)] - - syntax OwnerUpOnlyTestField ::= "IS_SCRIPT" [symbol(), klabel(field_OwnerUpOnlyTest_IS_SCRIPT)] - - syntax OwnerUpOnlyTestField ::= "stdstore" [symbol(), klabel(field_OwnerUpOnlyTest_stdstore)] - - syntax OwnerUpOnlyTestField ::= "upOnly" [symbol(), klabel(field_OwnerUpOnlyTest_upOnly)] - - rule ( #loc ( S2KOwnerUpOnlyTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KOwnerUpOnlyTest . _failed ) => 0 ) - - - rule ( #loc ( S2KOwnerUpOnlyTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KOwnerUpOnlyTest . stdstore ) => 1 ) - - - rule ( #loc ( S2KOwnerUpOnlyTest . upOnly ) => 8 ) - - - syntax Bytes ::= S2KOwnerUpOnlyTestContract "." S2KOwnerUpOnlyTestMethod [function(), symbol(), klabel(method_OwnerUpOnlyTest)] - - syntax S2KOwnerUpOnlyTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_S2KISZUndSCRIPT_)] - - syntax S2KOwnerUpOnlyTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_S2KISZUndTEST_)] - - syntax S2KOwnerUpOnlyTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_S2Kfailed_)] - - syntax S2KOwnerUpOnlyTestMethod ::= "S2KsetUp" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_S2KsetUp_)] - - syntax S2KOwnerUpOnlyTestMethod ::= "S2KtestFailIncrementAsNotOwner" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_S2KtestFailIncrementAsNotOwner_)] - - syntax S2KOwnerUpOnlyTestMethod ::= "S2KtestIncrementAsNotOwner" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_S2KtestIncrementAsNotOwner_)] - - syntax S2KOwnerUpOnlyTestMethod ::= "S2KtestIncrementAsOwner" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_S2KtestIncrementAsOwner_)] - - syntax S2KOwnerUpOnlyTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_S2Kvm_)] - - rule ( S2KOwnerUpOnlyTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KOwnerUpOnlyTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KOwnerUpOnlyTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KOwnerUpOnlyTest . S2KsetUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( S2KOwnerUpOnlyTest . S2KtestFailIncrementAsNotOwner ( ) => #abiCallData ( "testFailIncrementAsNotOwner" , .TypedArgs ) ) - - - rule ( S2KOwnerUpOnlyTest . S2KtestIncrementAsNotOwner ( ) => #abiCallData ( "testIncrementAsNotOwner" , .TypedArgs ) ) - - - rule ( S2KOwnerUpOnlyTest . S2KtestIncrementAsOwner ( ) => #abiCallData ( "testIncrementAsOwner" , .TypedArgs ) ) - - - rule ( S2KOwnerUpOnlyTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testFailIncrementAsNotOwner()" ) => 4249919617 ) - - - rule ( selector ( "testIncrementAsNotOwner()" ) => 1302326069 ) - - - rule ( selector ( "testIncrementAsOwner()" ) => 1980498343 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module AdditionalToken-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KAdditionalTokenContract - - syntax S2KAdditionalTokenContract ::= "S2KAdditionalToken" [symbol(), klabel(contract_AdditionalToken)] - - - - syntax Field ::= AdditionalTokenField - - syntax AdditionalTokenField ::= "count" [symbol(), klabel(field_AdditionalToken_count)] - - rule ( #loc ( S2KAdditionalToken . count ) => 0 ) - - - syntax Bytes ::= S2KAdditionalTokenContract "." S2KAdditionalTokenMethod [function(), symbol(), klabel(method_AdditionalToken)] - - syntax S2KAdditionalTokenMethod ::= "S2Kcount" "(" ")" [symbol(), klabel(method_AdditionalToken_S2Kcount_)] - - syntax S2KAdditionalTokenMethod ::= "S2KincrementCount" "(" ")" [symbol(), klabel(method_AdditionalToken_S2KincrementCount_)] - - syntax S2KAdditionalTokenMethod ::= "S2Kowner" "(" ")" [symbol(), klabel(method_AdditionalToken_S2Kowner_)] - - rule ( S2KAdditionalToken . S2Kcount ( ) => #abiCallData ( "count" , .TypedArgs ) ) - - - rule ( S2KAdditionalToken . S2KincrementCount ( ) => #abiCallData ( "incrementCount" , .TypedArgs ) ) - - - rule ( S2KAdditionalToken . S2Kowner ( ) => #abiCallData ( "owner" , .TypedArgs ) ) - - - rule ( selector ( "count()" ) => 107354813 ) - - - rule ( selector ( "incrementCount()" ) => 3842448270 ) - - - rule ( selector ( "owner()" ) => 2376452955 ) - - -endmodule - -module PlainPrankTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KPlainPrankTestContract - - syntax S2KPlainPrankTestContract ::= "S2KPlainPrankTest" [symbol(), klabel(contract_PlainPrankTest)] - - - - syntax Field ::= PlainPrankTestField - - syntax PlainPrankTestField ::= "IS_TEST" [symbol(), klabel(field_PlainPrankTest_IS_TEST)] - - syntax PlainPrankTestField ::= "_failed" [symbol(), klabel(field_PlainPrankTest__failed)] - - syntax PlainPrankTestField ::= "IS_SCRIPT" [symbol(), klabel(field_PlainPrankTest_IS_SCRIPT)] - - syntax PlainPrankTestField ::= "stdstore" [symbol(), klabel(field_PlainPrankTest_stdstore)] - - rule ( #loc ( S2KPlainPrankTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KPlainPrankTest . _failed ) => 0 ) - - - rule ( #loc ( S2KPlainPrankTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KPlainPrankTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KPlainPrankTestContract "." S2KPlainPrankTestMethod [function(), symbol(), klabel(method_PlainPrankTest)] - - syntax S2KPlainPrankTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_PlainPrankTest_S2KISZUndSCRIPT_)] - - syntax S2KPlainPrankTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_PlainPrankTest_S2KISZUndTEST_)] - - syntax S2KPlainPrankTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_PlainPrankTest_S2Kfailed_)] - - syntax S2KPlainPrankTestMethod ::= "S2KinternalCounter" "(" ")" [symbol(), klabel(method_PlainPrankTest_S2KinternalCounter_)] - - syntax S2KPlainPrankTestMethod ::= "S2KtestFailZUndstartPrankZUndexistingAlready" "(" ")" [symbol(), klabel(method_PlainPrankTest_S2KtestFailZUndstartPrankZUndexistingAlready_)] - - syntax S2KPlainPrankTestMethod ::= "S2KtestFailZUndstartPrankZUndinternalCall" "(" ")" [symbol(), klabel(method_PlainPrankTest_S2KtestFailZUndstartPrankZUndinternalCall_)] - - syntax S2KPlainPrankTestMethod ::= "S2KtestZUndprankZUndzeroAddressZUndtrue" "(" ")" [symbol(), klabel(method_PlainPrankTest_S2KtestZUndprankZUndzeroAddressZUndtrue_)] - - syntax S2KPlainPrankTestMethod ::= "S2KtestZUndstartPrankWithOriginZUndtrue" "(" ")" [symbol(), klabel(method_PlainPrankTest_S2KtestZUndstartPrankWithOriginZUndtrue_)] - - syntax S2KPlainPrankTestMethod ::= "S2KtestZUndstartPrankZUndtrue" "(" ")" [symbol(), klabel(method_PlainPrankTest_S2KtestZUndstartPrankZUndtrue_)] - - syntax S2KPlainPrankTestMethod ::= "S2KtestZUndstartPrankZUndzeroAddressZUndtrue" "(" ")" [symbol(), klabel(method_PlainPrankTest_S2KtestZUndstartPrankZUndzeroAddressZUndtrue_)] - - syntax S2KPlainPrankTestMethod ::= "S2KtestZUndstopPrankZUndnotExistent" "(" ")" [symbol(), klabel(method_PlainPrankTest_S2KtestZUndstopPrankZUndnotExistent_)] - - syntax S2KPlainPrankTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_PlainPrankTest_S2Kvm_)] - - rule ( S2KPlainPrankTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KPlainPrankTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KPlainPrankTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KPlainPrankTest . S2KinternalCounter ( ) => #abiCallData ( "internalCounter" , .TypedArgs ) ) - - - rule ( S2KPlainPrankTest . S2KtestFailZUndstartPrankZUndexistingAlready ( ) => #abiCallData ( "testFail_startPrank_existingAlready" , .TypedArgs ) ) - - - rule ( S2KPlainPrankTest . S2KtestFailZUndstartPrankZUndinternalCall ( ) => #abiCallData ( "testFail_startPrank_internalCall" , .TypedArgs ) ) - - - rule ( S2KPlainPrankTest . S2KtestZUndprankZUndzeroAddressZUndtrue ( ) => #abiCallData ( "test_prank_zeroAddress_true" , .TypedArgs ) ) - - - rule ( S2KPlainPrankTest . S2KtestZUndstartPrankWithOriginZUndtrue ( ) => #abiCallData ( "test_startPrankWithOrigin_true" , .TypedArgs ) ) - - - rule ( S2KPlainPrankTest . S2KtestZUndstartPrankZUndtrue ( ) => #abiCallData ( "test_startPrank_true" , .TypedArgs ) ) - - - rule ( S2KPlainPrankTest . S2KtestZUndstartPrankZUndzeroAddressZUndtrue ( ) => #abiCallData ( "test_startPrank_zeroAddress_true" , .TypedArgs ) ) - - - rule ( S2KPlainPrankTest . S2KtestZUndstopPrankZUndnotExistent ( ) => #abiCallData ( "test_stopPrank_notExistent" , .TypedArgs ) ) - - - rule ( S2KPlainPrankTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "internalCounter()" ) => 2687914858 ) - - - rule ( selector ( "testFail_startPrank_existingAlready()" ) => 2262269573 ) - - - rule ( selector ( "testFail_startPrank_internalCall()" ) => 3075676477 ) - - - rule ( selector ( "test_prank_zeroAddress_true()" ) => 3793950116 ) - - - rule ( selector ( "test_startPrankWithOrigin_true()" ) => 1559633499 ) - - - rule ( selector ( "test_startPrank_true()" ) => 243527947 ) - - - rule ( selector ( "test_startPrank_zeroAddress_true()" ) => 858618957 ) - - - rule ( selector ( "test_stopPrank_notExistent()" ) => 279002555 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Prank-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KPrankContract - - syntax S2KPrankContract ::= "S2KPrank" [symbol(), klabel(contract_Prank)] - - - - syntax Field ::= PrankField - - syntax PrankField ::= "count" [symbol(), klabel(field_Prank_count)] - - rule ( #loc ( S2KPrank . count ) => 0 ) - - - syntax Bytes ::= S2KPrankContract "." S2KPrankMethod [function(), symbol(), klabel(method_Prank)] - - syntax S2KPrankMethod ::= "S2Kadd" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Prank_S2Kadd_uint256)] - - syntax S2KPrankMethod ::= "S2Kcount" "(" ")" [symbol(), klabel(method_Prank_S2Kcount_)] - - syntax S2KPrankMethod ::= "S2Kowner" "(" ")" [symbol(), klabel(method_Prank_S2Kowner_)] - - syntax S2KPrankMethod ::= "S2Ksubtract" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Prank_S2Ksubtract_uint256)] - - rule ( S2KPrank . S2Kadd ( V0_value : uint256 ) => #abiCallData ( "add" , #uint256 ( V0_value ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_value ) - - - rule ( S2KPrank . S2Kcount ( ) => #abiCallData ( "count" , .TypedArgs ) ) - - - rule ( S2KPrank . S2Kowner ( ) => #abiCallData ( "owner" , .TypedArgs ) ) - - - rule ( S2KPrank . S2Ksubtract ( V0_value : uint256 ) => #abiCallData ( "subtract" , #uint256 ( V0_value ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_value ) - - - rule ( selector ( "add(uint256)" ) => 268690130 ) - - - rule ( selector ( "count()" ) => 107354813 ) - - - rule ( selector ( "owner()" ) => 2376452955 ) - - - rule ( selector ( "subtract(uint256)" ) => 499146519 ) - - -endmodule - -module PrankTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KPrankTestContract - - syntax S2KPrankTestContract ::= "S2KPrankTest" [symbol(), klabel(contract_PrankTest)] - - - - syntax Field ::= PrankTestField - - syntax PrankTestField ::= "IS_TEST" [symbol(), klabel(field_PrankTest_IS_TEST)] - - syntax PrankTestField ::= "_failed" [symbol(), klabel(field_PrankTest__failed)] - - syntax PrankTestField ::= "IS_SCRIPT" [symbol(), klabel(field_PrankTest_IS_SCRIPT)] - - syntax PrankTestField ::= "stdstore" [symbol(), klabel(field_PrankTest_stdstore)] - - syntax PrankTestField ::= "prankContract" [symbol(), klabel(field_PrankTest_prankContract)] - - rule ( #loc ( S2KPrankTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KPrankTest . _failed ) => 0 ) - - - rule ( #loc ( S2KPrankTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KPrankTest . stdstore ) => 1 ) - - - rule ( #loc ( S2KPrankTest . prankContract ) => 8 ) - - - syntax Bytes ::= S2KPrankTestContract "." S2KPrankTestMethod [function(), symbol(), klabel(method_PrankTest)] - - syntax S2KPrankTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_PrankTest_S2KISZUndSCRIPT_)] - - syntax S2KPrankTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_PrankTest_S2KISZUndTEST_)] - - syntax S2KPrankTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_PrankTest_S2Kfailed_)] - - syntax S2KPrankTestMethod ::= "S2KsetUp" "(" ")" [symbol(), klabel(method_PrankTest_S2KsetUp_)] - - syntax S2KPrankTestMethod ::= "S2KtestAddAsOwner" "(" Int ":" "uint256" ")" [symbol(), klabel(method_PrankTest_S2KtestAddAsOwner_uint256)] - - syntax S2KPrankTestMethod ::= "S2KtestAddStartPrank" "(" Int ":" "uint256" ")" [symbol(), klabel(method_PrankTest_S2KtestAddStartPrank_uint256)] - - syntax S2KPrankTestMethod ::= "S2KtestFailAddPrank" "(" Int ":" "uint256" ")" [symbol(), klabel(method_PrankTest_S2KtestFailAddPrank_uint256)] - - syntax S2KPrankTestMethod ::= "S2KtestSubtractAsTxOrigin" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_PrankTest_S2KtestSubtractAsTxOrigin_uint256_uint256)] - - syntax S2KPrankTestMethod ::= "S2KtestSubtractFail" "(" Int ":" "uint256" ")" [symbol(), klabel(method_PrankTest_S2KtestSubtractFail_uint256)] - - syntax S2KPrankTestMethod ::= "S2KtestSubtractStartPrank" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_PrankTest_S2KtestSubtractStartPrank_uint256_uint256)] - - syntax S2KPrankTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_PrankTest_S2Kvm_)] - - rule ( S2KPrankTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KPrankTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KPrankTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KPrankTest . S2KsetUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( S2KPrankTest . S2KtestAddAsOwner ( V0_x : uint256 ) => #abiCallData ( "testAddAsOwner" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( S2KPrankTest . S2KtestAddStartPrank ( V0_x : uint256 ) => #abiCallData ( "testAddStartPrank" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( S2KPrankTest . S2KtestFailAddPrank ( V0_x : uint256 ) => #abiCallData ( "testFailAddPrank" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( S2KPrankTest . S2KtestSubtractAsTxOrigin ( V0_addValue : uint256 , V1_subValue : uint256 ) => #abiCallData ( "testSubtractAsTxOrigin" , #uint256 ( V0_addValue ) , #uint256 ( V1_subValue ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_addValue ) - andBool ( #rangeUInt ( 256 , V1_subValue ) - )) - - - rule ( S2KPrankTest . S2KtestSubtractFail ( V0_x : uint256 ) => #abiCallData ( "testSubtractFail" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( S2KPrankTest . S2KtestSubtractStartPrank ( V0_addValue : uint256 , V1_subValue : uint256 ) => #abiCallData ( "testSubtractStartPrank" , #uint256 ( V0_addValue ) , #uint256 ( V1_subValue ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_addValue ) - andBool ( #rangeUInt ( 256 , V1_subValue ) - )) - - - rule ( S2KPrankTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testAddAsOwner(uint256)" ) => 1600382513 ) - - - rule ( selector ( "testAddStartPrank(uint256)" ) => 1333759955 ) - - - rule ( selector ( "testFailAddPrank(uint256)" ) => 948023622 ) - - - rule ( selector ( "testSubtractAsTxOrigin(uint256,uint256)" ) => 3798952319 ) - - - rule ( selector ( "testSubtractFail(uint256)" ) => 1433390937 ) - - - rule ( selector ( "testSubtractStartPrank(uint256,uint256)" ) => 262874110 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module PreconditionsTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KPreconditionsTestContract - - syntax S2KPreconditionsTestContract ::= "S2KPreconditionsTest" [symbol(), klabel(contract_PreconditionsTest)] - - - - syntax Field ::= PreconditionsTestField - - syntax PreconditionsTestField ::= "IS_TEST" [symbol(), klabel(field_PreconditionsTest_IS_TEST)] - - syntax PreconditionsTestField ::= "_failed" [symbol(), klabel(field_PreconditionsTest__failed)] - - syntax PreconditionsTestField ::= "IS_SCRIPT" [symbol(), klabel(field_PreconditionsTest_IS_SCRIPT)] - - syntax PreconditionsTestField ::= "stdstore" [symbol(), klabel(field_PreconditionsTest_stdstore)] - - syntax PreconditionsTestField ::= "n" [symbol(), klabel(field_PreconditionsTest_n)] - - rule ( #loc ( S2KPreconditionsTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KPreconditionsTest . _failed ) => 0 ) - - - rule ( #loc ( S2KPreconditionsTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KPreconditionsTest . stdstore ) => 1 ) - - - rule ( #loc ( S2KPreconditionsTest . n ) => 8 ) - - - syntax Bytes ::= S2KPreconditionsTestContract "." S2KPreconditionsTestMethod [function(), symbol(), klabel(method_PreconditionsTest)] - - syntax S2KPreconditionsTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_PreconditionsTest_S2KISZUndSCRIPT_)] - - syntax S2KPreconditionsTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_PreconditionsTest_S2KISZUndTEST_)] - - syntax S2KPreconditionsTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_PreconditionsTest_S2Kfailed_)] - - syntax S2KPreconditionsTestMethod ::= "S2Kkevm" "(" ")" [symbol(), klabel(method_PreconditionsTest_S2Kkevm_)] - - syntax S2KPreconditionsTestMethod ::= "S2KsetUp" "(" ")" [symbol(), klabel(method_PreconditionsTest_S2KsetUp_)] - - syntax S2KPreconditionsTestMethod ::= "S2KtestAssume" "(" ")" [symbol(), klabel(method_PreconditionsTest_S2KtestAssume_)] - - syntax S2KPreconditionsTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_PreconditionsTest_S2Kvm_)] - - rule ( S2KPreconditionsTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KPreconditionsTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KPreconditionsTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KPreconditionsTest . S2Kkevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( S2KPreconditionsTest . S2KsetUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( S2KPreconditionsTest . S2KtestAssume ( ) => #abiCallData ( "testAssume" , .TypedArgs ) ) - - - rule ( S2KPreconditionsTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testAssume()" ) => 3928496829 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module RecordLogsTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KRecordLogsTestContract - - syntax S2KRecordLogsTestContract ::= "S2KRecordLogsTest" [symbol(), klabel(contract_RecordLogsTest)] - - - - syntax Field ::= RecordLogsTestField - - syntax RecordLogsTestField ::= "IS_TEST" [symbol(), klabel(field_RecordLogsTest_IS_TEST)] - - syntax RecordLogsTestField ::= "_failed" [symbol(), klabel(field_RecordLogsTest__failed)] - - syntax RecordLogsTestField ::= "IS_SCRIPT" [symbol(), klabel(field_RecordLogsTest_IS_SCRIPT)] - - syntax RecordLogsTestField ::= "stdstore" [symbol(), klabel(field_RecordLogsTest_stdstore)] - - syntax RecordLogsTestField ::= "emitter" [symbol(), klabel(field_RecordLogsTest_emitter)] - - rule ( #loc ( S2KRecordLogsTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KRecordLogsTest . _failed ) => 0 ) - - - rule ( #loc ( S2KRecordLogsTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KRecordLogsTest . stdstore ) => 1 ) - - - rule ( #loc ( S2KRecordLogsTest . emitter ) => 8 ) - - - syntax Bytes ::= S2KRecordLogsTestContract "." S2KRecordLogsTestMethod [function(), symbol(), klabel(method_RecordLogsTest)] - - syntax S2KRecordLogsTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_RecordLogsTest_S2KISZUndSCRIPT_)] - - syntax S2KRecordLogsTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_RecordLogsTest_S2KISZUndTEST_)] - - syntax S2KRecordLogsTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_RecordLogsTest_S2Kfailed_)] - - syntax S2KRecordLogsTestMethod ::= "S2KsetUp" "(" ")" [symbol(), klabel(method_RecordLogsTest_S2KsetUp_)] - - syntax S2KRecordLogsTestMethod ::= "S2KtestRecordLogs" "(" ")" [symbol(), klabel(method_RecordLogsTest_S2KtestRecordLogs_)] - - syntax S2KRecordLogsTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_RecordLogsTest_S2Kvm_)] - - rule ( S2KRecordLogsTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KRecordLogsTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KRecordLogsTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KRecordLogsTest . S2KsetUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( S2KRecordLogsTest . S2KtestRecordLogs ( ) => #abiCallData ( "testRecordLogs" , .TypedArgs ) ) - - - rule ( S2KRecordLogsTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testRecordLogs()" ) => 3623393624 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Safe-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KSafeContract - - syntax S2KSafeContract ::= "S2KSafe" [symbol(), klabel(contract_Safe)] - - - - syntax Bytes ::= S2KSafeContract "." S2KSafeMethod [function(), symbol(), klabel(method_Safe)] - - syntax S2KSafeMethod ::= "S2Kwithdraw" "(" ")" [symbol(), klabel(method_Safe_S2Kwithdraw_)] - - rule ( S2KSafe . S2Kwithdraw ( ) => #abiCallData ( "withdraw" , .TypedArgs ) ) - - - rule ( selector ( "withdraw()" ) => 1020253707 ) - - -endmodule - -module SafeTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KSafeTestContract - - syntax S2KSafeTestContract ::= "S2KSafeTest" [symbol(), klabel(contract_SafeTest)] - - - - syntax Field ::= SafeTestField - - syntax SafeTestField ::= "IS_TEST" [symbol(), klabel(field_SafeTest_IS_TEST)] - - syntax SafeTestField ::= "_failed" [symbol(), klabel(field_SafeTest__failed)] - - syntax SafeTestField ::= "IS_SCRIPT" [symbol(), klabel(field_SafeTest_IS_SCRIPT)] - - syntax SafeTestField ::= "stdstore" [symbol(), klabel(field_SafeTest_stdstore)] - - syntax SafeTestField ::= "safe" [symbol(), klabel(field_SafeTest_safe)] - - rule ( #loc ( S2KSafeTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KSafeTest . _failed ) => 0 ) - - - rule ( #loc ( S2KSafeTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KSafeTest . stdstore ) => 1 ) - - - rule ( #loc ( S2KSafeTest . safe ) => 8 ) - - - syntax Bytes ::= S2KSafeTestContract "." S2KSafeTestMethod [function(), symbol(), klabel(method_SafeTest)] - - syntax S2KSafeTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_SafeTest_S2KISZUndSCRIPT_)] - - syntax S2KSafeTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_SafeTest_S2KISZUndTEST_)] - - syntax S2KSafeTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_SafeTest_S2Kfailed_)] - - syntax S2KSafeTestMethod ::= "S2KsetUp" "(" ")" [symbol(), klabel(method_SafeTest_S2KsetUp_)] - - syntax S2KSafeTestMethod ::= "S2KtestWithdraw" "(" ")" [symbol(), klabel(method_SafeTest_S2KtestWithdraw_)] - - syntax S2KSafeTestMethod ::= "S2KtestWithdrawFuzz" "(" Int ":" "uint96" ")" [symbol(), klabel(method_SafeTest_S2KtestWithdrawFuzz_uint96)] - - syntax S2KSafeTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_SafeTest_S2Kvm_)] - - rule ( S2KSafeTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KSafeTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KSafeTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KSafeTest . S2KsetUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( S2KSafeTest . S2KtestWithdraw ( ) => #abiCallData ( "testWithdraw" , .TypedArgs ) ) - - - rule ( S2KSafeTest . S2KtestWithdrawFuzz ( V0_amount : uint96 ) => #abiCallData ( "testWithdrawFuzz" , #uint96 ( V0_amount ) , .TypedArgs ) ) - ensures #rangeUInt ( 96 , V0_amount ) - - - rule ( S2KSafeTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testWithdraw()" ) => 3574182252 ) - - - rule ( selector ( "testWithdrawFuzz(uint96)" ) => 3503970826 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Script-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KScriptContract - - syntax S2KScriptContract ::= "S2KScript" [symbol(), klabel(contract_Script)] - - - - syntax Field ::= ScriptField - - syntax ScriptField ::= "IS_SCRIPT" [symbol(), klabel(field_Script_IS_SCRIPT)] - - rule ( #loc ( S2KScript . IS_SCRIPT ) => 0 ) - - - syntax Bytes ::= S2KScriptContract "." S2KScriptMethod [function(), symbol(), klabel(method_Script)] - - syntax S2KScriptMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_Script_S2KISZUndSCRIPT_)] - - syntax S2KScriptMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_Script_S2Kvm_)] - - rule ( S2KScript . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KScript . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Setup2Test-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KSetup2TestContract - - syntax S2KSetup2TestContract ::= "S2KSetup2Test" [symbol(), klabel(contract_Setup2Test)] - - - - syntax Field ::= Setup2TestField - - syntax Setup2TestField ::= "IS_TEST" [symbol(), klabel(field_Setup2Test_IS_TEST)] - - syntax Setup2TestField ::= "_failed" [symbol(), klabel(field_Setup2Test__failed)] - - syntax Setup2TestField ::= "IS_SCRIPT" [symbol(), klabel(field_Setup2Test_IS_SCRIPT)] - - syntax Setup2TestField ::= "stdstore" [symbol(), klabel(field_Setup2Test_stdstore)] - - syntax Setup2TestField ::= "a" [symbol(), klabel(field_Setup2Test_a)] - - syntax Setup2TestField ::= "b" [symbol(), klabel(field_Setup2Test_b)] - - syntax Setup2TestField ::= "c" [symbol(), klabel(field_Setup2Test_c)] - - rule ( #loc ( S2KSetup2Test . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KSetup2Test . _failed ) => 0 ) - - - rule ( #loc ( S2KSetup2Test . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KSetup2Test . stdstore ) => 1 ) - - - rule ( #loc ( S2KSetup2Test . a ) => 8 ) - - - rule ( #loc ( S2KSetup2Test . b ) => 9 ) - - - rule ( #loc ( S2KSetup2Test . c ) => 10 ) - - - syntax Bytes ::= S2KSetup2TestContract "." S2KSetup2TestMethod [function(), symbol(), klabel(method_Setup2Test)] - - syntax S2KSetup2TestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_Setup2Test_S2KISZUndSCRIPT_)] - - syntax S2KSetup2TestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_Setup2Test_S2KISZUndTEST_)] - - syntax S2KSetup2TestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_Setup2Test_S2Kfailed_)] - - syntax S2KSetup2TestMethod ::= "S2KsetUp" "(" ")" [symbol(), klabel(method_Setup2Test_S2KsetUp_)] - - syntax S2KSetup2TestMethod ::= "S2KtestFailZUndsetup" "(" ")" [symbol(), klabel(method_Setup2Test_S2KtestFailZUndsetup_)] - - syntax S2KSetup2TestMethod ::= "S2KtestZUndsetup" "(" ")" [symbol(), klabel(method_Setup2Test_S2KtestZUndsetup_)] - - syntax S2KSetup2TestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_Setup2Test_S2Kvm_)] - - rule ( S2KSetup2Test . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KSetup2Test . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KSetup2Test . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KSetup2Test . S2KsetUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( S2KSetup2Test . S2KtestFailZUndsetup ( ) => #abiCallData ( "testFail_setup" , .TypedArgs ) ) - - - rule ( S2KSetup2Test . S2KtestZUndsetup ( ) => #abiCallData ( "test_setup" , .TypedArgs ) ) - - - rule ( S2KSetup2Test . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testFail_setup()" ) => 3501410022 ) - - - rule ( selector ( "test_setup()" ) => 2001288179 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module SetUpDeployTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KSetUpDeployTestContract - - syntax S2KSetUpDeployTestContract ::= "S2KSetUpDeployTest" [symbol(), klabel(contract_SetUpDeployTest)] - - - - syntax Field ::= SetUpDeployTestField - - syntax SetUpDeployTestField ::= "IS_TEST" [symbol(), klabel(field_SetUpDeployTest_IS_TEST)] - - syntax SetUpDeployTestField ::= "_failed" [symbol(), klabel(field_SetUpDeployTest__failed)] - - syntax SetUpDeployTestField ::= "IS_SCRIPT" [symbol(), klabel(field_SetUpDeployTest_IS_SCRIPT)] - - syntax SetUpDeployTestField ::= "stdstore" [symbol(), klabel(field_SetUpDeployTest_stdstore)] - - syntax SetUpDeployTestField ::= "token" [symbol(), klabel(field_SetUpDeployTest_token)] - - rule ( #loc ( S2KSetUpDeployTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KSetUpDeployTest . _failed ) => 0 ) - - - rule ( #loc ( S2KSetUpDeployTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KSetUpDeployTest . stdstore ) => 1 ) - - - rule ( #loc ( S2KSetUpDeployTest . token ) => 8 ) - - - syntax Bytes ::= S2KSetUpDeployTestContract "." S2KSetUpDeployTestMethod [function(), symbol(), klabel(method_SetUpDeployTest)] - - syntax S2KSetUpDeployTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_SetUpDeployTest_S2KISZUndSCRIPT_)] - - syntax S2KSetUpDeployTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_SetUpDeployTest_S2KISZUndTEST_)] - - syntax S2KSetUpDeployTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_SetUpDeployTest_S2Kfailed_)] - - syntax S2KSetUpDeployTestMethod ::= "S2KsetUp" "(" ")" [symbol(), klabel(method_SetUpDeployTest_S2KsetUp_)] - - syntax S2KSetUpDeployTestMethod ::= "S2KtestZUndextcodesize" "(" ")" [symbol(), klabel(method_SetUpDeployTest_S2KtestZUndextcodesize_)] - - syntax S2KSetUpDeployTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_SetUpDeployTest_S2Kvm_)] - - rule ( S2KSetUpDeployTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KSetUpDeployTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KSetUpDeployTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KSetUpDeployTest . S2KsetUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( S2KSetUpDeployTest . S2KtestZUndextcodesize ( ) => #abiCallData ( "test_extcodesize" , .TypedArgs ) ) - - - rule ( S2KSetUpDeployTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "test_extcodesize()" ) => 1657400005 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module SetUpTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KSetUpTestContract - - syntax S2KSetUpTestContract ::= "S2KSetUpTest" [symbol(), klabel(contract_SetUpTest)] - - - - syntax Field ::= SetUpTestField - - syntax SetUpTestField ::= "IS_TEST" [symbol(), klabel(field_SetUpTest_IS_TEST)] - - syntax SetUpTestField ::= "_failed" [symbol(), klabel(field_SetUpTest__failed)] - - syntax SetUpTestField ::= "IS_SCRIPT" [symbol(), klabel(field_SetUpTest_IS_SCRIPT)] - - syntax SetUpTestField ::= "stdstore" [symbol(), klabel(field_SetUpTest_stdstore)] - - syntax SetUpTestField ::= "counter" [symbol(), klabel(field_SetUpTest_counter)] - - rule ( #loc ( S2KSetUpTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KSetUpTest . _failed ) => 0 ) - - - rule ( #loc ( S2KSetUpTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KSetUpTest . stdstore ) => 1 ) - - - rule ( #loc ( S2KSetUpTest . counter ) => 8 ) - - - syntax Bytes ::= S2KSetUpTestContract "." S2KSetUpTestMethod [function(), symbol(), klabel(method_SetUpTest)] - - syntax S2KSetUpTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_SetUpTest_S2KISZUndSCRIPT_)] - - syntax S2KSetUpTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_SetUpTest_S2KISZUndTEST_)] - - syntax S2KSetUpTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_SetUpTest_S2Kfailed_)] - - syntax S2KSetUpTestMethod ::= "S2KsetUp" "(" ")" [symbol(), klabel(method_SetUpTest_S2KsetUp_)] - - syntax S2KSetUpTestMethod ::= "S2KtestSetUpCalled" "(" ")" [symbol(), klabel(method_SetUpTest_S2KtestSetUpCalled_)] - - syntax S2KSetUpTestMethod ::= "S2KtestSetUpCalledSymbolic" "(" Int ":" "uint256" ")" [symbol(), klabel(method_SetUpTest_S2KtestSetUpCalledSymbolic_uint256)] - - syntax S2KSetUpTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_SetUpTest_S2Kvm_)] - - rule ( S2KSetUpTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KSetUpTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KSetUpTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KSetUpTest . S2KsetUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( S2KSetUpTest . S2KtestSetUpCalled ( ) => #abiCallData ( "testSetUpCalled" , .TypedArgs ) ) - - - rule ( S2KSetUpTest . S2KtestSetUpCalledSymbolic ( V0_x : uint256 ) => #abiCallData ( "testSetUpCalledSymbolic" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( S2KSetUpTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testSetUpCalled()" ) => 3967804529 ) - - - rule ( selector ( "testSetUpCalledSymbolic(uint256)" ) => 3332480466 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module SignTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KSignTestContract - - syntax S2KSignTestContract ::= "S2KSignTest" [symbol(), klabel(contract_SignTest)] - - - - syntax Field ::= SignTestField - - syntax SignTestField ::= "IS_TEST" [symbol(), klabel(field_SignTest_IS_TEST)] - - syntax SignTestField ::= "_failed" [symbol(), klabel(field_SignTest__failed)] - - syntax SignTestField ::= "IS_SCRIPT" [symbol(), klabel(field_SignTest_IS_SCRIPT)] - - syntax SignTestField ::= "stdstore" [symbol(), klabel(field_SignTest_stdstore)] - - rule ( #loc ( S2KSignTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KSignTest . _failed ) => 0 ) - - - rule ( #loc ( S2KSignTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KSignTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KSignTestContract "." S2KSignTestMethod [function(), symbol(), klabel(method_SignTest)] - - syntax S2KSignTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_SignTest_S2KISZUndSCRIPT_)] - - syntax S2KSignTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_SignTest_S2KISZUndTEST_)] - - syntax S2KSignTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_SignTest_S2Kfailed_)] - - syntax S2KSignTestMethod ::= "S2KtestSign" "(" ")" [symbol(), klabel(method_SignTest_S2KtestSign_)] - - syntax S2KSignTestMethod ::= "S2KtestSignZUndsymbolic" "(" Int ":" "uint256" ")" [symbol(), klabel(method_SignTest_S2KtestSignZUndsymbolic_uint256)] - - syntax S2KSignTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_SignTest_S2Kvm_)] - - rule ( S2KSignTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KSignTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KSignTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KSignTest . S2KtestSign ( ) => #abiCallData ( "testSign" , .TypedArgs ) ) - - - rule ( S2KSignTest . S2KtestSignZUndsymbolic ( V0_pk : uint256 ) => #abiCallData ( "testSign_symbolic" , #uint256 ( V0_pk ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_pk ) - - - rule ( S2KSignTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testSign()" ) => 3985576159 ) - - - rule ( selector ( "testSign_symbolic(uint256)" ) => 2942025997 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module AssertTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KAssertTestContract - - syntax S2KAssertTestContract ::= "S2KAssertTest" [symbol(), klabel(contract_AssertTest)] - - - - syntax Field ::= AssertTestField - - syntax AssertTestField ::= "IS_TEST" [symbol(), klabel(field_AssertTest_IS_TEST)] - - syntax AssertTestField ::= "_failed" [symbol(), klabel(field_AssertTest__failed)] - - syntax AssertTestField ::= "IS_SCRIPT" [symbol(), klabel(field_AssertTest_IS_SCRIPT)] - - syntax AssertTestField ::= "stdstore" [symbol(), klabel(field_AssertTest_stdstore)] - - syntax AssertTestField ::= "y" [symbol(), klabel(field_AssertTest_y)] - - rule ( #loc ( S2KAssertTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KAssertTest . _failed ) => 0 ) - - - rule ( #loc ( S2KAssertTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KAssertTest . stdstore ) => 1 ) - - - rule ( #loc ( S2KAssertTest . y ) => 8 ) - - - syntax Bytes ::= S2KAssertTestContract "." S2KAssertTestMethod [function(), symbol(), klabel(method_AssertTest)] - - syntax S2KAssertTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_AssertTest_S2KISZUndSCRIPT_)] - - syntax S2KAssertTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_AssertTest_S2KISZUndTEST_)] - - syntax S2KAssertTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_AssertTest_S2Kfailed_)] - - syntax S2KAssertTestMethod ::= "S2Kkevm" "(" ")" [symbol(), klabel(method_AssertTest_S2Kkevm_)] - - syntax S2KAssertTestMethod ::= "S2KsetUp" "(" ")" [symbol(), klabel(method_AssertTest_S2KsetUp_)] - - syntax S2KAssertTestMethod ::= "S2KtestFailZUndassertZUndfalse" "(" ")" [symbol(), klabel(method_AssertTest_S2KtestFailZUndassertZUndfalse_)] - - syntax S2KAssertTestMethod ::= "S2KtestFailZUndassertZUndtrue" "(" ")" [symbol(), klabel(method_AssertTest_S2KtestFailZUndassertZUndtrue_)] - - syntax S2KAssertTestMethod ::= "S2KtestFailZUndexpectZUndrevert" "(" ")" [symbol(), klabel(method_AssertTest_S2KtestFailZUndexpectZUndrevert_)] - - syntax S2KAssertTestMethod ::= "S2KtestZUndassertZUndfalse" "(" ")" [symbol(), klabel(method_AssertTest_S2KtestZUndassertZUndfalse_)] - - syntax S2KAssertTestMethod ::= "S2KtestZUndassertZUndtrue" "(" ")" [symbol(), klabel(method_AssertTest_S2KtestZUndassertZUndtrue_)] - - syntax S2KAssertTestMethod ::= "S2KtestZUndassertZUndtrueZUndbranch" "(" Int ":" "uint256" ")" [symbol(), klabel(method_AssertTest_S2KtestZUndassertZUndtrueZUndbranch_uint256)] - - syntax S2KAssertTestMethod ::= "S2KtestZUndbranchZUndmerge" "(" Int ":" "uint256" ")" [symbol(), klabel(method_AssertTest_S2KtestZUndbranchZUndmerge_uint256)] - - syntax S2KAssertTestMethod ::= "S2KtestZUndfailingZUndbranch" "(" Int ":" "uint256" ")" [symbol(), klabel(method_AssertTest_S2KtestZUndfailingZUndbranch_uint256)] - - syntax S2KAssertTestMethod ::= "S2KtestZUndrevertZUndbranch" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_AssertTest_S2KtestZUndrevertZUndbranch_uint256_uint256)] - - syntax S2KAssertTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_AssertTest_S2Kvm_)] - - rule ( S2KAssertTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KAssertTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KAssertTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KAssertTest . S2Kkevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( S2KAssertTest . S2KsetUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( S2KAssertTest . S2KtestFailZUndassertZUndfalse ( ) => #abiCallData ( "testFail_assert_false" , .TypedArgs ) ) - - - rule ( S2KAssertTest . S2KtestFailZUndassertZUndtrue ( ) => #abiCallData ( "testFail_assert_true" , .TypedArgs ) ) - - - rule ( S2KAssertTest . S2KtestFailZUndexpectZUndrevert ( ) => #abiCallData ( "testFail_expect_revert" , .TypedArgs ) ) - - - rule ( S2KAssertTest . S2KtestZUndassertZUndfalse ( ) => #abiCallData ( "test_assert_false" , .TypedArgs ) ) - - - rule ( S2KAssertTest . S2KtestZUndassertZUndtrue ( ) => #abiCallData ( "test_assert_true" , .TypedArgs ) ) - - - rule ( S2KAssertTest . S2KtestZUndassertZUndtrueZUndbranch ( V0_x : uint256 ) => #abiCallData ( "test_assert_true_branch" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( S2KAssertTest . S2KtestZUndbranchZUndmerge ( V0_x : uint256 ) => #abiCallData ( "test_branch_merge" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( S2KAssertTest . S2KtestZUndfailingZUndbranch ( V0_x : uint256 ) => #abiCallData ( "test_failing_branch" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( S2KAssertTest . S2KtestZUndrevertZUndbranch ( V0_x : uint256 , V1_y : uint256 ) => #abiCallData ( "test_revert_branch" , #uint256 ( V0_x ) , #uint256 ( V1_y ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_x ) - andBool ( #rangeUInt ( 256 , V1_y ) - )) - - - rule ( S2KAssertTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testFail_assert_false()" ) => 2057948334 ) - - - rule ( selector ( "testFail_assert_true()" ) => 409427266 ) - - - rule ( selector ( "testFail_expect_revert()" ) => 709747105 ) - - - rule ( selector ( "test_assert_false()" ) => 1574882301 ) - - - rule ( selector ( "test_assert_true()" ) => 906863826 ) - - - rule ( selector ( "test_assert_true_branch(uint256)" ) => 3267411143 ) - - - rule ( selector ( "test_branch_merge(uint256)" ) => 1000659212 ) - - - rule ( selector ( "test_failing_branch(uint256)" ) => 1176678741 ) - - - rule ( selector ( "test_revert_branch(uint256,uint256)" ) => 2349784459 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module SnapshotTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KSnapshotTestContract - - syntax S2KSnapshotTestContract ::= "S2KSnapshotTest" [symbol(), klabel(contract_SnapshotTest)] - - - - syntax Field ::= SnapshotTestField - - syntax SnapshotTestField ::= "IS_TEST" [symbol(), klabel(field_SnapshotTest_IS_TEST)] - - syntax SnapshotTestField ::= "_failed" [symbol(), klabel(field_SnapshotTest__failed)] - - syntax SnapshotTestField ::= "IS_SCRIPT" [symbol(), klabel(field_SnapshotTest_IS_SCRIPT)] - - syntax SnapshotTestField ::= "stdstore" [symbol(), klabel(field_SnapshotTest_stdstore)] - - syntax SnapshotTestField ::= "store" [symbol(), klabel(field_SnapshotTest_store)] - - rule ( #loc ( S2KSnapshotTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KSnapshotTest . _failed ) => 0 ) - - - rule ( #loc ( S2KSnapshotTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KSnapshotTest . stdstore ) => 1 ) - - - rule ( #loc ( S2KSnapshotTest . store ) => 8 ) - - - syntax Bytes ::= S2KSnapshotTestContract "." S2KSnapshotTestMethod [function(), symbol(), klabel(method_SnapshotTest)] - - syntax S2KSnapshotTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_SnapshotTest_S2KISZUndSCRIPT_)] - - syntax S2KSnapshotTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_SnapshotTest_S2KISZUndTEST_)] - - syntax S2KSnapshotTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_SnapshotTest_S2Kfailed_)] - - syntax S2KSnapshotTestMethod ::= "S2KsetUp" "(" ")" [symbol(), klabel(method_SnapshotTest_S2KsetUp_)] - - syntax S2KSnapshotTestMethod ::= "S2KtestSnapshot" "(" ")" [symbol(), klabel(method_SnapshotTest_S2KtestSnapshot_)] - - syntax S2KSnapshotTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_SnapshotTest_S2Kvm_)] - - rule ( S2KSnapshotTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KSnapshotTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KSnapshotTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KSnapshotTest . S2KsetUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( S2KSnapshotTest . S2KtestSnapshot ( ) => #abiCallData ( "testSnapshot" , .TypedArgs ) ) - - - rule ( S2KSnapshotTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testSnapshot()" ) => 3204135818 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Store-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KStoreContract - - syntax S2KStoreContract ::= "S2KStore" [symbol(), klabel(contract_Store)] - - - - syntax Field ::= StoreField - - syntax StoreField ::= "testNumber" [symbol(), klabel(field_Store_testNumber)] - - rule ( #loc ( S2KStore . testNumber ) => 0 ) - - -endmodule - -module StoreTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KStoreTestContract - - syntax S2KStoreTestContract ::= "S2KStoreTest" [symbol(), klabel(contract_StoreTest)] - - - - syntax Field ::= StoreTestField - - syntax StoreTestField ::= "IS_TEST" [symbol(), klabel(field_StoreTest_IS_TEST)] - - syntax StoreTestField ::= "_failed" [symbol(), klabel(field_StoreTest__failed)] - - syntax StoreTestField ::= "IS_SCRIPT" [symbol(), klabel(field_StoreTest_IS_SCRIPT)] - - syntax StoreTestField ::= "stdstore" [symbol(), klabel(field_StoreTest_stdstore)] - - rule ( #loc ( S2KStoreTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KStoreTest . _failed ) => 0 ) - - - rule ( #loc ( S2KStoreTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KStoreTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KStoreTestContract "." S2KStoreTestMethod [function(), symbol(), klabel(method_StoreTest)] - - syntax S2KStoreTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_StoreTest_S2KISZUndSCRIPT_)] - - syntax S2KStoreTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_StoreTest_S2KISZUndTEST_)] - - syntax S2KStoreTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_StoreTest_S2Kfailed_)] - - syntax S2KStoreTestMethod ::= "S2KtestAccesses" "(" ")" [symbol(), klabel(method_StoreTest_S2KtestAccesses_)] - - syntax S2KStoreTestMethod ::= "S2KtestGasLoadColdVM" "(" ")" [symbol(), klabel(method_StoreTest_S2KtestGasLoadColdVM_)] - - syntax S2KStoreTestMethod ::= "S2KtestGasLoadWarmUp" "(" ")" [symbol(), klabel(method_StoreTest_S2KtestGasLoadWarmUp_)] - - syntax S2KStoreTestMethod ::= "S2KtestGasLoadWarmVM" "(" ")" [symbol(), klabel(method_StoreTest_S2KtestGasLoadWarmVM_)] - - syntax S2KStoreTestMethod ::= "S2KtestGasStoreColdVM" "(" ")" [symbol(), klabel(method_StoreTest_S2KtestGasStoreColdVM_)] - - syntax S2KStoreTestMethod ::= "S2KtestGasStoreWarmUp" "(" ")" [symbol(), klabel(method_StoreTest_S2KtestGasStoreWarmUp_)] - - syntax S2KStoreTestMethod ::= "S2KtestGasStoreWarmVM" "(" ")" [symbol(), klabel(method_StoreTest_S2KtestGasStoreWarmVM_)] - - syntax S2KStoreTestMethod ::= "S2KtestLoadNonExistent" "(" ")" [symbol(), klabel(method_StoreTest_S2KtestLoadNonExistent_)] - - syntax S2KStoreTestMethod ::= "S2KtestStoreLoad" "(" ")" [symbol(), klabel(method_StoreTest_S2KtestStoreLoad_)] - - syntax S2KStoreTestMethod ::= "S2KtestStoreLoadNonExistent" "(" ")" [symbol(), klabel(method_StoreTest_S2KtestStoreLoadNonExistent_)] - - syntax S2KStoreTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_StoreTest_S2Kvm_)] - - rule ( S2KStoreTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KStoreTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KStoreTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KStoreTest . S2KtestAccesses ( ) => #abiCallData ( "testAccesses" , .TypedArgs ) ) - - - rule ( S2KStoreTest . S2KtestGasLoadColdVM ( ) => #abiCallData ( "testGasLoadColdVM" , .TypedArgs ) ) - - - rule ( S2KStoreTest . S2KtestGasLoadWarmUp ( ) => #abiCallData ( "testGasLoadWarmUp" , .TypedArgs ) ) - - - rule ( S2KStoreTest . S2KtestGasLoadWarmVM ( ) => #abiCallData ( "testGasLoadWarmVM" , .TypedArgs ) ) - - - rule ( S2KStoreTest . S2KtestGasStoreColdVM ( ) => #abiCallData ( "testGasStoreColdVM" , .TypedArgs ) ) - - - rule ( S2KStoreTest . S2KtestGasStoreWarmUp ( ) => #abiCallData ( "testGasStoreWarmUp" , .TypedArgs ) ) - - - rule ( S2KStoreTest . S2KtestGasStoreWarmVM ( ) => #abiCallData ( "testGasStoreWarmVM" , .TypedArgs ) ) - - - rule ( S2KStoreTest . S2KtestLoadNonExistent ( ) => #abiCallData ( "testLoadNonExistent" , .TypedArgs ) ) - - - rule ( S2KStoreTest . S2KtestStoreLoad ( ) => #abiCallData ( "testStoreLoad" , .TypedArgs ) ) - - - rule ( S2KStoreTest . S2KtestStoreLoadNonExistent ( ) => #abiCallData ( "testStoreLoadNonExistent" , .TypedArgs ) ) - - - rule ( S2KStoreTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testAccesses()" ) => 159648693 ) - - - rule ( selector ( "testGasLoadColdVM()" ) => 3801282741 ) - - - rule ( selector ( "testGasLoadWarmUp()" ) => 604011046 ) - - - rule ( selector ( "testGasLoadWarmVM()" ) => 2607902342 ) - - - rule ( selector ( "testGasStoreColdVM()" ) => 2309593716 ) - - - rule ( selector ( "testGasStoreWarmUp()" ) => 1546465326 ) - - - rule ( selector ( "testGasStoreWarmVM()" ) => 100073271 ) - - - rule ( selector ( "testLoadNonExistent()" ) => 2275977243 ) - - - rule ( selector ( "testStoreLoad()" ) => 1208516723 ) - - - rule ( selector ( "testStoreLoadNonExistent()" ) => 3912017339 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module SymbolicStorageTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KSymbolicStorageTestContract - - syntax S2KSymbolicStorageTestContract ::= "S2KSymbolicStorageTest" [symbol(), klabel(contract_SymbolicStorageTest)] - - - - syntax Field ::= SymbolicStorageTestField - - syntax SymbolicStorageTestField ::= "IS_TEST" [symbol(), klabel(field_SymbolicStorageTest_IS_TEST)] - - syntax SymbolicStorageTestField ::= "_failed" [symbol(), klabel(field_SymbolicStorageTest__failed)] - - syntax SymbolicStorageTestField ::= "IS_SCRIPT" [symbol(), klabel(field_SymbolicStorageTest_IS_SCRIPT)] - - syntax SymbolicStorageTestField ::= "stdstore" [symbol(), klabel(field_SymbolicStorageTest_stdstore)] - - rule ( #loc ( S2KSymbolicStorageTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KSymbolicStorageTest . _failed ) => 0 ) - - - rule ( #loc ( S2KSymbolicStorageTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KSymbolicStorageTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KSymbolicStorageTestContract "." S2KSymbolicStorageTestMethod [function(), symbol(), klabel(method_SymbolicStorageTest)] - - syntax S2KSymbolicStorageTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_SymbolicStorageTest_S2KISZUndSCRIPT_)] - - syntax S2KSymbolicStorageTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_SymbolicStorageTest_S2KISZUndTEST_)] - - syntax S2KSymbolicStorageTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_SymbolicStorageTest_S2Kfailed_)] - - syntax S2KSymbolicStorageTestMethod ::= "S2Kkevm" "(" ")" [symbol(), klabel(method_SymbolicStorageTest_S2Kkevm_)] - - syntax S2KSymbolicStorageTestMethod ::= "S2KtestEmptyInitialStorage" "(" Int ":" "uint256" ")" [symbol(), klabel(method_SymbolicStorageTest_S2KtestEmptyInitialStorage_uint256)] - - syntax S2KSymbolicStorageTestMethod ::= "S2KtestFailZUndSymbolicStorage" "(" Int ":" "uint256" ")" [symbol(), klabel(method_SymbolicStorageTest_S2KtestFailZUndSymbolicStorage_uint256)] - - syntax S2KSymbolicStorageTestMethod ::= "S2KtestFailZUndSymbolicStorage1" "(" Int ":" "uint256" ")" [symbol(), klabel(method_SymbolicStorageTest_S2KtestFailZUndSymbolicStorage1_uint256)] - - syntax S2KSymbolicStorageTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_SymbolicStorageTest_S2Kvm_)] - - rule ( S2KSymbolicStorageTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KSymbolicStorageTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KSymbolicStorageTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KSymbolicStorageTest . S2Kkevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( S2KSymbolicStorageTest . S2KtestEmptyInitialStorage ( V0_slot : uint256 ) => #abiCallData ( "testEmptyInitialStorage" , #uint256 ( V0_slot ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_slot ) - - - rule ( S2KSymbolicStorageTest . S2KtestFailZUndSymbolicStorage ( V0_slot : uint256 ) => #abiCallData ( "testFail_SymbolicStorage" , #uint256 ( V0_slot ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_slot ) - - - rule ( S2KSymbolicStorageTest . S2KtestFailZUndSymbolicStorage1 ( V0_slot : uint256 ) => #abiCallData ( "testFail_SymbolicStorage1" , #uint256 ( V0_slot ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_slot ) - - - rule ( S2KSymbolicStorageTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - - rule ( selector ( "testEmptyInitialStorage(uint256)" ) => 2517793094 ) - - - rule ( selector ( "testFail_SymbolicStorage(uint256)" ) => 821477045 ) - - - rule ( selector ( "testFail_SymbolicStorage1(uint256)" ) => 2899744320 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module SymbolicStore-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KSymbolicStoreContract - - syntax S2KSymbolicStoreContract ::= "S2KSymbolicStore" [symbol(), klabel(contract_SymbolicStore)] - - - - syntax Field ::= SymbolicStoreField - - syntax SymbolicStoreField ::= "testNumber" [symbol(), klabel(field_SymbolicStore_testNumber)] - - rule ( #loc ( S2KSymbolicStore . testNumber ) => 0 ) - - -endmodule - -module Test-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KTestContract - - syntax S2KTestContract ::= "S2KTest" [symbol(), klabel(contract_Test)] - - - - syntax Field ::= TestField - - syntax TestField ::= "IS_TEST" [symbol(), klabel(field_Test_IS_TEST)] - - syntax TestField ::= "_failed" [symbol(), klabel(field_Test__failed)] - - syntax TestField ::= "IS_SCRIPT" [symbol(), klabel(field_Test_IS_SCRIPT)] - - syntax TestField ::= "stdstore" [symbol(), klabel(field_Test_stdstore)] - - rule ( #loc ( S2KTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KTest . _failed ) => 0 ) - - - rule ( #loc ( S2KTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KTestContract "." S2KTestMethod [function(), symbol(), klabel(method_Test)] - - syntax S2KTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_Test_S2KISZUndSCRIPT_)] - - syntax S2KTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_Test_S2KISZUndTEST_)] - - syntax S2KTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_Test_S2Kfailed_)] - - syntax S2KTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_Test_S2Kvm_)] - - rule ( S2KTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module stdError-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KstdErrorContract - - syntax S2KstdErrorContract ::= "S2KstdError" [symbol(), klabel(contract_stdError)] - - - - syntax Bytes ::= S2KstdErrorContract "." S2KstdErrorMethod [function(), symbol(), klabel(method_stdError)] - - syntax S2KstdErrorMethod ::= "S2KarithmeticError" "(" ")" [symbol(), klabel(method_stdError_S2KarithmeticError_)] - - syntax S2KstdErrorMethod ::= "S2KassertionError" "(" ")" [symbol(), klabel(method_stdError_S2KassertionError_)] - - syntax S2KstdErrorMethod ::= "S2KdivisionError" "(" ")" [symbol(), klabel(method_stdError_S2KdivisionError_)] - - syntax S2KstdErrorMethod ::= "S2KencodeStorageError" "(" ")" [symbol(), klabel(method_stdError_S2KencodeStorageError_)] - - syntax S2KstdErrorMethod ::= "S2KenumConversionError" "(" ")" [symbol(), klabel(method_stdError_S2KenumConversionError_)] - - syntax S2KstdErrorMethod ::= "S2KindexOOBError" "(" ")" [symbol(), klabel(method_stdError_S2KindexOOBError_)] - - syntax S2KstdErrorMethod ::= "S2KlowLevelError" "(" ")" [symbol(), klabel(method_stdError_S2KlowLevelError_)] - - syntax S2KstdErrorMethod ::= "S2KmemOverflowError" "(" ")" [symbol(), klabel(method_stdError_S2KmemOverflowError_)] - - syntax S2KstdErrorMethod ::= "S2KpopError" "(" ")" [symbol(), klabel(method_stdError_S2KpopError_)] - - syntax S2KstdErrorMethod ::= "S2KzeroVarError" "(" ")" [symbol(), klabel(method_stdError_S2KzeroVarError_)] - - rule ( S2KstdError . S2KarithmeticError ( ) => #abiCallData ( "arithmeticError" , .TypedArgs ) ) - - - rule ( S2KstdError . S2KassertionError ( ) => #abiCallData ( "assertionError" , .TypedArgs ) ) - - - rule ( S2KstdError . S2KdivisionError ( ) => #abiCallData ( "divisionError" , .TypedArgs ) ) - - - rule ( S2KstdError . S2KencodeStorageError ( ) => #abiCallData ( "encodeStorageError" , .TypedArgs ) ) - - - rule ( S2KstdError . S2KenumConversionError ( ) => #abiCallData ( "enumConversionError" , .TypedArgs ) ) - - - rule ( S2KstdError . S2KindexOOBError ( ) => #abiCallData ( "indexOOBError" , .TypedArgs ) ) - - - rule ( S2KstdError . S2KlowLevelError ( ) => #abiCallData ( "lowLevelError" , .TypedArgs ) ) - - - rule ( S2KstdError . S2KmemOverflowError ( ) => #abiCallData ( "memOverflowError" , .TypedArgs ) ) - - - rule ( S2KstdError . S2KpopError ( ) => #abiCallData ( "popError" , .TypedArgs ) ) - - - rule ( S2KstdError . S2KzeroVarError ( ) => #abiCallData ( "zeroVarError" , .TypedArgs ) ) - - - rule ( selector ( "arithmeticError()" ) => 2308253967 ) - - - rule ( selector ( "assertionError()" ) => 271788407 ) - - - rule ( selector ( "divisionError()" ) => 4202187332 ) - - - rule ( selector ( "encodeStorageError()" ) => 3512788190 ) - - - rule ( selector ( "enumConversionError()" ) => 501503328 ) - - - rule ( selector ( "indexOOBError()" ) => 99517970 ) - - - rule ( selector ( "lowLevelError()" ) => 2889716422 ) - - - rule ( selector ( "memOverflowError()" ) => 2557239144 ) - - - rule ( selector ( "popError()" ) => 2989344077 ) - - - rule ( selector ( "zeroVarError()" ) => 3061221850 ) - - -endmodule - -module stdMath-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KstdMathContract - - syntax S2KstdMathContract ::= "S2KstdMath" [symbol(), klabel(contract_stdMath)] - - - -endmodule - -module stdStorage-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KstdStorageContract - - syntax S2KstdStorageContract ::= "S2KstdStorage" [symbol(), klabel(contract_stdStorage)] - - - - syntax Bytes ::= S2KstdStorageContract "." S2KstdStorageMethod [function(), symbol(), klabel(method_stdStorage)] - - syntax S2KstdStorageMethod ::= "S2KbytesToBytes32" "(" Bytes ":" "bytes" "," Int ":" "uint256" ")" [symbol(), klabel(method_stdStorage_S2KbytesToBytes32_bytes_uint256)] - - rule ( S2KstdStorage . S2KbytesToBytes32 ( V0_b : bytes , V1_offset : uint256 ) => #abiCallData ( "bytesToBytes32" , #bytes ( V0_b ) , #uint256 ( V1_offset ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 128 , lengthBytes ( V0_b ) ) - andBool ( #rangeUInt ( 256 , V1_offset ) - )) - - - rule ( selector ( "bytesToBytes32(bytes,uint256)" ) => 1398294841 ) - - -endmodule - -module TestNumber-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KTestNumberContract - - syntax S2KTestNumberContract ::= "S2KTestNumber" [symbol(), klabel(contract_TestNumber)] - - - - syntax Field ::= TestNumberField - - syntax TestNumberField ::= "IS_TEST" [symbol(), klabel(field_TestNumber_IS_TEST)] - - syntax TestNumberField ::= "_failed" [symbol(), klabel(field_TestNumber__failed)] - - syntax TestNumberField ::= "testNumber" [symbol(), klabel(field_TestNumber_testNumber)] - - rule ( #loc ( S2KTestNumber . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KTestNumber . _failed ) => 0 ) - - - rule ( #loc ( S2KTestNumber . testNumber ) => 1 ) - - - syntax Bytes ::= S2KTestNumberContract "." S2KTestNumberMethod [function(), symbol(), klabel(method_TestNumber)] - - syntax S2KTestNumberMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_TestNumber_S2KISZUndTEST_)] - - syntax S2KTestNumberMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_TestNumber_S2Kfailed_)] - - syntax S2KTestNumberMethod ::= "S2Kt" "(" Int ":" "uint256" ")" [symbol(), klabel(method_TestNumber_S2Kt_uint256)] - - syntax S2KTestNumberMethod ::= "S2KtestNumber" "(" ")" [symbol(), klabel(method_TestNumber_S2KtestNumber_)] - - rule ( S2KTestNumber . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KTestNumber . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KTestNumber . S2Kt ( V0_a : uint256 ) => #abiCallData ( "t" , #uint256 ( V0_a ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_a ) - - - rule ( S2KTestNumber . S2KtestNumber ( ) => #abiCallData ( "testNumber" , .TypedArgs ) ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "t(uint256)" ) => 2950864753 ) - - - rule ( selector ( "testNumber()" ) => 219771635 ) - - -endmodule - -module ToStringTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KToStringTestContract - - syntax S2KToStringTestContract ::= "S2KToStringTest" [symbol(), klabel(contract_ToStringTest)] - - - - syntax Field ::= ToStringTestField - - syntax ToStringTestField ::= "IS_TEST" [symbol(), klabel(field_ToStringTest_IS_TEST)] - - syntax ToStringTestField ::= "_failed" [symbol(), klabel(field_ToStringTest__failed)] - - syntax ToStringTestField ::= "IS_SCRIPT" [symbol(), klabel(field_ToStringTest_IS_SCRIPT)] - - syntax ToStringTestField ::= "stdstore" [symbol(), klabel(field_ToStringTest_stdstore)] - - rule ( #loc ( S2KToStringTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KToStringTest . _failed ) => 0 ) - - - rule ( #loc ( S2KToStringTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( S2KToStringTest . stdstore ) => 1 ) - - - syntax Bytes ::= S2KToStringTestContract "." S2KToStringTestMethod [function(), symbol(), klabel(method_ToStringTest)] - - syntax S2KToStringTestMethod ::= "S2KISZUndSCRIPT" "(" ")" [symbol(), klabel(method_ToStringTest_S2KISZUndSCRIPT_)] - - syntax S2KToStringTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_ToStringTest_S2KISZUndTEST_)] - - syntax S2KToStringTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_ToStringTest_S2Kfailed_)] - - syntax S2KToStringTestMethod ::= "S2KtestAddressToString" "(" ")" [symbol(), klabel(method_ToStringTest_S2KtestAddressToString_)] - - syntax S2KToStringTestMethod ::= "S2KtestBoolToString" "(" ")" [symbol(), klabel(method_ToStringTest_S2KtestBoolToString_)] - - syntax S2KToStringTestMethod ::= "S2KtestBytes32ToString" "(" ")" [symbol(), klabel(method_ToStringTest_S2KtestBytes32ToString_)] - - syntax S2KToStringTestMethod ::= "S2KtestBytesToString" "(" ")" [symbol(), klabel(method_ToStringTest_S2KtestBytesToString_)] - - syntax S2KToStringTestMethod ::= "S2KtestIntToString" "(" ")" [symbol(), klabel(method_ToStringTest_S2KtestIntToString_)] - - syntax S2KToStringTestMethod ::= "S2KtestUint256ToString" "(" ")" [symbol(), klabel(method_ToStringTest_S2KtestUint256ToString_)] - - syntax S2KToStringTestMethod ::= "S2Kvm" "(" ")" [symbol(), klabel(method_ToStringTest_S2Kvm_)] - - rule ( S2KToStringTest . S2KISZUndSCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( S2KToStringTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KToStringTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( S2KToStringTest . S2KtestAddressToString ( ) => #abiCallData ( "testAddressToString" , .TypedArgs ) ) - - - rule ( S2KToStringTest . S2KtestBoolToString ( ) => #abiCallData ( "testBoolToString" , .TypedArgs ) ) - - - rule ( S2KToStringTest . S2KtestBytes32ToString ( ) => #abiCallData ( "testBytes32ToString" , .TypedArgs ) ) - - - rule ( S2KToStringTest . S2KtestBytesToString ( ) => #abiCallData ( "testBytesToString" , .TypedArgs ) ) - - - rule ( S2KToStringTest . S2KtestIntToString ( ) => #abiCallData ( "testIntToString" , .TypedArgs ) ) - - - rule ( S2KToStringTest . S2KtestUint256ToString ( ) => #abiCallData ( "testUint256ToString" , .TypedArgs ) ) - - - rule ( S2KToStringTest . S2Kvm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testAddressToString()" ) => 808104093 ) - - - rule ( selector ( "testBoolToString()" ) => 1097632899 ) - - - rule ( selector ( "testBytes32ToString()" ) => 204853932 ) - - - rule ( selector ( "testBytesToString()" ) => 1397983993 ) - - - rule ( selector ( "testIntToString()" ) => 4039840763 ) - - - rule ( selector ( "testUint256ToString()" ) => 98980210 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Token-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KTokenContract - - syntax S2KTokenContract ::= "S2KToken" [symbol(), klabel(contract_Token)] - - - - syntax Field ::= TokenField - - syntax TokenField ::= "x" [symbol(), klabel(field_Token_x)] - - syntax TokenField ::= "balances" [symbol(), klabel(field_Token_balances)] - - syntax TokenField ::= "allowances" [symbol(), klabel(field_Token_allowances)] - - syntax TokenField ::= "name" [symbol(), klabel(field_Token_name)] - - syntax TokenField ::= "y" [symbol(), klabel(field_Token_y)] - - syntax TokenField ::= "z" [symbol(), klabel(field_Token_z)] - - syntax TokenField ::= "a" [symbol(), klabel(field_Token_a)] - - syntax TokenField ::= "foos" [symbol(), klabel(field_Token_foos)] - - rule ( #loc ( S2KToken . x ) => 0 ) - - - rule ( #loc ( S2KToken . balances ) => 1 ) - - - rule ( #loc ( S2KToken . allowances ) => 2 ) - - - rule ( #loc ( S2KToken . name ) => 3 ) - - - rule ( #loc ( S2KToken . y ) => 4 ) - - - rule ( #loc ( S2KToken . z ) => 4 ) - - - rule ( #loc ( S2KToken . a ) => 4 ) - - - rule ( #loc ( S2KToken . foos ) => 5 ) - - - syntax Bytes ::= S2KTokenContract "." S2KTokenMethod [function(), symbol(), klabel(method_Token)] - - syntax S2KTokenMethod ::= "S2Ktransfer" "(" Int ":" "address" "," Int ":" "uint256" ")" [symbol(), klabel(method_Token_S2Ktransfer_address_uint256)] - - rule ( S2KToken . S2Ktransfer ( V0_dst : address , V1_amount : uint256 ) => #abiCallData ( "transfer" , #address ( V0_dst ) , #uint256 ( V1_amount ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_dst ) - andBool ( #rangeUInt ( 256 , V1_amount ) - )) - - - rule ( selector ( "transfer(address,uint256)" ) => 2835717307 ) - - -endmodule - -module BytesTypeTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KBytesTypeTestContract - - syntax S2KBytesTypeTestContract ::= "S2KBytesTypeTest" [symbol(), klabel(contract_BytesTypeTest)] - - - - syntax Bytes ::= S2KBytesTypeTestContract "." S2KBytesTypeTestMethod [function(), symbol(), klabel(method_BytesTypeTest)] - - syntax S2KBytesTypeTestMethod ::= "S2KtestFailZUndbytes32" "(" Int ":" "bytes32" ")" [symbol(), klabel(method_BytesTypeTest_S2KtestFailZUndbytes32_bytes32)] - - syntax S2KBytesTypeTestMethod ::= "S2KtestFailZUndbytes4" "(" Int ":" "bytes4" ")" [symbol(), klabel(method_BytesTypeTest_S2KtestFailZUndbytes4_bytes4)] - - syntax S2KBytesTypeTestMethod ::= "S2KtestZUndbytes32" "(" Int ":" "bytes32" ")" [symbol(), klabel(method_BytesTypeTest_S2KtestZUndbytes32_bytes32)] - - syntax S2KBytesTypeTestMethod ::= "S2KtestZUndbytes32ZUndfail" "(" Int ":" "bytes32" ")" [symbol(), klabel(method_BytesTypeTest_S2KtestZUndbytes32ZUndfail_bytes32)] - - syntax S2KBytesTypeTestMethod ::= "S2KtestZUndbytes4" "(" Int ":" "bytes4" ")" [symbol(), klabel(method_BytesTypeTest_S2KtestZUndbytes4_bytes4)] - - syntax S2KBytesTypeTestMethod ::= "S2KtestZUndbytes4ZUndfail" "(" Int ":" "bytes4" ")" [symbol(), klabel(method_BytesTypeTest_S2KtestZUndbytes4ZUndfail_bytes4)] - - rule ( S2KBytesTypeTest . S2KtestFailZUndbytes32 ( V0_x : bytes32 ) => #abiCallData ( "testFail_bytes32" , #bytes32 ( V0_x ) , .TypedArgs ) ) - ensures #rangeBytes ( 32 , V0_x ) - - - rule ( S2KBytesTypeTest . S2KtestFailZUndbytes4 ( V0_x : bytes4 ) => #abiCallData ( "testFail_bytes4" , #bytes4 ( V0_x ) , .TypedArgs ) ) - ensures #rangeBytes ( 4 , V0_x ) - - - rule ( S2KBytesTypeTest . S2KtestZUndbytes32 ( V0_x : bytes32 ) => #abiCallData ( "test_bytes32" , #bytes32 ( V0_x ) , .TypedArgs ) ) - ensures #rangeBytes ( 32 , V0_x ) - - - rule ( S2KBytesTypeTest . S2KtestZUndbytes32ZUndfail ( V0_x : bytes32 ) => #abiCallData ( "test_bytes32_fail" , #bytes32 ( V0_x ) , .TypedArgs ) ) - ensures #rangeBytes ( 32 , V0_x ) - - - rule ( S2KBytesTypeTest . S2KtestZUndbytes4 ( V0_x : bytes4 ) => #abiCallData ( "test_bytes4" , #bytes4 ( V0_x ) , .TypedArgs ) ) - ensures #rangeBytes ( 4 , V0_x ) - - - rule ( S2KBytesTypeTest . S2KtestZUndbytes4ZUndfail ( V0_x : bytes4 ) => #abiCallData ( "test_bytes4_fail" , #bytes4 ( V0_x ) , .TypedArgs ) ) - ensures #rangeBytes ( 4 , V0_x ) - - - rule ( selector ( "testFail_bytes32(bytes32)" ) => 4289330289 ) - - - rule ( selector ( "testFail_bytes4(bytes4)" ) => 3602852570 ) - - - rule ( selector ( "test_bytes32(bytes32)" ) => 3436986189 ) - - - rule ( selector ( "test_bytes32_fail(bytes32)" ) => 392713219 ) - - - rule ( selector ( "test_bytes4(bytes4)" ) => 2814412853 ) - - - rule ( selector ( "test_bytes4_fail(bytes4)" ) => 2510894010 ) - - -endmodule - -module IntTypeTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KIntTypeTestContract - - syntax S2KIntTypeTestContract ::= "S2KIntTypeTest" [symbol(), klabel(contract_IntTypeTest)] - - - - syntax Bytes ::= S2KIntTypeTestContract "." S2KIntTypeTestMethod [function(), symbol(), klabel(method_IntTypeTest)] - - syntax S2KIntTypeTestMethod ::= "S2KtestFailZUndint128" "(" Int ":" "int128" ")" [symbol(), klabel(method_IntTypeTest_S2KtestFailZUndint128_int128)] - - syntax S2KIntTypeTestMethod ::= "S2KtestFailZUndint256" "(" Int ":" "int256" ")" [symbol(), klabel(method_IntTypeTest_S2KtestFailZUndint256_int256)] - - syntax S2KIntTypeTestMethod ::= "S2KtestFailZUndint64" "(" Int ":" "int64" ")" [symbol(), klabel(method_IntTypeTest_S2KtestFailZUndint64_int64)] - - syntax S2KIntTypeTestMethod ::= "S2KtestZUndint128" "(" Int ":" "int128" ")" [symbol(), klabel(method_IntTypeTest_S2KtestZUndint128_int128)] - - syntax S2KIntTypeTestMethod ::= "S2KtestZUndint128ZUndfail" "(" Int ":" "int128" ")" [symbol(), klabel(method_IntTypeTest_S2KtestZUndint128ZUndfail_int128)] - - syntax S2KIntTypeTestMethod ::= "S2KtestZUndint256" "(" Int ":" "int256" ")" [symbol(), klabel(method_IntTypeTest_S2KtestZUndint256_int256)] - - syntax S2KIntTypeTestMethod ::= "S2KtestZUndint256ZUndfail" "(" Int ":" "int256" ")" [symbol(), klabel(method_IntTypeTest_S2KtestZUndint256ZUndfail_int256)] - - syntax S2KIntTypeTestMethod ::= "S2KtestZUndint64" "(" Int ":" "int64" ")" [symbol(), klabel(method_IntTypeTest_S2KtestZUndint64_int64)] - - syntax S2KIntTypeTestMethod ::= "S2KtestZUndint64ZUndfail" "(" Int ":" "int64" ")" [symbol(), klabel(method_IntTypeTest_S2KtestZUndint64ZUndfail_int64)] - - rule ( S2KIntTypeTest . S2KtestFailZUndint128 ( V0_x : int128 ) => #abiCallData ( "testFail_int128" , #int128 ( V0_x ) , .TypedArgs ) ) - ensures #rangeSInt ( 128 , V0_x ) - - - rule ( S2KIntTypeTest . S2KtestFailZUndint256 ( V0_x : int256 ) => #abiCallData ( "testFail_int256" , #int256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeSInt ( 256 , V0_x ) - - - rule ( S2KIntTypeTest . S2KtestFailZUndint64 ( V0_x : int64 ) => #abiCallData ( "testFail_int64" , #int64 ( V0_x ) , .TypedArgs ) ) - ensures #rangeSInt ( 64 , V0_x ) - - - rule ( S2KIntTypeTest . S2KtestZUndint128 ( V0_x : int128 ) => #abiCallData ( "test_int128" , #int128 ( V0_x ) , .TypedArgs ) ) - ensures #rangeSInt ( 128 , V0_x ) - - - rule ( S2KIntTypeTest . S2KtestZUndint128ZUndfail ( V0_x : int128 ) => #abiCallData ( "test_int128_fail" , #int128 ( V0_x ) , .TypedArgs ) ) - ensures #rangeSInt ( 128 , V0_x ) - - - rule ( S2KIntTypeTest . S2KtestZUndint256 ( V0_x : int256 ) => #abiCallData ( "test_int256" , #int256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeSInt ( 256 , V0_x ) - - - rule ( S2KIntTypeTest . S2KtestZUndint256ZUndfail ( V0_x : int256 ) => #abiCallData ( "test_int256_fail" , #int256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeSInt ( 256 , V0_x ) - - - rule ( S2KIntTypeTest . S2KtestZUndint64 ( V0_x : int64 ) => #abiCallData ( "test_int64" , #int64 ( V0_x ) , .TypedArgs ) ) - ensures #rangeSInt ( 64 , V0_x ) - - - rule ( S2KIntTypeTest . S2KtestZUndint64ZUndfail ( V0_x : int64 ) => #abiCallData ( "test_int64_fail" , #int64 ( V0_x ) , .TypedArgs ) ) - ensures #rangeSInt ( 64 , V0_x ) - - - rule ( selector ( "testFail_int128(int128)" ) => 1988540889 ) - - - rule ( selector ( "testFail_int256(int256)" ) => 1185096419 ) - - - rule ( selector ( "testFail_int64(int64)" ) => 1750678769 ) - - - rule ( selector ( "test_int128(int128)" ) => 995880333 ) - - - rule ( selector ( "test_int128_fail(int128)" ) => 1240751129 ) - - - rule ( selector ( "test_int256(int256)" ) => 3818914766 ) - - - rule ( selector ( "test_int256_fail(int256)" ) => 1877071906 ) - - - rule ( selector ( "test_int64(int64)" ) => 1792301870 ) - - - rule ( selector ( "test_int64_fail(int64)" ) => 2744099616 ) - - -endmodule - -module UintTypeTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KUintTypeTestContract - - syntax S2KUintTypeTestContract ::= "S2KUintTypeTest" [symbol(), klabel(contract_UintTypeTest)] - - - - syntax Bytes ::= S2KUintTypeTestContract "." S2KUintTypeTestMethod [function(), symbol(), klabel(method_UintTypeTest)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint104" "(" Int ":" "uint104" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint104_uint104)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint112" "(" Int ":" "uint112" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint112_uint112)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint120" "(" Int ":" "uint120" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint120_uint120)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint128" "(" Int ":" "uint128" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint128_uint128)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint136" "(" Int ":" "uint136" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint136_uint136)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint144" "(" Int ":" "uint144" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint144_uint144)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint152" "(" Int ":" "uint152" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint152_uint152)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint16" "(" Int ":" "uint16" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint16_uint16)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint160" "(" Int ":" "uint160" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint160_uint160)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint168" "(" Int ":" "uint168" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint168_uint168)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint176" "(" Int ":" "uint176" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint176_uint176)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint184" "(" Int ":" "uint184" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint184_uint184)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint192" "(" Int ":" "uint192" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint192_uint192)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint200" "(" Int ":" "uint200" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint200_uint200)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint208" "(" Int ":" "uint208" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint208_uint208)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint216" "(" Int ":" "uint216" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint216_uint216)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint224" "(" Int ":" "uint224" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint224_uint224)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint232" "(" Int ":" "uint232" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint232_uint232)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint24" "(" Int ":" "uint24" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint24_uint24)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint240" "(" Int ":" "uint240" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint240_uint240)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint248" "(" Int ":" "uint248" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint248_uint248)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint256" "(" Int ":" "uint256" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint256_uint256)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint32" "(" Int ":" "uint32" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint32_uint32)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint40" "(" Int ":" "uint40" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint40_uint40)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint48" "(" Int ":" "uint48" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint48_uint48)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint56" "(" Int ":" "uint56" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint56_uint56)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint64" "(" Int ":" "uint64" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint64_uint64)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint72" "(" Int ":" "uint72" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint72_uint72)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint8" "(" Int ":" "uint8" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint8_uint8)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint80" "(" Int ":" "uint80" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint80_uint80)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint88" "(" Int ":" "uint88" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint88_uint88)] - - syntax S2KUintTypeTestMethod ::= "S2KtestFailZUnduint96" "(" Int ":" "uint96" ")" [symbol(), klabel(method_UintTypeTest_S2KtestFailZUnduint96_uint96)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint104" "(" Int ":" "uint104" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint104_uint104)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint104ZUndfail" "(" Int ":" "uint104" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint104ZUndfail_uint104)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint112" "(" Int ":" "uint112" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint112_uint112)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint112ZUndfail" "(" Int ":" "uint112" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint112ZUndfail_uint112)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint120" "(" Int ":" "uint120" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint120_uint120)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint120ZUndfail" "(" Int ":" "uint120" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint120ZUndfail_uint120)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint128" "(" Int ":" "uint128" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint128_uint128)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint128ZUndfail" "(" Int ":" "uint128" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint128ZUndfail_uint128)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint136" "(" Int ":" "uint136" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint136_uint136)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint136ZUndfail" "(" Int ":" "uint136" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint136ZUndfail_uint136)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint144" "(" Int ":" "uint144" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint144_uint144)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint144ZUndfail" "(" Int ":" "uint144" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint144ZUndfail_uint144)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint152" "(" Int ":" "uint152" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint152_uint152)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint152ZUndfail" "(" Int ":" "uint152" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint152ZUndfail_uint152)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint16" "(" Int ":" "uint16" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint16_uint16)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint160" "(" Int ":" "uint160" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint160_uint160)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint160ZUndfail" "(" Int ":" "uint160" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint160ZUndfail_uint160)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint168" "(" Int ":" "uint168" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint168_uint168)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint168ZUndfail" "(" Int ":" "uint168" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint168ZUndfail_uint168)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint16ZUndfail" "(" Int ":" "uint16" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint16ZUndfail_uint16)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint176" "(" Int ":" "uint176" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint176_uint176)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint176ZUndfail" "(" Int ":" "uint176" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint176ZUndfail_uint176)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint184" "(" Int ":" "uint184" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint184_uint184)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint184ZUndfail" "(" Int ":" "uint184" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint184ZUndfail_uint184)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint192" "(" Int ":" "uint192" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint192_uint192)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint192ZUndfail" "(" Int ":" "uint192" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint192ZUndfail_uint192)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint200" "(" Int ":" "uint200" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint200_uint200)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint200ZUndfail" "(" Int ":" "uint200" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint200ZUndfail_uint200)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint208" "(" Int ":" "uint208" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint208_uint208)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint208ZUndfail" "(" Int ":" "uint208" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint208ZUndfail_uint208)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint216" "(" Int ":" "uint216" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint216_uint216)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint216ZUndfail" "(" Int ":" "uint216" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint216ZUndfail_uint216)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint224" "(" Int ":" "uint224" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint224_uint224)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint224ZUndfail" "(" Int ":" "uint224" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint224ZUndfail_uint224)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint232" "(" Int ":" "uint232" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint232_uint232)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint232ZUndfail" "(" Int ":" "uint232" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint232ZUndfail_uint232)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint24" "(" Int ":" "uint24" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint24_uint24)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint240" "(" Int ":" "uint240" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint240_uint240)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint240ZUndfail" "(" Int ":" "uint240" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint240ZUndfail_uint240)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint248" "(" Int ":" "uint248" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint248_uint248)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint248ZUndfail" "(" Int ":" "uint248" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint248ZUndfail_uint248)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint24ZUndfail" "(" Int ":" "uint24" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint24ZUndfail_uint24)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint256" "(" Int ":" "uint256" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint256_uint256)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint256ZUndfail" "(" Int ":" "uint256" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint256ZUndfail_uint256)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint32" "(" Int ":" "uint32" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint32_uint32)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint32ZUndfail" "(" Int ":" "uint32" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint32ZUndfail_uint32)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint40" "(" Int ":" "uint40" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint40_uint40)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint40ZUndfail" "(" Int ":" "uint40" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint40ZUndfail_uint40)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint48" "(" Int ":" "uint48" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint48_uint48)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint48ZUndfail" "(" Int ":" "uint48" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint48ZUndfail_uint48)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint56" "(" Int ":" "uint56" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint56_uint56)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint56ZUndfail" "(" Int ":" "uint56" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint56ZUndfail_uint56)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint64" "(" Int ":" "uint64" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint64_uint64)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint64ZUndfail" "(" Int ":" "uint64" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint64ZUndfail_uint64)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint72" "(" Int ":" "uint72" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint72_uint72)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint72ZUndfail" "(" Int ":" "uint72" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint72ZUndfail_uint72)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint8" "(" Int ":" "uint8" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint8_uint8)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint80" "(" Int ":" "uint80" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint80_uint80)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint80ZUndfail" "(" Int ":" "uint80" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint80ZUndfail_uint80)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint88" "(" Int ":" "uint88" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint88_uint88)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint88ZUndfail" "(" Int ":" "uint88" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint88ZUndfail_uint88)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint8ZUndfail" "(" Int ":" "uint8" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint8ZUndfail_uint8)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint96" "(" Int ":" "uint96" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint96_uint96)] - - syntax S2KUintTypeTestMethod ::= "S2KtestZUnduint96ZUndfail" "(" Int ":" "uint96" ")" [symbol(), klabel(method_UintTypeTest_S2KtestZUnduint96ZUndfail_uint96)] - - rule ( S2KUintTypeTest . S2KtestFailZUnduint104 ( V0_x : uint104 ) => #abiCallData ( "testFail_uint104" , #uint104 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 104 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint112 ( V0_x : uint112 ) => #abiCallData ( "testFail_uint112" , #uint112 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 112 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint120 ( V0_x : uint120 ) => #abiCallData ( "testFail_uint120" , #uint120 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 120 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint128 ( V0_x : uint128 ) => #abiCallData ( "testFail_uint128" , #uint128 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 128 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint136 ( V0_x : uint136 ) => #abiCallData ( "testFail_uint136" , #uint136 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 136 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint144 ( V0_x : uint144 ) => #abiCallData ( "testFail_uint144" , #uint144 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 144 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint152 ( V0_x : uint152 ) => #abiCallData ( "testFail_uint152" , #uint152 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 152 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint16 ( V0_x : uint16 ) => #abiCallData ( "testFail_uint16" , #uint16 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 16 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint160 ( V0_x : uint160 ) => #abiCallData ( "testFail_uint160" , #uint160 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 160 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint168 ( V0_x : uint168 ) => #abiCallData ( "testFail_uint168" , #uint168 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 168 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint176 ( V0_x : uint176 ) => #abiCallData ( "testFail_uint176" , #uint176 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 176 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint184 ( V0_x : uint184 ) => #abiCallData ( "testFail_uint184" , #uint184 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 184 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint192 ( V0_x : uint192 ) => #abiCallData ( "testFail_uint192" , #uint192 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 192 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint200 ( V0_x : uint200 ) => #abiCallData ( "testFail_uint200" , #uint200 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 200 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint208 ( V0_x : uint208 ) => #abiCallData ( "testFail_uint208" , #uint208 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 208 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint216 ( V0_x : uint216 ) => #abiCallData ( "testFail_uint216" , #uint216 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 216 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint224 ( V0_x : uint224 ) => #abiCallData ( "testFail_uint224" , #uint224 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 224 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint232 ( V0_x : uint232 ) => #abiCallData ( "testFail_uint232" , #uint232 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 232 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint24 ( V0_x : uint24 ) => #abiCallData ( "testFail_uint24" , #uint24 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 24 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint240 ( V0_x : uint240 ) => #abiCallData ( "testFail_uint240" , #uint240 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 240 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint248 ( V0_x : uint248 ) => #abiCallData ( "testFail_uint248" , #uint248 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 248 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint256 ( V0_x : uint256 ) => #abiCallData ( "testFail_uint256" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint32 ( V0_x : uint32 ) => #abiCallData ( "testFail_uint32" , #uint32 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 32 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint40 ( V0_x : uint40 ) => #abiCallData ( "testFail_uint40" , #uint40 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 40 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint48 ( V0_x : uint48 ) => #abiCallData ( "testFail_uint48" , #uint48 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 48 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint56 ( V0_x : uint56 ) => #abiCallData ( "testFail_uint56" , #uint56 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 56 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint64 ( V0_x : uint64 ) => #abiCallData ( "testFail_uint64" , #uint64 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 64 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint72 ( V0_x : uint72 ) => #abiCallData ( "testFail_uint72" , #uint72 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 72 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint8 ( V0_x : uint8 ) => #abiCallData ( "testFail_uint8" , #uint8 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 8 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint80 ( V0_x : uint80 ) => #abiCallData ( "testFail_uint80" , #uint80 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 80 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint88 ( V0_x : uint88 ) => #abiCallData ( "testFail_uint88" , #uint88 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 88 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestFailZUnduint96 ( V0_x : uint96 ) => #abiCallData ( "testFail_uint96" , #uint96 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 96 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint104 ( V0_x : uint104 ) => #abiCallData ( "test_uint104" , #uint104 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 104 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint104ZUndfail ( V0_x : uint104 ) => #abiCallData ( "test_uint104_fail" , #uint104 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 104 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint112 ( V0_x : uint112 ) => #abiCallData ( "test_uint112" , #uint112 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 112 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint112ZUndfail ( V0_x : uint112 ) => #abiCallData ( "test_uint112_fail" , #uint112 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 112 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint120 ( V0_x : uint120 ) => #abiCallData ( "test_uint120" , #uint120 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 120 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint120ZUndfail ( V0_x : uint120 ) => #abiCallData ( "test_uint120_fail" , #uint120 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 120 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint128 ( V0_x : uint128 ) => #abiCallData ( "test_uint128" , #uint128 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 128 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint128ZUndfail ( V0_x : uint128 ) => #abiCallData ( "test_uint128_fail" , #uint128 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 128 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint136 ( V0_x : uint136 ) => #abiCallData ( "test_uint136" , #uint136 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 136 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint136ZUndfail ( V0_x : uint136 ) => #abiCallData ( "test_uint136_fail" , #uint136 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 136 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint144 ( V0_x : uint144 ) => #abiCallData ( "test_uint144" , #uint144 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 144 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint144ZUndfail ( V0_x : uint144 ) => #abiCallData ( "test_uint144_fail" , #uint144 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 144 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint152 ( V0_x : uint152 ) => #abiCallData ( "test_uint152" , #uint152 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 152 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint152ZUndfail ( V0_x : uint152 ) => #abiCallData ( "test_uint152_fail" , #uint152 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 152 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint16 ( V0_x : uint16 ) => #abiCallData ( "test_uint16" , #uint16 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 16 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint160 ( V0_x : uint160 ) => #abiCallData ( "test_uint160" , #uint160 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 160 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint160ZUndfail ( V0_x : uint160 ) => #abiCallData ( "test_uint160_fail" , #uint160 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 160 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint168 ( V0_x : uint168 ) => #abiCallData ( "test_uint168" , #uint168 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 168 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint168ZUndfail ( V0_x : uint168 ) => #abiCallData ( "test_uint168_fail" , #uint168 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 168 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint16ZUndfail ( V0_x : uint16 ) => #abiCallData ( "test_uint16_fail" , #uint16 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 16 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint176 ( V0_x : uint176 ) => #abiCallData ( "test_uint176" , #uint176 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 176 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint176ZUndfail ( V0_x : uint176 ) => #abiCallData ( "test_uint176_fail" , #uint176 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 176 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint184 ( V0_x : uint184 ) => #abiCallData ( "test_uint184" , #uint184 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 184 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint184ZUndfail ( V0_x : uint184 ) => #abiCallData ( "test_uint184_fail" , #uint184 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 184 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint192 ( V0_x : uint192 ) => #abiCallData ( "test_uint192" , #uint192 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 192 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint192ZUndfail ( V0_x : uint192 ) => #abiCallData ( "test_uint192_fail" , #uint192 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 192 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint200 ( V0_x : uint200 ) => #abiCallData ( "test_uint200" , #uint200 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 200 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint200ZUndfail ( V0_x : uint200 ) => #abiCallData ( "test_uint200_fail" , #uint200 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 200 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint208 ( V0_x : uint208 ) => #abiCallData ( "test_uint208" , #uint208 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 208 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint208ZUndfail ( V0_x : uint208 ) => #abiCallData ( "test_uint208_fail" , #uint208 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 208 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint216 ( V0_x : uint216 ) => #abiCallData ( "test_uint216" , #uint216 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 216 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint216ZUndfail ( V0_x : uint216 ) => #abiCallData ( "test_uint216_fail" , #uint216 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 216 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint224 ( V0_x : uint224 ) => #abiCallData ( "test_uint224" , #uint224 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 224 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint224ZUndfail ( V0_x : uint224 ) => #abiCallData ( "test_uint224_fail" , #uint224 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 224 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint232 ( V0_x : uint232 ) => #abiCallData ( "test_uint232" , #uint232 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 232 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint232ZUndfail ( V0_x : uint232 ) => #abiCallData ( "test_uint232_fail" , #uint232 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 232 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint24 ( V0_x : uint24 ) => #abiCallData ( "test_uint24" , #uint24 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 24 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint240 ( V0_x : uint240 ) => #abiCallData ( "test_uint240" , #uint240 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 240 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint240ZUndfail ( V0_x : uint240 ) => #abiCallData ( "test_uint240_fail" , #uint240 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 240 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint248 ( V0_x : uint248 ) => #abiCallData ( "test_uint248" , #uint248 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 248 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint248ZUndfail ( V0_x : uint248 ) => #abiCallData ( "test_uint248_fail" , #uint248 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 248 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint24ZUndfail ( V0_x : uint24 ) => #abiCallData ( "test_uint24_fail" , #uint24 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 24 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint256 ( V0_x : uint256 ) => #abiCallData ( "test_uint256" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint256ZUndfail ( V0_x : uint256 ) => #abiCallData ( "test_uint256_fail" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint32 ( V0_x : uint32 ) => #abiCallData ( "test_uint32" , #uint32 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 32 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint32ZUndfail ( V0_x : uint32 ) => #abiCallData ( "test_uint32_fail" , #uint32 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 32 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint40 ( V0_x : uint40 ) => #abiCallData ( "test_uint40" , #uint40 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 40 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint40ZUndfail ( V0_x : uint40 ) => #abiCallData ( "test_uint40_fail" , #uint40 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 40 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint48 ( V0_x : uint48 ) => #abiCallData ( "test_uint48" , #uint48 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 48 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint48ZUndfail ( V0_x : uint48 ) => #abiCallData ( "test_uint48_fail" , #uint48 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 48 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint56 ( V0_x : uint56 ) => #abiCallData ( "test_uint56" , #uint56 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 56 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint56ZUndfail ( V0_x : uint56 ) => #abiCallData ( "test_uint56_fail" , #uint56 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 56 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint64 ( V0_x : uint64 ) => #abiCallData ( "test_uint64" , #uint64 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 64 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint64ZUndfail ( V0_x : uint64 ) => #abiCallData ( "test_uint64_fail" , #uint64 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 64 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint72 ( V0_x : uint72 ) => #abiCallData ( "test_uint72" , #uint72 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 72 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint72ZUndfail ( V0_x : uint72 ) => #abiCallData ( "test_uint72_fail" , #uint72 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 72 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint8 ( V0_x : uint8 ) => #abiCallData ( "test_uint8" , #uint8 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 8 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint80 ( V0_x : uint80 ) => #abiCallData ( "test_uint80" , #uint80 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 80 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint80ZUndfail ( V0_x : uint80 ) => #abiCallData ( "test_uint80_fail" , #uint80 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 80 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint88 ( V0_x : uint88 ) => #abiCallData ( "test_uint88" , #uint88 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 88 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint88ZUndfail ( V0_x : uint88 ) => #abiCallData ( "test_uint88_fail" , #uint88 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 88 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint8ZUndfail ( V0_x : uint8 ) => #abiCallData ( "test_uint8_fail" , #uint8 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 8 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint96 ( V0_x : uint96 ) => #abiCallData ( "test_uint96" , #uint96 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 96 , V0_x ) - - - rule ( S2KUintTypeTest . S2KtestZUnduint96ZUndfail ( V0_x : uint96 ) => #abiCallData ( "test_uint96_fail" , #uint96 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 96 , V0_x ) - - - rule ( selector ( "testFail_uint104(uint104)" ) => 1709154444 ) - - - rule ( selector ( "testFail_uint112(uint112)" ) => 3541489285 ) - - - rule ( selector ( "testFail_uint120(uint120)" ) => 3839169067 ) - - - rule ( selector ( "testFail_uint128(uint128)" ) => 791678561 ) - - - rule ( selector ( "testFail_uint136(uint136)" ) => 3952257705 ) - - - rule ( selector ( "testFail_uint144(uint144)" ) => 2439595565 ) - - - rule ( selector ( "testFail_uint152(uint152)" ) => 1866291148 ) - - - rule ( selector ( "testFail_uint16(uint16)" ) => 4076431644 ) - - - rule ( selector ( "testFail_uint160(uint160)" ) => 3214193107 ) - - - rule ( selector ( "testFail_uint168(uint168)" ) => 2636444862 ) - - - rule ( selector ( "testFail_uint176(uint176)" ) => 1828125968 ) - - - rule ( selector ( "testFail_uint184(uint184)" ) => 4099305155 ) - - - rule ( selector ( "testFail_uint192(uint192)" ) => 2858210891 ) - - - rule ( selector ( "testFail_uint200(uint200)" ) => 1080270217 ) - - - rule ( selector ( "testFail_uint208(uint208)" ) => 1831022189 ) - - - rule ( selector ( "testFail_uint216(uint216)" ) => 2125101602 ) - - - rule ( selector ( "testFail_uint224(uint224)" ) => 420776541 ) - - - rule ( selector ( "testFail_uint232(uint232)" ) => 3163478438 ) - - - rule ( selector ( "testFail_uint24(uint24)" ) => 639153936 ) - - - rule ( selector ( "testFail_uint240(uint240)" ) => 3089966003 ) - - - rule ( selector ( "testFail_uint248(uint248)" ) => 3070004620 ) - - - rule ( selector ( "testFail_uint256(uint256)" ) => 3436494846 ) - - - rule ( selector ( "testFail_uint32(uint32)" ) => 3218360567 ) - - - rule ( selector ( "testFail_uint40(uint40)" ) => 347856329 ) - - - rule ( selector ( "testFail_uint48(uint48)" ) => 4178735009 ) - - - rule ( selector ( "testFail_uint56(uint56)" ) => 979020984 ) - - - rule ( selector ( "testFail_uint64(uint64)" ) => 819975489 ) - - - rule ( selector ( "testFail_uint72(uint72)" ) => 2059244458 ) - - - rule ( selector ( "testFail_uint8(uint8)" ) => 3679593874 ) - - - rule ( selector ( "testFail_uint80(uint80)" ) => 4180733980 ) - - - rule ( selector ( "testFail_uint88(uint88)" ) => 42555031 ) - - - rule ( selector ( "testFail_uint96(uint96)" ) => 2962957343 ) - - - rule ( selector ( "test_uint104(uint104)" ) => 2030507202 ) - - - rule ( selector ( "test_uint104_fail(uint104)" ) => 3289769429 ) - - - rule ( selector ( "test_uint112(uint112)" ) => 1247465894 ) - - - rule ( selector ( "test_uint112_fail(uint112)" ) => 198559186 ) - - - rule ( selector ( "test_uint120(uint120)" ) => 4013273041 ) - - - rule ( selector ( "test_uint120_fail(uint120)" ) => 4156608892 ) - - - rule ( selector ( "test_uint128(uint128)" ) => 784802761 ) - - - rule ( selector ( "test_uint128_fail(uint128)" ) => 3283002391 ) - - - rule ( selector ( "test_uint136(uint136)" ) => 3590751506 ) - - - rule ( selector ( "test_uint136_fail(uint136)" ) => 1740049059 ) - - - rule ( selector ( "test_uint144(uint144)" ) => 1224379367 ) - - - rule ( selector ( "test_uint144_fail(uint144)" ) => 3911233113 ) - - - rule ( selector ( "test_uint152(uint152)" ) => 3210764837 ) - - - rule ( selector ( "test_uint152_fail(uint152)" ) => 2472528383 ) - - - rule ( selector ( "test_uint16(uint16)" ) => 1262288561 ) - - - rule ( selector ( "test_uint160(uint160)" ) => 2446641645 ) - - - rule ( selector ( "test_uint160_fail(uint160)" ) => 1289572651 ) - - - rule ( selector ( "test_uint168(uint168)" ) => 2789196255 ) - - - rule ( selector ( "test_uint168_fail(uint168)" ) => 413418206 ) - - - rule ( selector ( "test_uint16_fail(uint16)" ) => 2736127289 ) - - - rule ( selector ( "test_uint176(uint176)" ) => 3119759714 ) - - - rule ( selector ( "test_uint176_fail(uint176)" ) => 2926152828 ) - - - rule ( selector ( "test_uint184(uint184)" ) => 2419331356 ) - - - rule ( selector ( "test_uint184_fail(uint184)" ) => 809918532 ) - - - rule ( selector ( "test_uint192(uint192)" ) => 126849335 ) - - - rule ( selector ( "test_uint192_fail(uint192)" ) => 965859284 ) - - - rule ( selector ( "test_uint200(uint200)" ) => 342308100 ) - - - rule ( selector ( "test_uint200_fail(uint200)" ) => 3554205475 ) - - - rule ( selector ( "test_uint208(uint208)" ) => 664969356 ) - - - rule ( selector ( "test_uint208_fail(uint208)" ) => 515244431 ) - - - rule ( selector ( "test_uint216(uint216)" ) => 2735221135 ) - - - rule ( selector ( "test_uint216_fail(uint216)" ) => 1244132421 ) - - - rule ( selector ( "test_uint224(uint224)" ) => 2791725032 ) - - - rule ( selector ( "test_uint224_fail(uint224)" ) => 3535210075 ) - - - rule ( selector ( "test_uint232(uint232)" ) => 2781872781 ) - - - rule ( selector ( "test_uint232_fail(uint232)" ) => 3352181217 ) - - - rule ( selector ( "test_uint24(uint24)" ) => 2865563805 ) - - - rule ( selector ( "test_uint240(uint240)" ) => 3274361055 ) - - - rule ( selector ( "test_uint240_fail(uint240)" ) => 4046179916 ) - - - rule ( selector ( "test_uint248(uint248)" ) => 578604507 ) - - - rule ( selector ( "test_uint248_fail(uint248)" ) => 3580188072 ) - - - rule ( selector ( "test_uint24_fail(uint24)" ) => 2328572638 ) - - - rule ( selector ( "test_uint256(uint256)" ) => 851358597 ) - - - rule ( selector ( "test_uint256_fail(uint256)" ) => 1895666222 ) - - - rule ( selector ( "test_uint32(uint32)" ) => 982223766 ) - - - rule ( selector ( "test_uint32_fail(uint32)" ) => 768917897 ) - - - rule ( selector ( "test_uint40(uint40)" ) => 1298765870 ) - - - rule ( selector ( "test_uint40_fail(uint40)" ) => 1685882915 ) - - - rule ( selector ( "test_uint48(uint48)" ) => 454435065 ) - - - rule ( selector ( "test_uint48_fail(uint48)" ) => 491533732 ) - - - rule ( selector ( "test_uint56(uint56)" ) => 58659965 ) - - - rule ( selector ( "test_uint56_fail(uint56)" ) => 3185974238 ) - - - rule ( selector ( "test_uint64(uint64)" ) => 2511119799 ) - - - rule ( selector ( "test_uint64_fail(uint64)" ) => 2000886247 ) - - - rule ( selector ( "test_uint72(uint72)" ) => 3694811120 ) - - - rule ( selector ( "test_uint72_fail(uint72)" ) => 875540037 ) - - - rule ( selector ( "test_uint8(uint8)" ) => 1704021016 ) - - - rule ( selector ( "test_uint80(uint80)" ) => 3841083967 ) - - - rule ( selector ( "test_uint80_fail(uint80)" ) => 3626141300 ) - - - rule ( selector ( "test_uint88(uint88)" ) => 100068129 ) - - - rule ( selector ( "test_uint88_fail(uint88)" ) => 318744457 ) - - - rule ( selector ( "test_uint8_fail(uint8)" ) => 2865005996 ) - - - rule ( selector ( "test_uint96(uint96)" ) => 1315861753 ) - - - rule ( selector ( "test_uint96_fail(uint96)" ) => 1635628195 ) - - -endmodule - -module Vm-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KVmContract - - syntax S2KVmContract ::= "S2KVm" [symbol(), klabel(contract_Vm)] - - - - syntax Bytes ::= S2KVmContract "." S2KVmMethod [function(), symbol(), klabel(method_Vm)] - - syntax S2KVmMethod ::= "S2Kaccesses" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_S2Kaccesses_address)] - - syntax S2KVmMethod ::= "S2KactiveFork" "(" ")" [symbol(), klabel(method_Vm_S2KactiveFork_)] - - syntax S2KVmMethod ::= "S2Kaddr" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_S2Kaddr_uint256)] - - syntax S2KVmMethod ::= "S2Kassume" "(" Int ":" "bool" ")" [symbol(), klabel(method_Vm_S2Kassume_bool)] - - syntax S2KVmMethod ::= "S2Kbroadcast" "(" ")" [symbol(), klabel(method_Vm_S2Kbroadcast_)] - - syntax S2KVmMethod ::= "S2Kbroadcast" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_S2Kbroadcast_address)] - - syntax S2KVmMethod ::= "S2KchainId" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_S2KchainId_uint256)] - - syntax S2KVmMethod ::= "S2KclearMockedCalls" "(" ")" [symbol(), klabel(method_Vm_S2KclearMockedCalls_)] - - syntax S2KVmMethod ::= "S2KcloseFile" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_S2KcloseFile_string)] - - syntax S2KVmMethod ::= "S2Kcoinbase" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_S2Kcoinbase_address)] - - syntax S2KVmMethod ::= "S2KcreateFork" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_S2KcreateFork_string)] - - syntax S2KVmMethod ::= "S2KcreateFork" "(" String ":" "string" "," Int ":" "uint256" ")" [symbol(), klabel(method_Vm_S2KcreateFork_string_uint256)] - - syntax S2KVmMethod ::= "S2KcreateSelectFork" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_S2KcreateSelectFork_string)] - - syntax S2KVmMethod ::= "S2KcreateSelectFork" "(" String ":" "string" "," Int ":" "uint256" ")" [symbol(), klabel(method_Vm_S2KcreateSelectFork_string_uint256)] - - syntax S2KVmMethod ::= "S2Kdeal" "(" Int ":" "address" "," Int ":" "uint256" ")" [symbol(), klabel(method_Vm_S2Kdeal_address_uint256)] - - syntax S2KVmMethod ::= "S2KderiveKey" "(" String ":" "string" "," String ":" "string" "," Int ":" "uint32" ")" [symbol(), klabel(method_Vm_S2KderiveKey_string_string_uint32)] - - syntax S2KVmMethod ::= "S2KderiveKey" "(" String ":" "string" "," Int ":" "uint32" ")" [symbol(), klabel(method_Vm_S2KderiveKey_string_uint32)] - - syntax S2KVmMethod ::= "S2KenvAddress" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_S2KenvAddress_string)] - - syntax S2KVmMethod ::= "S2KenvAddress" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_S2KenvAddress_string_string)] - - syntax S2KVmMethod ::= "S2KenvBool" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_S2KenvBool_string)] - - syntax S2KVmMethod ::= "S2KenvBool" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_S2KenvBool_string_string)] - - syntax S2KVmMethod ::= "S2KenvBytes" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_S2KenvBytes_string)] - - syntax S2KVmMethod ::= "S2KenvBytes" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_S2KenvBytes_string_string)] - - syntax S2KVmMethod ::= "S2KenvBytes32" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_S2KenvBytes32_string)] - - syntax S2KVmMethod ::= "S2KenvBytes32" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_S2KenvBytes32_string_string)] - - syntax S2KVmMethod ::= "S2KenvInt" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_S2KenvInt_string)] - - syntax S2KVmMethod ::= "S2KenvInt" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_S2KenvInt_string_string)] - - syntax S2KVmMethod ::= "S2KenvString" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_S2KenvString_string)] - - syntax S2KVmMethod ::= "S2KenvString" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_S2KenvString_string_string)] - - syntax S2KVmMethod ::= "S2KenvUint" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_S2KenvUint_string)] - - syntax S2KVmMethod ::= "S2KenvUint" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_S2KenvUint_string_string)] - - syntax S2KVmMethod ::= "S2Ketch" "(" Int ":" "address" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_Vm_S2Ketch_address_bytes)] - - syntax S2KVmMethod ::= "S2KexpectCall" "(" Int ":" "address" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_Vm_S2KexpectCall_address_bytes)] - - syntax S2KVmMethod ::= "S2KexpectCall" "(" Int ":" "address" "," Int ":" "uint256" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_Vm_S2KexpectCall_address_uint256_bytes)] - - syntax S2KVmMethod ::= "S2KexpectEmit" "(" Int ":" "bool" "," Int ":" "bool" "," Int ":" "bool" "," Int ":" "bool" ")" [symbol(), klabel(method_Vm_S2KexpectEmit_bool_bool_bool_bool)] - - syntax S2KVmMethod ::= "S2KexpectEmit" "(" Int ":" "bool" "," Int ":" "bool" "," Int ":" "bool" "," Int ":" "bool" "," Int ":" "address" ")" [symbol(), klabel(method_Vm_S2KexpectEmit_bool_bool_bool_bool_address)] - - syntax S2KVmMethod ::= "S2KexpectRevert" "(" ")" [symbol(), klabel(method_Vm_S2KexpectRevert_)] - - syntax S2KVmMethod ::= "S2KexpectRevert" "(" Bytes ":" "bytes" ")" [symbol(), klabel(method_Vm_S2KexpectRevert_bytes)] - - syntax S2KVmMethod ::= "S2KexpectRevert" "(" Int ":" "bytes4" ")" [symbol(), klabel(method_Vm_S2KexpectRevert_bytes4)] - - syntax S2KVmMethod ::= "S2Kfee" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_S2Kfee_uint256)] - - syntax S2KVmMethod ::= "S2Kffi" "(" K ":" "string[]" ")" [symbol(), klabel(method_Vm_S2Kffi_string[])] - - syntax S2KVmMethod ::= "S2KgetCode" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_S2KgetCode_string)] - - syntax S2KVmMethod ::= "S2KgetNonce" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_S2KgetNonce_address)] - - syntax S2KVmMethod ::= "S2KgetRecordedLogs" "(" ")" [symbol(), klabel(method_Vm_S2KgetRecordedLogs_)] - - syntax S2KVmMethod ::= "S2Klabel" "(" Int ":" "address" "," String ":" "string" ")" [symbol(), klabel(method_Vm_S2Klabel_address_string)] - - syntax S2KVmMethod ::= "S2Kload" "(" Int ":" "address" "," Int ":" "bytes32" ")" [symbol(), klabel(method_Vm_S2Kload_address_bytes32)] - - syntax S2KVmMethod ::= "S2KmockCall" "(" Int ":" "address" "," Bytes ":" "bytes" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_Vm_S2KmockCall_address_bytes_bytes)] - - syntax S2KVmMethod ::= "S2KmockCall" "(" Int ":" "address" "," Int ":" "uint256" "," Bytes ":" "bytes" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_Vm_S2KmockCall_address_uint256_bytes_bytes)] - - syntax S2KVmMethod ::= "S2Kprank" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_S2Kprank_address)] - - syntax S2KVmMethod ::= "S2Kprank" "(" Int ":" "address" "," Int ":" "address" ")" [symbol(), klabel(method_Vm_S2Kprank_address_address)] - - syntax S2KVmMethod ::= "S2KreadFile" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_S2KreadFile_string)] - - syntax S2KVmMethod ::= "S2KreadLine" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_S2KreadLine_string)] - - syntax S2KVmMethod ::= "S2Krecord" "(" ")" [symbol(), klabel(method_Vm_S2Krecord_)] - - syntax S2KVmMethod ::= "S2KrecordLogs" "(" ")" [symbol(), klabel(method_Vm_S2KrecordLogs_)] - - syntax S2KVmMethod ::= "S2KremoveFile" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_S2KremoveFile_string)] - - syntax S2KVmMethod ::= "S2KrevertTo" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_S2KrevertTo_uint256)] - - syntax S2KVmMethod ::= "S2Kroll" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_S2Kroll_uint256)] - - syntax S2KVmMethod ::= "S2KrollFork" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_S2KrollFork_uint256)] - - syntax S2KVmMethod ::= "S2KrollFork" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_Vm_S2KrollFork_uint256_uint256)] - - syntax S2KVmMethod ::= "S2KrpcUrl" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_S2KrpcUrl_string)] - - syntax S2KVmMethod ::= "S2KrpcUrls" "(" ")" [symbol(), klabel(method_Vm_S2KrpcUrls_)] - - syntax S2KVmMethod ::= "S2KselectFork" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_S2KselectFork_uint256)] - - syntax S2KVmMethod ::= "S2KsetEnv" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_S2KsetEnv_string_string)] - - syntax S2KVmMethod ::= "S2KsetNonce" "(" Int ":" "address" "," Int ":" "uint64" ")" [symbol(), klabel(method_Vm_S2KsetNonce_address_uint64)] - - syntax S2KVmMethod ::= "S2Ksign" "(" Int ":" "uint256" "," Int ":" "bytes32" ")" [symbol(), klabel(method_Vm_S2Ksign_uint256_bytes32)] - - syntax S2KVmMethod ::= "S2Ksnapshot" "(" ")" [symbol(), klabel(method_Vm_S2Ksnapshot_)] - - syntax S2KVmMethod ::= "S2KstartBroadcast" "(" ")" [symbol(), klabel(method_Vm_S2KstartBroadcast_)] - - syntax S2KVmMethod ::= "S2KstartBroadcast" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_S2KstartBroadcast_address)] - - syntax S2KVmMethod ::= "S2KstartPrank" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_S2KstartPrank_address)] - - syntax S2KVmMethod ::= "S2KstartPrank" "(" Int ":" "address" "," Int ":" "address" ")" [symbol(), klabel(method_Vm_S2KstartPrank_address_address)] - - syntax S2KVmMethod ::= "S2KstopBroadcast" "(" ")" [symbol(), klabel(method_Vm_S2KstopBroadcast_)] - - syntax S2KVmMethod ::= "S2KstopPrank" "(" ")" [symbol(), klabel(method_Vm_S2KstopPrank_)] - - syntax S2KVmMethod ::= "S2Kstore" "(" Int ":" "address" "," Int ":" "bytes32" "," Int ":" "bytes32" ")" [symbol(), klabel(method_Vm_S2Kstore_address_bytes32_bytes32)] - - syntax S2KVmMethod ::= "S2KtoString" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_S2KtoString_address)] - - syntax S2KVmMethod ::= "S2KtoString" "(" Int ":" "bool" ")" [symbol(), klabel(method_Vm_S2KtoString_bool)] - - syntax S2KVmMethod ::= "S2KtoString" "(" Bytes ":" "bytes" ")" [symbol(), klabel(method_Vm_S2KtoString_bytes)] - - syntax S2KVmMethod ::= "S2KtoString" "(" Int ":" "bytes32" ")" [symbol(), klabel(method_Vm_S2KtoString_bytes32)] - - syntax S2KVmMethod ::= "S2KtoString" "(" Int ":" "int256" ")" [symbol(), klabel(method_Vm_S2KtoString_int256)] - - syntax S2KVmMethod ::= "S2KtoString" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_S2KtoString_uint256)] - - syntax S2KVmMethod ::= "S2Kwarp" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_S2Kwarp_uint256)] - - syntax S2KVmMethod ::= "S2KwriteFile" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_S2KwriteFile_string_string)] - - syntax S2KVmMethod ::= "S2KwriteLine" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_S2KwriteLine_string_string)] - - rule ( S2KVm . S2Kaccesses ( V0_ : address ) => #abiCallData ( "accesses" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( S2KVm . S2KactiveFork ( ) => #abiCallData ( "activeFork" , .TypedArgs ) ) - - - rule ( S2KVm . S2Kaddr ( V0_ : uint256 ) => #abiCallData ( "addr" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( S2KVm . S2Kassume ( V0_ : bool ) => #abiCallData ( "assume" , #bool ( V0_ ) , .TypedArgs ) ) - ensures #rangeBool ( V0_ ) - - - rule ( S2KVm . S2Kbroadcast ( ) => #abiCallData ( "broadcast" , .TypedArgs ) ) - - - rule ( S2KVm . S2Kbroadcast ( V0_ : address ) => #abiCallData ( "broadcast" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( S2KVm . S2KchainId ( V0_ : uint256 ) => #abiCallData ( "chainId" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( S2KVm . S2KclearMockedCalls ( ) => #abiCallData ( "clearMockedCalls" , .TypedArgs ) ) - - - rule ( S2KVm . S2KcloseFile ( V0_ : string ) => #abiCallData ( "closeFile" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2Kcoinbase ( V0_ : address ) => #abiCallData ( "coinbase" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( S2KVm . S2KcreateFork ( V0_ : string ) => #abiCallData ( "createFork" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KcreateFork ( V0_ : string , V1_ : uint256 ) => #abiCallData ( "createFork" , #string ( V0_ ) , #uint256 ( V1_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V1_ ) - - - rule ( S2KVm . S2KcreateSelectFork ( V0_ : string ) => #abiCallData ( "createSelectFork" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KcreateSelectFork ( V0_ : string , V1_ : uint256 ) => #abiCallData ( "createSelectFork" , #string ( V0_ ) , #uint256 ( V1_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V1_ ) - - - rule ( S2KVm . S2Kdeal ( V0_ : address , V1_ : uint256 ) => #abiCallData ( "deal" , #address ( V0_ ) , #uint256 ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - )) - - - rule ( S2KVm . S2KderiveKey ( V0_ : string , V1_ : string , V2_ : uint32 ) => #abiCallData ( "deriveKey" , #string ( V0_ ) , #string ( V1_ ) , #uint32 ( V2_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 32 , V2_ ) - - - rule ( S2KVm . S2KderiveKey ( V0_ : string , V1_ : uint32 ) => #abiCallData ( "deriveKey" , #string ( V0_ ) , #uint32 ( V1_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 32 , V1_ ) - - - rule ( S2KVm . S2KenvAddress ( V0_ : string ) => #abiCallData ( "envAddress" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KenvAddress ( V0_ : string , V1_ : string ) => #abiCallData ( "envAddress" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KenvBool ( V0_ : string ) => #abiCallData ( "envBool" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KenvBool ( V0_ : string , V1_ : string ) => #abiCallData ( "envBool" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KenvBytes ( V0_ : string ) => #abiCallData ( "envBytes" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KenvBytes ( V0_ : string , V1_ : string ) => #abiCallData ( "envBytes" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KenvBytes32 ( V0_ : string ) => #abiCallData ( "envBytes32" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KenvBytes32 ( V0_ : string , V1_ : string ) => #abiCallData ( "envBytes32" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KenvInt ( V0_ : string ) => #abiCallData ( "envInt" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KenvInt ( V0_ : string , V1_ : string ) => #abiCallData ( "envInt" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KenvString ( V0_ : string ) => #abiCallData ( "envString" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KenvString ( V0_ : string , V1_ : string ) => #abiCallData ( "envString" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KenvUint ( V0_ : string ) => #abiCallData ( "envUint" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KenvUint ( V0_ : string , V1_ : string ) => #abiCallData ( "envUint" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2Ketch ( V0_ : address , V1_ : bytes ) => #abiCallData ( "etch" , #address ( V0_ ) , #bytes ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V1_ ) ) - )) - - - rule ( S2KVm . S2KexpectCall ( V0_ : address , V1_ : bytes ) => #abiCallData ( "expectCall" , #address ( V0_ ) , #bytes ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V1_ ) ) - )) - - - rule ( S2KVm . S2KexpectCall ( V0_ : address , V1_ : uint256 , V2_ : bytes ) => #abiCallData ( "expectCall" , #address ( V0_ ) , #uint256 ( V1_ ) , #bytes ( V2_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V2_ ) ) - ))) - - - rule ( S2KVm . S2KexpectEmit ( V0_ : bool , V1_ : bool , V2_ : bool , V3_ : bool ) => #abiCallData ( "expectEmit" , #bool ( V0_ ) , #bool ( V1_ ) , #bool ( V2_ ) , #bool ( V3_ ) , .TypedArgs ) ) - ensures ( #rangeBool ( V0_ ) - andBool ( #rangeBool ( V1_ ) - andBool ( #rangeBool ( V2_ ) - andBool ( #rangeBool ( V3_ ) - )))) - - - rule ( S2KVm . S2KexpectEmit ( V0_ : bool , V1_ : bool , V2_ : bool , V3_ : bool , V4_ : address ) => #abiCallData ( "expectEmit" , #bool ( V0_ ) , #bool ( V1_ ) , #bool ( V2_ ) , #bool ( V3_ ) , #address ( V4_ ) , .TypedArgs ) ) - ensures ( #rangeBool ( V0_ ) - andBool ( #rangeBool ( V1_ ) - andBool ( #rangeBool ( V2_ ) - andBool ( #rangeBool ( V3_ ) - andBool ( #rangeAddress ( V4_ ) - ))))) - - - rule ( S2KVm . S2KexpectRevert ( ) => #abiCallData ( "expectRevert" , .TypedArgs ) ) - - - rule ( S2KVm . S2KexpectRevert ( V0_ : bytes ) => #abiCallData ( "expectRevert" , #bytes ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 128 , lengthBytes ( V0_ ) ) - - - rule ( S2KVm . S2KexpectRevert ( V0_ : bytes4 ) => #abiCallData ( "expectRevert" , #bytes4 ( V0_ ) , .TypedArgs ) ) - ensures #rangeBytes ( 4 , V0_ ) - - - rule ( S2KVm . S2Kfee ( V0_ : uint256 ) => #abiCallData ( "fee" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( S2KVm . S2KgetCode ( V0_ : string ) => #abiCallData ( "getCode" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KgetNonce ( V0_ : address ) => #abiCallData ( "getNonce" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( S2KVm . S2KgetRecordedLogs ( ) => #abiCallData ( "getRecordedLogs" , .TypedArgs ) ) - - - rule ( S2KVm . S2Klabel ( V0_ : address , V1_ : string ) => #abiCallData ( "label" , #address ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( S2KVm . S2Kload ( V0_ : address , V1_ : bytes32 ) => #abiCallData ( "load" , #address ( V0_ ) , #bytes32 ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeBytes ( 32 , V1_ ) - )) - - - rule ( S2KVm . S2KmockCall ( V0_ : address , V1_ : bytes , V2_ : bytes ) => #abiCallData ( "mockCall" , #address ( V0_ ) , #bytes ( V1_ ) , #bytes ( V2_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V1_ ) ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V2_ ) ) - ))) - - - rule ( S2KVm . S2KmockCall ( V0_ : address , V1_ : uint256 , V2_ : bytes , V3_ : bytes ) => #abiCallData ( "mockCall" , #address ( V0_ ) , #uint256 ( V1_ ) , #bytes ( V2_ ) , #bytes ( V3_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V2_ ) ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V3_ ) ) - )))) - - - rule ( S2KVm . S2Kprank ( V0_ : address ) => #abiCallData ( "prank" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( S2KVm . S2Kprank ( V0_ : address , V1_ : address ) => #abiCallData ( "prank" , #address ( V0_ ) , #address ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeAddress ( V1_ ) - )) - - - rule ( S2KVm . S2KreadFile ( V0_ : string ) => #abiCallData ( "readFile" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KreadLine ( V0_ : string ) => #abiCallData ( "readLine" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2Krecord ( ) => #abiCallData ( "record" , .TypedArgs ) ) - - - rule ( S2KVm . S2KrecordLogs ( ) => #abiCallData ( "recordLogs" , .TypedArgs ) ) - - - rule ( S2KVm . S2KremoveFile ( V0_ : string ) => #abiCallData ( "removeFile" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KrevertTo ( V0_ : uint256 ) => #abiCallData ( "revertTo" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( S2KVm . S2Kroll ( V0_ : uint256 ) => #abiCallData ( "roll" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( S2KVm . S2KrollFork ( V0_ : uint256 ) => #abiCallData ( "rollFork" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( S2KVm . S2KrollFork ( V0_forkId : uint256 , V1_blockNumber : uint256 ) => #abiCallData ( "rollFork" , #uint256 ( V0_forkId ) , #uint256 ( V1_blockNumber ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_forkId ) - andBool ( #rangeUInt ( 256 , V1_blockNumber ) - )) - - - rule ( S2KVm . S2KrpcUrl ( V0_ : string ) => #abiCallData ( "rpcUrl" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KrpcUrls ( ) => #abiCallData ( "rpcUrls" , .TypedArgs ) ) - - - rule ( S2KVm . S2KselectFork ( V0_ : uint256 ) => #abiCallData ( "selectFork" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( S2KVm . S2KsetEnv ( V0_ : string , V1_ : string ) => #abiCallData ( "setEnv" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KsetNonce ( V0_ : address , V1_ : uint64 ) => #abiCallData ( "setNonce" , #address ( V0_ ) , #uint64 ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 64 , V1_ ) - )) - - - rule ( S2KVm . S2Ksign ( V0_ : uint256 , V1_ : bytes32 ) => #abiCallData ( "sign" , #uint256 ( V0_ ) , #bytes32 ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_ ) - andBool ( #rangeBytes ( 32 , V1_ ) - )) - - - rule ( S2KVm . S2Ksnapshot ( ) => #abiCallData ( "snapshot" , .TypedArgs ) ) - - - rule ( S2KVm . S2KstartBroadcast ( ) => #abiCallData ( "startBroadcast" , .TypedArgs ) ) - - - rule ( S2KVm . S2KstartBroadcast ( V0_ : address ) => #abiCallData ( "startBroadcast" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( S2KVm . S2KstartPrank ( V0_ : address ) => #abiCallData ( "startPrank" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( S2KVm . S2KstartPrank ( V0_ : address , V1_ : address ) => #abiCallData ( "startPrank" , #address ( V0_ ) , #address ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeAddress ( V1_ ) - )) - - - rule ( S2KVm . S2KstopBroadcast ( ) => #abiCallData ( "stopBroadcast" , .TypedArgs ) ) - - - rule ( S2KVm . S2KstopPrank ( ) => #abiCallData ( "stopPrank" , .TypedArgs ) ) - - - rule ( S2KVm . S2Kstore ( V0_ : address , V1_ : bytes32 , V2_ : bytes32 ) => #abiCallData ( "store" , #address ( V0_ ) , #bytes32 ( V1_ ) , #bytes32 ( V2_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeBytes ( 32 , V1_ ) - andBool ( #rangeBytes ( 32 , V2_ ) - ))) - - - rule ( S2KVm . S2KtoString ( V0_ : address ) => #abiCallData ( "toString" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( S2KVm . S2KtoString ( V0_ : bool ) => #abiCallData ( "toString" , #bool ( V0_ ) , .TypedArgs ) ) - ensures #rangeBool ( V0_ ) - - - rule ( S2KVm . S2KtoString ( V0_ : bytes ) => #abiCallData ( "toString" , #bytes ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 128 , lengthBytes ( V0_ ) ) - - - rule ( S2KVm . S2KtoString ( V0_ : bytes32 ) => #abiCallData ( "toString" , #bytes32 ( V0_ ) , .TypedArgs ) ) - ensures #rangeBytes ( 32 , V0_ ) - - - rule ( S2KVm . S2KtoString ( V0_ : int256 ) => #abiCallData ( "toString" , #int256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeSInt ( 256 , V0_ ) - - - rule ( S2KVm . S2KtoString ( V0_ : uint256 ) => #abiCallData ( "toString" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( S2KVm . S2Kwarp ( V0_ : uint256 ) => #abiCallData ( "warp" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( S2KVm . S2KwriteFile ( V0_ : string , V1_ : string ) => #abiCallData ( "writeFile" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( S2KVm . S2KwriteLine ( V0_ : string , V1_ : string ) => #abiCallData ( "writeLine" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( selector ( "accesses(address)" ) => 1706857601 ) - - - rule ( selector ( "activeFork()" ) => 789593890 ) - - - rule ( selector ( "addr(uint256)" ) => 4288775753 ) - - - rule ( selector ( "assume(bool)" ) => 1281615202 ) - - - rule ( selector ( "broadcast()" ) => 2949218368 ) - - - rule ( selector ( "broadcast(address)" ) => 3868601563 ) - - - rule ( selector ( "chainId(uint256)" ) => 1078582738 ) - - - rule ( selector ( "clearMockedCalls()" ) => 1071599125 ) - - - rule ( selector ( "closeFile(string)" ) => 1220748319 ) - - - rule ( selector ( "coinbase(address)" ) => 4282924116 ) - - - rule ( selector ( "createFork(string)" ) => 834286744 ) - - - rule ( selector ( "createFork(string,uint256)" ) => 1805892139 ) - - - rule ( selector ( "createSelectFork(string)" ) => 2556952628 ) - - - rule ( selector ( "createSelectFork(string,uint256)" ) => 1911440973 ) - - - rule ( selector ( "deal(address,uint256)" ) => 3364511341 ) - - - rule ( selector ( "deriveKey(string,string,uint32)" ) => 1808477211 ) - - - rule ( selector ( "deriveKey(string,uint32)" ) => 1646872971 ) - - - rule ( selector ( "envAddress(string)" ) => 890066623 ) - - - rule ( selector ( "envAddress(string,string)" ) => 2905717242 ) - - - rule ( selector ( "envBool(string)" ) => 2127686781 ) - - - rule ( selector ( "envBool(string,string)" ) => 2863521455 ) - - - rule ( selector ( "envBytes(string)" ) => 1299951366 ) - - - rule ( selector ( "envBytes(string,string)" ) => 3720504603 ) - - - rule ( selector ( "envBytes32(string)" ) => 2543095874 ) - - - rule ( selector ( "envBytes32(string,string)" ) => 1525821889 ) - - - rule ( selector ( "envInt(string)" ) => 2301234273 ) - - - rule ( selector ( "envInt(string,string)" ) => 1108873552 ) - - - rule ( selector ( "envString(string)" ) => 4168600345 ) - - - rule ( selector ( "envString(string,string)" ) => 347089865 ) - - - rule ( selector ( "envUint(string)" ) => 3247934751 ) - - - rule ( selector ( "envUint(string,string)" ) => 4091461785 ) - - - rule ( selector ( "etch(address,bytes)" ) => 3033974658 ) - - - rule ( selector ( "expectCall(address,bytes)" ) => 3177903156 ) - - - rule ( selector ( "expectCall(address,uint256,bytes)" ) => 4077681571 ) - - - rule ( selector ( "expectEmit(bool,bool,bool,bool)" ) => 1226622914 ) - - - rule ( selector ( "expectEmit(bool,bool,bool,bool,address)" ) => 2176505587 ) - - - rule ( selector ( "expectRevert()" ) => 4102309908 ) - - - rule ( selector ( "expectRevert(bytes)" ) => 4069379763 ) - - - rule ( selector ( "expectRevert(bytes4)" ) => 3273568480 ) - - - rule ( selector ( "fee(uint256)" ) => 968063664 ) - - - rule ( selector ( "ffi(string[])" ) => 2299921511 ) - - - rule ( selector ( "getCode(string)" ) => 2367473957 ) - - - rule ( selector ( "getNonce(address)" ) => 755185067 ) - - - rule ( selector ( "getRecordedLogs()" ) => 420828068 ) - - - rule ( selector ( "label(address,string)" ) => 3327641368 ) - - - rule ( selector ( "load(address,bytes32)" ) => 1719639408 ) - - - rule ( selector ( "mockCall(address,bytes,bytes)" ) => 3110212580 ) - - - rule ( selector ( "mockCall(address,uint256,bytes,bytes)" ) => 2168494993 ) - - - rule ( selector ( "prank(address)" ) => 3395723175 ) - - - rule ( selector ( "prank(address,address)" ) => 1206193358 ) - - - rule ( selector ( "readFile(string)" ) => 1626979089 ) - - - rule ( selector ( "readLine(string)" ) => 1895126824 ) - - - rule ( selector ( "record()" ) => 644673801 ) - - - rule ( selector ( "recordLogs()" ) => 1101999954 ) - - - rule ( selector ( "removeFile(string)" ) => 4054835277 ) - - - rule ( selector ( "revertTo(uint256)" ) => 1155002532 ) - - - rule ( selector ( "roll(uint256)" ) => 528174896 ) - - - rule ( selector ( "rollFork(uint256)" ) => 3652973473 ) - - - rule ( selector ( "rollFork(uint256,uint256)" ) => 3612115876 ) - - - rule ( selector ( "rpcUrl(string)" ) => 2539285737 ) - - - rule ( selector ( "rpcUrls()" ) => 2824504344 ) - - - rule ( selector ( "selectFork(uint256)" ) => 2663344167 ) - - - rule ( selector ( "setEnv(string,string)" ) => 1029252078 ) - - - rule ( selector ( "setNonce(address,uint64)" ) => 4175530839 ) - - - rule ( selector ( "sign(uint256,bytes32)" ) => 3812747940 ) - - - rule ( selector ( "snapshot()" ) => 2534502746 ) - - - rule ( selector ( "startBroadcast()" ) => 2142579071 ) - - - rule ( selector ( "startBroadcast(address)" ) => 2146183821 ) - - - rule ( selector ( "startPrank(address)" ) => 105151830 ) - - - rule ( selector ( "startPrank(address,address)" ) => 1169514616 ) - - - rule ( selector ( "stopBroadcast()" ) => 1995103542 ) - - - rule ( selector ( "stopPrank()" ) => 2428830011 ) - - - rule ( selector ( "store(address,bytes32,bytes32)" ) => 1892290747 ) - - - rule ( selector ( "toString(address)" ) => 1456103998 ) - - - rule ( selector ( "toString(bool)" ) => 1910302682 ) - - - rule ( selector ( "toString(bytes)" ) => 1907020045 ) - - - rule ( selector ( "toString(bytes32)" ) => 2971277800 ) - - - rule ( selector ( "toString(int256)" ) => 2736964622 ) - - - rule ( selector ( "toString(uint256)" ) => 1761649582 ) - - - rule ( selector ( "warp(uint256)" ) => 3856056066 ) - - - rule ( selector ( "writeFile(string,string)" ) => 2306738839 ) - - - rule ( selector ( "writeLine(string,string)" ) => 1637714303 ) - - -endmodule - -module console-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KconsoleContract - - syntax S2KconsoleContract ::= "S2Kconsole" [symbol(), klabel(contract_console)] - - - -endmodule - -module console2-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2Kconsole2Contract - - syntax S2Kconsole2Contract ::= "S2Kconsole2" [symbol(), klabel(contract_console2)] - - - -endmodule - -module DSTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= S2KDSTestContract - - syntax S2KDSTestContract ::= "S2KDSTest" [symbol(), klabel(contract_DSTest)] - - - - syntax Field ::= DSTestField - - syntax DSTestField ::= "IS_TEST" [symbol(), klabel(field_DSTest_IS_TEST)] - - syntax DSTestField ::= "_failed" [symbol(), klabel(field_DSTest__failed)] - - rule ( #loc ( S2KDSTest . IS_TEST ) => 0 ) - - - rule ( #loc ( S2KDSTest . _failed ) => 0 ) - - - syntax Bytes ::= S2KDSTestContract "." S2KDSTestMethod [function(), symbol(), klabel(method_DSTest)] - - syntax S2KDSTestMethod ::= "S2KISZUndTEST" "(" ")" [symbol(), klabel(method_DSTest_S2KISZUndTEST_)] - - syntax S2KDSTestMethod ::= "S2Kfailed" "(" ")" [symbol(), klabel(method_DSTest_S2Kfailed_)] - - rule ( S2KDSTest . S2KISZUndTEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( S2KDSTest . S2Kfailed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - -endmodule diff --git a/kevm-pyk/src/tests/integration/test-data/examples/ERC20.sol b/kevm-pyk/src/tests/integration/test-data/examples/ERC20.sol deleted file mode 100644 index f62add45a8..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/examples/ERC20.sol +++ /dev/null @@ -1,94 +0,0 @@ -// THIS IS A BUGGY ERC20 -// DO NOT USE FOR ANYTHING - -pragma solidity >=0.6.0; - -contract ERC20 { - - mapping(address => uint256) private _balances; - mapping(address => mapping(address => uint256)) private _allowances; - - uint256 private _totalSupply; - uint8 private _decimals; - string private _name; - string private _symbol; - - constructor ( - string memory name - , string memory symbol - , address initAccount - , uint256 initSupply - , uint8 decimals - ) public { - _name = name; - _symbol = symbol; - _decimals = decimals; - _mint(initAccount, initSupply); - } - - function name() public view returns (string memory) { return _name; } - function symbol() public view returns (string memory) { return _symbol; } - function decimals() public view returns (uint256) { return _decimals; } - function totalSupply() public view returns (uint256) { return _totalSupply; } - - function balanceOf(address account) external view returns (uint256) { - return _balances[account]; - } - - function transfer(address to, uint256 amount) external returns (bool) { - _transfer(msg.sender, to, amount); - return true; - } - - function allowance(address owner, address spender) external view returns (uint256) { - return _allowances[owner][spender]; - } - - function approve(address spender, uint256 amount) external returns (bool) { - _approve(msg.sender, spender, amount); - return true; - } - - function transferFrom(address from, address to, uint256 amount) external returns (bool) { - _transfer(from, to, amount); - - uint256 currentAllowance = _allowances[from][msg.sender]; - require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); - _approve(from, msg.sender, currentAllowance - amount); - - return true; - } - - function _transfer(address from, address to, uint256 amount) internal { - require(from != address(0), "ERC20: transfer from the zero address"); - require(to != address(0), "ERC20: transfer to the zero address"); - uint256 toBalance = _balances[to]; - uint256 fromBalance = _balances[from]; - require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); - uint256 fromBalanceUpdated = fromBalance - amount; - uint256 toBalanceUpdated = toBalance + amount; - _balances[from] = fromBalanceUpdated; - _balances[to] = toBalanceUpdated; - } - - function _approve(address owner, address spender, uint256 amount) internal { - require(owner != address(0), "ERC20: approve from the zero address"); - require(spender != address(0), "ERC20: approve to the zero address"); - - _allowances[owner][spender] = amount; - } - - function _mint(address account, uint256 amount) internal { - require(account != address(0), "ERC20: mint to the zero address"); - require(_totalSupply <= _totalSupply + amount);//check overflow on totalSupply - _totalSupply = _totalSupply + amount; - _balances[account] = _balances[account] + amount; - } - - function _burn(address account, uint256 amount) internal { - require(account != address(0), "ERC20: burn from the zero address"); - require(_balances[account] >= _balances[account] - amount);//check underflow on balances - _totalSupply = _totalSupply - amount; - _balances[account] = _balances[account] - amount; - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/examples/ERC721.sol b/kevm-pyk/src/tests/integration/test-data/examples/ERC721.sol deleted file mode 100644 index d3ec55f9d1..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/examples/ERC721.sol +++ /dev/null @@ -1,982 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -// OpenZeppelin Contracts v4.4.1 (utils/Address.sol) - -/** - * @dev Collection of functions related to the address type - */ -library Address { - /** - * @dev Returns true if `account` is a contract. - * - * [IMPORTANT] - * ==== - * It is unsafe to assume that an address for which this function returns - * false is an externally-owned account (EOA) and not a contract. - * - * Among others, `isContract` will return false for the following - * types of addresses: - * - * - an externally-owned account - * - a contract in construction - * - an address where a contract will be created - * - an address where a contract lived, but was destroyed - * ==== - * - * [IMPORTANT] - * ==== - * You shouldn't rely on `isContract` to protect against flash loan attacks! - * - * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets - * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract - * constructor. - * ==== - */ - function isContract(address account) internal view returns (bool) { - // This method relies on extcodesize/address.code.length, which returns 0 - // for contracts in construction, since the code is only stored at the end - // of the constructor execution. - - return account.code.length > 0; - } - - /** - * @dev Replacement for Solidity's `transfer`: sends `amount` wei to - * `recipient`, forwarding all available gas and reverting on errors. - * - * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost - * of certain opcodes, possibly making contracts go over the 2300 gas limit - * imposed by `transfer`, making them unable to receive funds via - * `transfer`. {sendValue} removes this limitation. - * - * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. - * - * IMPORTANT: because control is transferred to `recipient`, care must be - * taken to not create reentrancy vulnerabilities. Consider using - * {ReentrancyGuard} or the - * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. - */ - function sendValue(address payable recipient, uint256 amount) internal { - require(address(this).balance >= amount, "Address: insufficient balance"); - - (bool success, ) = recipient.call{value: amount}(""); - require(success, "Address: unable to send value, recipient may have reverted"); - } - - /** - * @dev Performs a Solidity function call using a low level `call`. A - * plain `call` is an unsafe replacement for a function call: use this - * function instead. - * - * If `target` reverts with a revert reason, it is bubbled up by this - * function (like regular Solidity function calls). - * - * Returns the raw returned data. To convert to the expected return value, - * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. - * - * Requirements: - * - * - `target` must be a contract. - * - calling `target` with `data` must not revert. - * - * _Available since v3.1._ - */ - function functionCall(address target, bytes memory data) internal returns (bytes memory) { - return functionCall(target, data, "Address: low-level call failed"); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with - * `errorMessage` as a fallback revert reason when `target` reverts. - * - * _Available since v3.1._ - */ - function functionCall( - address target, - bytes memory data, - string memory errorMessage - ) internal returns (bytes memory) { - return functionCallWithValue(target, data, 0, errorMessage); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], - * but also transferring `value` wei to `target`. - * - * Requirements: - * - * - the calling contract must have an ETH balance of at least `value`. - * - the called Solidity function must be `payable`. - * - * _Available since v3.1._ - */ - function functionCallWithValue( - address target, - bytes memory data, - uint256 value - ) internal returns (bytes memory) { - return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); - } - - /** - * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but - * with `errorMessage` as a fallback revert reason when `target` reverts. - * - * _Available since v3.1._ - */ - function functionCallWithValue( - address target, - bytes memory data, - uint256 value, - string memory errorMessage - ) internal returns (bytes memory) { - require(address(this).balance >= value, "Address: insufficient balance for call"); - require(isContract(target), "Address: call to non-contract"); - - (bool success, bytes memory returndata) = target.call{value: value}(data); - return verifyCallResult(success, returndata, errorMessage); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], - * but performing a static call. - * - * _Available since v3.3._ - */ - function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { - return functionStaticCall(target, data, "Address: low-level static call failed"); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], - * but performing a static call. - * - * _Available since v3.3._ - */ - function functionStaticCall( - address target, - bytes memory data, - string memory errorMessage - ) internal view returns (bytes memory) { - require(isContract(target), "Address: static call to non-contract"); - - (bool success, bytes memory returndata) = target.staticcall(data); - return verifyCallResult(success, returndata, errorMessage); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], - * but performing a delegate call. - * - * _Available since v3.4._ - */ - function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { - return functionDelegateCall(target, data, "Address: low-level delegate call failed"); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], - * but performing a delegate call. - * - * _Available since v3.4._ - */ - function functionDelegateCall( - address target, - bytes memory data, - string memory errorMessage - ) internal returns (bytes memory) { - require(isContract(target), "Address: delegate call to non-contract"); - - (bool success, bytes memory returndata) = target.delegatecall(data); - return verifyCallResult(success, returndata, errorMessage); - } - - /** - * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the - * revert reason using the provided one. - * - * _Available since v4.3._ - */ - function verifyCallResult( - bool success, - bytes memory returndata, - string memory errorMessage - ) internal pure returns (bytes memory) { - if (success) { - return returndata; - } else { - // Look for revert reason and bubble it up if present - if (returndata.length > 0) { - // The easiest way to bubble the revert reason is using memory via assembly - - assembly { - let returndata_size := mload(returndata) - revert(add(32, returndata), returndata_size) - } - } else { - revert(errorMessage); - } - } - } -} - -// OpenZeppelin Contracts v4.4.1 (utils/Context.sol) - -/** - * @dev Provides information about the current execution context, including the - * sender of the transaction and its data. While these are generally available - * via msg.sender and msg.data, they should not be accessed in such a direct - * manner, since when dealing with meta-transactions the account sending and - * paying for execution may not be the actual sender (as far as an application - * is concerned). - * - * This contract is only required for intermediate, library-like contracts. - */ -abstract contract Context { - function _msgSender() internal view virtual returns (address) { - return msg.sender; - } - - function _msgData() internal view virtual returns (bytes calldata) { - return msg.data; - } -} - -// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) - -/** - * @dev String operations. - */ -library Strings { - bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; - - /** - * @dev Converts a `uint256` to its ASCII `string` decimal representation. - */ - function toString(uint256 value) internal pure returns (string memory) { - // Inspired by OraclizeAPI's implementation - MIT licence - // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol - - if (value == 0) { - return "0"; - } - uint256 temp = value; - uint256 digits; - while (temp != 0) { - digits++; - temp /= 10; - } - bytes memory buffer = new bytes(digits); - while (value != 0) { - digits -= 1; - buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); - value /= 10; - } - return string(buffer); - } - - /** - * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. - */ - function toHexString(uint256 value) internal pure returns (string memory) { - if (value == 0) { - return "0x00"; - } - uint256 temp = value; - uint256 length = 0; - while (temp != 0) { - length++; - temp >>= 8; - } - return toHexString(value, length); - } - - /** - * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. - */ - function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { - bytes memory buffer = new bytes(2 * length + 2); - buffer[0] = "0"; - buffer[1] = "x"; - for (uint256 i = 2 * length + 1; i > 1; --i) { - buffer[i] = _HEX_SYMBOLS[value & 0xf]; - value >>= 4; - } - require(value == 0, "Strings: hex length insufficient"); - return string(buffer); - } -} - -// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) - -/** - * @dev Interface of the ERC165 standard, as defined in the - * https://eips.ethereum.org/EIPS/eip-165[EIP]. - * - * Implementers can declare support of contract interfaces, which can then be - * queried by others ({ERC165Checker}). - * - * For an implementation, see {ERC165}. - */ -interface IERC165 { - /** - * @dev Returns true if this contract implements the interface defined by - * `interfaceId`. See the corresponding - * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] - * to learn more about how these ids are created. - * - * This function call must use less than 30 000 gas. - */ - function supportsInterface(bytes4 interfaceId) external view returns (bool); -} - -// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) - -/** - * @dev Implementation of the {IERC165} interface. - * - * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check - * for the additional interface id that will be supported. For example: - * - * ```solidity - * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { - * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); - * } - * ``` - * - * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. - */ -abstract contract ERC165 is IERC165 { - /** - * @dev See {IERC165-supportsInterface}. - */ - function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { - return interfaceId == type(IERC165).interfaceId; - } -} - -// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) - -/** - * @dev Required interface of an ERC721 compliant contract. - */ -interface IERC721 is IERC165 { - /** - * @dev Emitted when `tokenId` token is transferred from `from` to `to`. - */ - event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); - - /** - * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. - */ - event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); - - /** - * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. - */ - event ApprovalForAll(address indexed owner, address indexed operator, bool approved); - - /** - * @dev Returns the number of tokens in ``owner``'s account. - */ - function balanceOf(address owner) external view returns (uint256 balance); - - /** - * @dev Returns the owner of the `tokenId` token. - * - * Requirements: - * - * - `tokenId` must exist. - */ - function ownerOf(uint256 tokenId) external view returns (address owner); - - /** - * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients - * are aware of the ERC721 protocol to prevent tokens from being forever locked. - * - * Requirements: - * - * - `from` cannot be the zero address. - * - `to` cannot be the zero address. - * - `tokenId` token must exist and be owned by `from`. - * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. - * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. - * - * Emits a {Transfer} event. - */ - function safeTransferFrom( - address from, - address to, - uint256 tokenId - ) external; - - /** - * @dev Transfers `tokenId` token from `from` to `to`. - * - * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. - * - * Requirements: - * - * - `from` cannot be the zero address. - * - `to` cannot be the zero address. - * - `tokenId` token must be owned by `from`. - * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - * - * Emits a {Transfer} event. - */ - function transferFrom( - address from, - address to, - uint256 tokenId - ) external; - - /** - * @dev Gives permission to `to` to transfer `tokenId` token to another account. - * The approval is cleared when the token is transferred. - * - * Only a single account can be approved at a time, so approving the zero address clears previous approvals. - * - * Requirements: - * - * - The caller must own the token or be an approved operator. - * - `tokenId` must exist. - * - * Emits an {Approval} event. - */ - function approve(address to, uint256 tokenId) external; - - /** - * @dev Returns the account approved for `tokenId` token. - * - * Requirements: - * - * - `tokenId` must exist. - */ - function getApproved(uint256 tokenId) external view returns (address operator); - - /** - * @dev Approve or remove `operator` as an operator for the caller. - * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. - * - * Requirements: - * - * - The `operator` cannot be the caller. - * - * Emits an {ApprovalForAll} event. - */ - function setApprovalForAll(address operator, bool _approved) external; - - /** - * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. - * - * See {setApprovalForAll} - */ - function isApprovedForAll(address owner, address operator) external view returns (bool); - - /** - * @dev Safely transfers `tokenId` token from `from` to `to`. - * - * Requirements: - * - * - `from` cannot be the zero address. - * - `to` cannot be the zero address. - * - `tokenId` token must exist and be owned by `from`. - * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. - * - * Emits a {Transfer} event. - */ - function safeTransferFrom( - address from, - address to, - uint256 tokenId, - bytes calldata data - ) external; -} - -// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) - -/** - * @title ERC721 token receiver interface - * @dev Interface for any contract that wants to support safeTransfers - * from ERC721 asset contracts. - */ -interface IERC721Receiver { - /** - * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} - * by `operator` from `from`, this function is called. - * - * It must return its Solidity selector to confirm the token transfer. - * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. - * - * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. - */ - function onERC721Received( - address operator, - address from, - uint256 tokenId, - bytes calldata data - ) external returns (bytes4); -} - -// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) - -/** - * @title ERC-721 Non-Fungible Token Standard, optional metadata extension - * @dev See https://eips.ethereum.org/EIPS/eip-721 - */ -interface IERC721Metadata is IERC721 { - /** - * @dev Returns the token collection name. - */ - function name() external view returns (string memory); - - /** - * @dev Returns the token collection symbol. - */ - function symbol() external view returns (string memory); - - /** - * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. - */ - function tokenURI(uint256 tokenId) external view returns (string memory); -} - -// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) - -/** - * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including - * the Metadata extension, but not including the Enumerable extension, which is available separately as - * {ERC721Enumerable}. - */ -contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { - using Address for address; - using Strings for uint256; - - // Token name - string private _name; - - // Token symbol - string private _symbol; - - // Mapping from token ID to owner address - mapping(uint256 => address) private _owners; - - // Mapping owner address to token count - mapping(address => uint256) private _balances; - - // Mapping from token ID to approved address - mapping(uint256 => address) private _tokenApprovals; - - // Mapping from owner to operator approvals - mapping(address => mapping(address => bool)) private _operatorApprovals; - - /** - * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. - */ - constructor(string memory name_, string memory symbol_) { - _name = name_; - _symbol = symbol_; - } - - /** - * @dev See {IERC165-supportsInterface}. - */ - function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { - return - interfaceId == type(IERC721).interfaceId || - interfaceId == type(IERC721Metadata).interfaceId || - super.supportsInterface(interfaceId); - } - - /** - * @dev See {IERC721-balanceOf}. - */ - function balanceOf(address owner) public view virtual override returns (uint256) { - require(owner != address(0), "ERC721: balance query for the zero address"); - return _balances[owner]; - } - - /** - * @dev See {IERC721-ownerOf}. - */ - function ownerOf(uint256 tokenId) public view virtual override returns (address) { - address owner = _owners[tokenId]; - require(owner != address(0), "ERC721: owner query for nonexistent token"); - return owner; - } - - /** - * @dev See {IERC721Metadata-name}. - */ - function name() public view virtual override returns (string memory) { - return _name; - } - - /** - * @dev See {IERC721Metadata-symbol}. - */ - function symbol() public view virtual override returns (string memory) { - return _symbol; - } - - /** - * @dev See {IERC721Metadata-tokenURI}. - */ - function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { - require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); - - string memory baseURI = _baseURI(); - return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; - } - - /** - * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each - * token will be the concatenation of the `baseURI` and the `tokenId`. Empty - * by default, can be overriden in child contracts. - */ - function _baseURI() internal view virtual returns (string memory) { - return ""; - } - - /** - * @dev See {IERC721-approve}. - */ - function approve(address to, uint256 tokenId) public virtual override { - address owner = ERC721.ownerOf(tokenId); - require(to != owner, "ERC721: approval to current owner"); - - require( - _msgSender() == owner || isApprovedForAll(owner, _msgSender()), - "ERC721: approve caller is not owner nor approved for all" - ); - - _approve(to, tokenId); - } - - /** - * @dev See {IERC721-getApproved}. - */ - function getApproved(uint256 tokenId) public view virtual override returns (address) { - require(_exists(tokenId), "ERC721: approved query for nonexistent token"); - - return _tokenApprovals[tokenId]; - } - - /** - * @dev See {IERC721-setApprovalForAll}. - */ - function setApprovalForAll(address operator, bool approved) public virtual override { - _setApprovalForAll(_msgSender(), operator, approved); - } - - /** - * @dev See {IERC721-isApprovedForAll}. - */ - function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { - return _operatorApprovals[owner][operator]; - } - - /** - * @dev See {IERC721-transferFrom}. - */ - function transferFrom( - address from, - address to, - uint256 tokenId - ) public virtual override { - //solhint-disable-next-line max-line-length - require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); - - _transfer(from, to, tokenId); - } - - /** - * @dev See {IERC721-safeTransferFrom}. - */ - function safeTransferFrom( - address from, - address to, - uint256 tokenId - ) public virtual override { - safeTransferFrom(from, to, tokenId, ""); - } - - /** - * @dev See {IERC721-safeTransferFrom}. - */ - function safeTransferFrom( - address from, - address to, - uint256 tokenId, - bytes memory _data - ) public virtual override { - require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); - _safeTransfer(from, to, tokenId, _data); - } - - /** - * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients - * are aware of the ERC721 protocol to prevent tokens from being forever locked. - * - * `_data` is additional data, it has no specified format and it is sent in call to `to`. - * - * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. - * implement alternative mechanisms to perform token transfer, such as signature-based. - * - * Requirements: - * - * - `from` cannot be the zero address. - * - `to` cannot be the zero address. - * - `tokenId` token must exist and be owned by `from`. - * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. - * - * Emits a {Transfer} event. - */ - function _safeTransfer( - address from, - address to, - uint256 tokenId, - bytes memory _data - ) internal virtual { - _transfer(from, to, tokenId); - require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); - } - - /** - * @dev Returns whether `tokenId` exists. - * - * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. - * - * Tokens start existing when they are minted (`_mint`), - * and stop existing when they are burned (`_burn`). - */ - function _exists(uint256 tokenId) internal view virtual returns (bool) { - return _owners[tokenId] != address(0); - } - - /** - * @dev Returns whether `spender` is allowed to manage `tokenId`. - * - * Requirements: - * - * - `tokenId` must exist. - */ - function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { - require(_exists(tokenId), "ERC721: operator query for nonexistent token"); - address owner = ERC721.ownerOf(tokenId); - return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); - } - - /** - * @dev Safely mints `tokenId` and transfers it to `to`. - * - * Requirements: - * - * - `tokenId` must not exist. - * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. - * - * Emits a {Transfer} event. - */ - function _safeMint(address to, uint256 tokenId) internal virtual { - _safeMint(to, tokenId, ""); - } - - /** - * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is - * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. - */ - function _safeMint( - address to, - uint256 tokenId, - bytes memory _data - ) internal virtual { - _mint(to, tokenId); - require( - _checkOnERC721Received(address(0), to, tokenId, _data), - "ERC721: transfer to non ERC721Receiver implementer" - ); - } - - /** - * @dev Mints `tokenId` and transfers it to `to`. - * - * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible - * - * Requirements: - * - * - `tokenId` must not exist. - * - `to` cannot be the zero address. - * - * Emits a {Transfer} event. - */ - function _mint(address to, uint256 tokenId) internal virtual { - require(to != address(0), "ERC721: mint to the zero address"); - require(!_exists(tokenId), "ERC721: token already minted"); - - _beforeTokenTransfer(address(0), to, tokenId); - - _balances[to] += 1; - _owners[tokenId] = to; - - emit Transfer(address(0), to, tokenId); - - _afterTokenTransfer(address(0), to, tokenId); - } - - /** - * @dev Destroys `tokenId`. - * The approval is cleared when the token is burned. - * - * Requirements: - * - * - `tokenId` must exist. - * - * Emits a {Transfer} event. - */ - function _burn(uint256 tokenId) internal virtual { - address owner = ERC721.ownerOf(tokenId); - - _beforeTokenTransfer(owner, address(0), tokenId); - - // Clear approvals - _approve(address(0), tokenId); - - _balances[owner] -= 1; - delete _owners[tokenId]; - - emit Transfer(owner, address(0), tokenId); - - _afterTokenTransfer(owner, address(0), tokenId); - } - - /** - * @dev Transfers `tokenId` from `from` to `to`. - * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. - * - * Requirements: - * - * - `to` cannot be the zero address. - * - `tokenId` token must be owned by `from`. - * - * Emits a {Transfer} event. - */ - function _transfer( - address from, - address to, - uint256 tokenId - ) internal virtual { - require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); - require(to != address(0), "ERC721: transfer to the zero address"); - - _beforeTokenTransfer(from, to, tokenId); - - // Clear approvals from the previous owner - _approve(address(0), tokenId); - - _balances[from] -= 1; - _balances[to] += 1; - _owners[tokenId] = to; - - emit Transfer(from, to, tokenId); - - _afterTokenTransfer(from, to, tokenId); - } - - /** - * @dev Approve `to` to operate on `tokenId` - * - * Emits a {Approval} event. - */ - function _approve(address to, uint256 tokenId) internal virtual { - _tokenApprovals[tokenId] = to; - emit Approval(ERC721.ownerOf(tokenId), to, tokenId); - } - - /** - * @dev Approve `operator` to operate on all of `owner` tokens - * - * Emits a {ApprovalForAll} event. - */ - function _setApprovalForAll( - address owner, - address operator, - bool approved - ) internal virtual { - require(owner != operator, "ERC721: approve to caller"); - _operatorApprovals[owner][operator] = approved; - emit ApprovalForAll(owner, operator, approved); - } - - /** - * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. - * The call is not executed if the target address is not a contract. - * - * @param from address representing the previous owner of the given token ID - * @param to target address that will receive the tokens - * @param tokenId uint256 ID of the token to be transferred - * @param _data bytes optional data to send along with the call - * @return bool whether the call correctly returned the expected magic value - */ - function _checkOnERC721Received( - address from, - address to, - uint256 tokenId, - bytes memory _data - ) private returns (bool) { - if (to.isContract()) { - try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { - return retval == IERC721Receiver.onERC721Received.selector; - } catch (bytes memory reason) { - if (reason.length == 0) { - revert("ERC721: transfer to non ERC721Receiver implementer"); - } else { - assembly { - revert(add(32, reason), mload(reason)) - } - } - } - } else { - return true; - } - } - - /** - * @dev Hook that is called before any token transfer. This includes minting - * and burning. - * - * Calling conditions: - * - * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be - * transferred to `to`. - * - When `from` is zero, `tokenId` will be minted for `to`. - * - When `to` is zero, ``from``'s `tokenId` will be burned. - * - `from` and `to` are never both zero. - * - * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. - */ - function _beforeTokenTransfer( - address from, - address to, - uint256 tokenId - ) internal virtual {} - - /** - * @dev Hook that is called after any transfer of tokens. This includes - * minting and burning. - * - * Calling conditions: - * - * - when `from` and `to` are both non-zero. - * - `from` and `to` are never both zero. - * - * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. - */ - function _afterTokenTransfer( - address from, - address to, - uint256 tokenId - ) internal virtual {} -} diff --git a/kevm-pyk/src/tests/integration/test-data/examples/Empty.sol b/kevm-pyk/src/tests/integration/test-data/examples/Empty.sol deleted file mode 100644 index 21a7692229..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/examples/Empty.sol +++ /dev/null @@ -1,4 +0,0 @@ -pragma solidity >=0.6.0; - -contract Empty { -} diff --git a/kevm-pyk/src/tests/integration/test-data/examples/Storage.sol b/kevm-pyk/src/tests/integration/test-data/examples/Storage.sol deleted file mode 100644 index 5a795bb182..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/examples/Storage.sol +++ /dev/null @@ -1,98 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -contract Storage { - bool public myBool; - - uint8 public myUint8; - uint16 public myUint16; - uint24 public myUint24; - uint32 public myUint32; - uint40 public myUint40; - uint48 public myUint48; - uint56 public myUint56; - uint64 public myUint64; - uint72 public myUint72; - uint80 public myUint80; - uint88 public myUint88; - uint96 public myUint96; - uint104 public myUint104; - uint112 public myUint112; - uint120 public myUint120; - uint128 public myUint128; - uint136 public myUint136; - uint144 public myUint144; - uint152 public myUint152; - uint160 public myUint160; - uint168 public myUint168; - uint176 public myUint176; - uint184 public myUint184; - uint192 public myUint192; - uint200 public myUint200; - uint208 public myUint208; - uint216 public myUint216; - uint224 public myUint224; - uint232 public myUint232; - uint240 public myUint240; - uint248 public myUint248; - uint256 public myUint256; - - int8 public myInt8; - int16 public myInt16; - int24 public myInt24; - int32 public myInt32; - int40 public myInt40; - int48 public myInt48; - int56 public myInt56; - int64 public myInt64; - int72 public myInt72; - int80 public myInt80; - int88 public myInt88; - int96 public myInt96; - int104 public myInt104; - int112 public myInt112; - int120 public myInt120; - int128 public myInt128; - int136 public myInt136; - int144 public myInt144; - int152 public myInt152; - int160 public myInt160; - int168 public myInt168; - int176 public myInt176; - int184 public myInt184; - int192 public myInt192; - int200 public myInt200; - int208 public myInt208; - int216 public myInt216; - int224 public myInt224; - int232 public myInt232; - int240 public myInt240; - int248 public myInt248; - int256 public myInt256; - - string public myString; - bytes public myBytes; - - uint128[] myUint128s; - uint64[5] myUint64s; - - struct Foo { - uint128 myUint128; - uint8[] myUint8Array; - } - - Foo myFoo; - Foo[] myFoos; - - constructor () { - myBool = true; - myUint128 = 100; - myUint256 = 200; - myString = "foo"; - } - - function setMyBool(bool newBool) public { - myBool = newBool; - } - -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry-bmc-all b/kevm-pyk/src/tests/integration/test-data/foundry-bmc-all deleted file mode 100644 index 0dd1696084..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry-bmc-all +++ /dev/null @@ -1,2 +0,0 @@ -BMCLoopsTest.test_countdown_concrete() -BMCLoopsTest.test_countdown_symbolic(uint256) diff --git a/kevm-pyk/src/tests/integration/test-data/foundry-bmc-skip b/kevm-pyk/src/tests/integration/test-data/foundry-bmc-skip deleted file mode 100644 index 3b4952fcbf..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry-bmc-skip +++ /dev/null @@ -1 +0,0 @@ -BMCLoopsTest.test_countdown_symbolic(uint256) diff --git a/kevm-pyk/src/tests/integration/test-data/foundry-fail b/kevm-pyk/src/tests/integration/test-data/foundry-fail deleted file mode 100644 index 7984964f08..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry-fail +++ /dev/null @@ -1,7 +0,0 @@ -AssertTest.test_assert_false() -AssertTest.testFail_assert_true() -AssertTest.testFail_expect_revert() -AssertTest.test_failing_branch(uint256) -AssertTest.test_revert_branch(uint256,uint256) -AssumeTest.test_assume_false(uint256,uint256) -AssumeTest.testFail_assume_false(uint256,uint256) diff --git a/kevm-pyk/src/tests/integration/test-data/foundry-prove-all b/kevm-pyk/src/tests/integration/test-data/foundry-prove-all deleted file mode 100644 index 6687d0f1de..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry-prove-all +++ /dev/null @@ -1,295 +0,0 @@ -AccountParamsTest.testDealConcrete() -AccountParamsTest.testDealSymbolic(uint256) -AccountParamsTest.testEtchConcrete() -AccountParamsTest.testEtchSymbolic(bytes) -AccountParamsTest.testFail_GetNonce_false() -AccountParamsTest.testFail_GetNonce_true() -AccountParamsTest.test_GetNonce_false() -AccountParamsTest.test_GetNonce_true() -AccountParamsTest.test_getNonce_unknownSymbolic(address) -AccountParamsTest.test_Nonce_ExistentAddress() -AccountParamsTest.test_Nonce_NonExistentAddress() -AccountParamsTest.testNonceSymbolic(uint64) -AddrTest.test_addr_false() -AddrTest.test_addr_symbolic(uint256) -AddrTest.test_addr_true() -AddrTest.test_builtInAddresses() -AddrTest.testFail_addr_false() -AddrTest.testFail_addr_true() -AddrTest.test_notBuiltinAddress_concrete() -AddrTest.test_notBuiltinAddress_symbolic(address) -AllowChangesTest.test() -AllowChangesTest.testAllow() -AllowChangesTest.testAllow_fail() -AllowChangesTest.testFailAllowCallsToAddress() -AllowChangesTest.testFailAllowChangesToStorage() -ArithmeticTest.test_decreasing_div(uint256,uint256) -ArithmeticTest.test_max1(uint256,uint256) -ArithmeticTest.test_max1_broken(uint256,uint256) -ArithmeticTest.test_max2(uint256,uint256) -ArithmeticTest.test_wdiv_rounding(uint256,uint256) -ArithmeticTest.test_wmul_increasing(uint256,uint256) -ArithmeticTest.test_wmul_increasing_gt_one(uint256,uint256) -ArithmeticTest.test_wmul_increasing_overflow(uint256,uint256) -ArithmeticTest.test_wmul_increasing_positive(uint256,uint256) -ArithmeticTest.test_wmul_rounding(uint256,uint256) -ArithmeticTest.test_wmul_wdiv_inverse(uint256,uint256) -ArithmeticTest.test_wmul_wdiv_inverse_underflow(uint256,uint256) -ArithmeticTest.test_wmul_weakly_increasing_positive(uint256,uint256) -AssertTest.test_assert_false() -AssertTest.test_assert_true() -AssertTest.test_assert_true_branch(uint256) -AssertTest.testFail_assert_false() -AssertTest.testFail_assert_true() -AssertTest.testFail_expect_revert() -AssertTest.test_failing_branch(uint256) -AssertTest.test_revert_branch(uint256,uint256) -AssumeTest.test_assume_false(uint256,uint256) -AssumeTest.test_assume_staticCall(bool) -AssumeTest.test_assume_true(uint256,uint256) -AssumeTest.testFail_assume_false(uint256,uint256) -AssumeTest.testFail_assume_true(uint256,uint256) -AssumeTest.test_multi_assume(address,address) -BlockParamsTest.testBlockNumber() -BlockParamsTest.testChainId(uint256) -BlockParamsTest.testCoinBase() -BlockParamsTest.testFee(uint256) -BlockParamsTest.testRoll(uint256) -BlockParamsTest.testWarp(uint256) -BMCLoopsTest.test_countdown_concrete() -BMCLoopsTest.test_countdown_symbolic(uint256) -BroadcastTest.testDeploy() -BytesTypeTest.test_bytes32(bytes32) -BytesTypeTest.test_bytes32_fail(bytes32) -BytesTypeTest.test_bytes4(bytes4) -BytesTypeTest.test_bytes4_fail(bytes4) -BytesTypeTest.testFail_bytes32(bytes32) -BytesTypeTest.testFail_bytes4(bytes4) -ContractBTest.testCannotSubtract43() -ContractBTest.testFailSubtract43() -ContractBTest.testNumberIs42() -ContractTest.testExample() -CounterTest.testIncrement() -CounterTest.testSetNumber(uint256) -EmitContractTest.testExpectEmit() -EmitContractTest.testExpectEmitCheckEmitter() -EmitContractTest.testExpectEmitDoNotCheckData() -EnvTest.testEnvAddress() -EnvTest.testEnvAddresseArray() -EnvTest.testEnvBool() -EnvTest.testEnvBoolArray() -EnvTest.testEnvBytes() -EnvTest.testEnvBytes32() -EnvTest.testEnvBytes32Array() -EnvTest.testEnvBytesArray() -EnvTest.testEnvInt() -EnvTest.testEnvIntArray() -EnvTest.testEnvString() -EnvTest.testEnvStringArray() -EnvTest.testEnvUInt() -EnvTest.testEnvUIntArray() -ExpectCallTest.testExpectRegularCall() -ExpectCallTest.testExpectStaticCall() -ExpectRevertTest.test_expectRevert_bytes4() -ExpectRevertTest.test_expectRevert_encodedSymbolic(address) -ExpectRevertTest.test_ExpectRevert_increasedDepth() -ExpectRevertTest.test_expectRevert_internalCall() -ExpectRevertTest.test_expectRevert_message() -ExpectRevertTest.test_expectRevert_returnValue() -ExpectRevertTest.test_expectRevert_true() -ExpectRevertTest.testFail_expectRevert_bytes4() -ExpectRevertTest.testFail_expectRevert_empty() -ExpectRevertTest.testFail_ExpectRevert_failAndSuccess() -ExpectRevertTest.testFail_expectRevert_false() -ExpectRevertTest.testFail_expectRevert_multipleReverts() -FfiTest.testffi() -FfiTest.testFFIFOO() -FfiTest.testFFIScript() -FfiTest.testFFIScript2() -FilesTest.testFailRemoveFile() -FilesTest.testReadWriteFile() -FilesTest.testReadWriteLine() -ForkTest.testActiveFork() -ForkTest.testAllRPCUrl() -ForkTest.testCreateFork() -ForkTest.testCreateForkBlock() -ForkTest.testCreateSelectFork() -ForkTest.testCreateSelectForkBlock() -ForkTest.testRollFork() -ForkTest.testRollForkId() -ForkTest.testRPCUrl() -ForkTest.testRPCUrlRevert() -GasTest.testInfiniteGas() -GetCodeTest.testGetCode() -LabelTest.testLabel() -LoopsTest.sum_N(uint256) -LoopsTest.testIsNotPrime(uint256) -LoopsTest.testIsPrime(uint256,uint256) -LoopsTest.testIsPrimeBroken(uint256,uint256) -LoopsTest.testIsPrimeOpt(uint256) -LoopsTest.testMax(uint256[]) -LoopsTest.testMaxBroken(uint256[]) -LoopsTest.testNthPrime(uint256,uint256) -LoopsTest.testSort(uint256[]) -LoopsTest.testSortBroken(uint256[]) -LoopsTest.testSqrt(uint256) -LoopsTest.test_sum_10() -LoopsTest.test_sum_100() -LoopsTest.test_sum_1000() -LoopsTest.testSumToN(uint256) -LoopsTest.testSumToNBroken(uint256) -MethodDisambiguateTest.test_method_call() -MockCallTest.testMockCall() -MockCallTest.testMockCalls() -MockCallTest.testMockCallValue() -OwnerUpOnlyTest.testFailIncrementAsNotOwner() -OwnerUpOnlyTest.testIncrementAsNotOwner() -OwnerUpOnlyTest.testIncrementAsOwner() -PlainPrankTest.testFail_startPrank_existingAlready() -PlainPrankTest.testFail_startPrank_internalCall() -PlainPrankTest.test_prank_zeroAddress_true() -PlainPrankTest.test_startPrank_true() -PlainPrankTest.test_startPrankWithOrigin_true() -PlainPrankTest.test_startPrank_zeroAddress_true() -PlainPrankTest.test_stopPrank_notExistent() -PrankTest.testAddAsOwner(uint256) -PrankTest.testAddStartPrank(uint256) -PrankTest.testFailAddPrank(uint256) -PrankTest.testSubtractAsTxOrigin(uint256,uint256) -PrankTest.testSubtractFail(uint256) -PrankTest.testSubtractStartPrank(uint256,uint256) -RecordLogsTest.testRecordLogs() -SafeTest.testWithdraw() -SafeTest.testWithdrawFuzz(uint96) -Setup2Test.testFail_setup() -Setup2Test.test_setup() -SetUpDeployTest.test_extcodesize() -SetUpTest.testSetUpCalled() -SetUpTest.testSetUpCalledSymbolic(uint256) -SignTest.testSign() -SignTest.testSign_symbolic(uint256) -SnapshotTest.testSnapshot() -StoreTest.testAccesses() -StoreTest.testGasLoadColdVM() -StoreTest.testGasLoadWarmUp() -StoreTest.testGasLoadWarmVM() -StoreTest.testGasStoreColdVM() -StoreTest.testGasStoreWarmUp() -StoreTest.testGasStoreWarmVM() -StoreTest.testLoadNonExistent() -StoreTest.testStoreLoad() -StoreTest.testStoreLoadNonExistent() -SymbolicStorageTest.testEmptyInitialStorage(uint256) -SymbolicStorageTest.testFail_SymbolicStorage(uint256) -SymbolicStorageTest.testFail_SymbolicStorage1(uint256) -ToStringTest.testAddressToString() -ToStringTest.testBoolToString() -ToStringTest.testBytes32ToString() -ToStringTest.testBytesToString() -ToStringTest.testIntToString() -ToStringTest.testUint256ToString() -UintTypeTest.testFail_uint104(uint104) -UintTypeTest.testFail_uint112(uint112) -UintTypeTest.testFail_uint120(uint120) -UintTypeTest.testFail_uint128(uint128) -UintTypeTest.testFail_uint136(uint136) -UintTypeTest.testFail_uint144(uint144) -UintTypeTest.testFail_uint152(uint152) -UintTypeTest.testFail_uint16(uint16) -UintTypeTest.testFail_uint160(uint160) -UintTypeTest.testFail_uint168(uint168) -UintTypeTest.testFail_uint176(uint176) -UintTypeTest.testFail_uint184(uint184) -UintTypeTest.testFail_uint192(uint192) -UintTypeTest.testFail_uint200(uint200) -UintTypeTest.testFail_uint208(uint208) -UintTypeTest.testFail_uint216(uint216) -UintTypeTest.testFail_uint224(uint224) -UintTypeTest.testFail_uint232(uint232) -UintTypeTest.testFail_uint24(uint24) -UintTypeTest.testFail_uint240(uint240) -UintTypeTest.testFail_uint248(uint248) -UintTypeTest.testFail_uint256(uint256) -UintTypeTest.testFail_uint32(uint32) -UintTypeTest.testFail_uint40(uint40) -UintTypeTest.testFail_uint48(uint48) -UintTypeTest.testFail_uint56(uint56) -UintTypeTest.testFail_uint64(uint64) -UintTypeTest.testFail_uint72(uint72) -UintTypeTest.testFail_uint8(uint8) -UintTypeTest.testFail_uint80(uint80) -UintTypeTest.testFail_uint88(uint88) -UintTypeTest.testFail_uint96(uint96) -UintTypeTest.test_uint104(uint104) -UintTypeTest.test_uint104_fail(uint104) -UintTypeTest.test_uint112(uint112) -UintTypeTest.test_uint112_fail(uint112) -UintTypeTest.test_uint120(uint120) -UintTypeTest.test_uint120_fail(uint120) -UintTypeTest.test_uint128(uint128) -UintTypeTest.test_uint128_fail(uint128) -UintTypeTest.test_uint136(uint136) -UintTypeTest.test_uint136_fail(uint136) -UintTypeTest.test_uint144(uint144) -UintTypeTest.test_uint144_fail(uint144) -UintTypeTest.test_uint152(uint152) -UintTypeTest.test_uint152_fail(uint152) -UintTypeTest.test_uint16(uint16) -UintTypeTest.test_uint160(uint160) -UintTypeTest.test_uint160_fail(uint160) -UintTypeTest.test_uint168(uint168) -UintTypeTest.test_uint168_fail(uint168) -UintTypeTest.test_uint16_fail(uint16) -UintTypeTest.test_uint176(uint176) -UintTypeTest.test_uint176_fail(uint176) -UintTypeTest.test_uint184(uint184) -UintTypeTest.test_uint184_fail(uint184) -UintTypeTest.test_uint192(uint192) -UintTypeTest.test_uint192_fail(uint192) -UintTypeTest.test_uint200(uint200) -UintTypeTest.test_uint200_fail(uint200) -UintTypeTest.test_uint208(uint208) -UintTypeTest.test_uint208_fail(uint208) -UintTypeTest.test_uint216(uint216) -UintTypeTest.test_uint216_fail(uint216) -UintTypeTest.test_uint224(uint224) -UintTypeTest.test_uint224_fail(uint224) -UintTypeTest.test_uint232(uint232) -UintTypeTest.test_uint232_fail(uint232) -UintTypeTest.test_uint24(uint24) -UintTypeTest.test_uint240(uint240) -UintTypeTest.test_uint240_fail(uint240) -UintTypeTest.test_uint248(uint248) -UintTypeTest.test_uint248_fail(uint248) -UintTypeTest.test_uint24_fail(uint24) -UintTypeTest.test_uint256(uint256) -UintTypeTest.test_uint256_fail(uint256) -UintTypeTest.test_uint32(uint32) -UintTypeTest.test_uint32_fail(uint32) -UintTypeTest.test_uint40(uint40) -UintTypeTest.test_uint40_fail(uint40) -UintTypeTest.test_uint48(uint48) -UintTypeTest.test_uint48_fail(uint48) -UintTypeTest.test_uint56(uint56) -UintTypeTest.test_uint56_fail(uint56) -UintTypeTest.test_uint64(uint64) -UintTypeTest.test_uint64_fail(uint64) -UintTypeTest.test_uint72(uint72) -UintTypeTest.test_uint72_fail(uint72) -UintTypeTest.test_uint8(uint8) -UintTypeTest.test_uint80(uint80) -UintTypeTest.test_uint80_fail(uint80) -UintTypeTest.test_uint88(uint88) -UintTypeTest.test_uint88_fail(uint88) -UintTypeTest.test_uint8_fail(uint8) -UintTypeTest.test_uint96(uint96) -UintTypeTest.test_uint96_fail(uint96) -IntTypeTest.testFail_uint128(uint128) -IntTypeTest.testFail_uint256(uint256) -IntTypeTest.testFail_uint64(uint64) -IntTypeTest.test_uint128(uint128) -IntTypeTest.test_uint128_fail(uint128) -IntTypeTest.test_uint256(uint256) -IntTypeTest.test_uint256_fail(uint256) -IntTypeTest.test_uint64(uint64) -IntTypeTest.test_uint64_fail(uint64) diff --git a/kevm-pyk/src/tests/integration/test-data/foundry-prove-skip b/kevm-pyk/src/tests/integration/test-data/foundry-prove-skip deleted file mode 100644 index 23ae8e2562..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry-prove-skip +++ /dev/null @@ -1,220 +0,0 @@ -AccountParamsTest.testEtchSymbolic(bytes) -AccountParamsTest.testFail_GetNonce_false() -AccountParamsTest.test_GetNonce_false() -AddrTest.test_addr_false() -AddrTest.test_addr_symbolic(uint256) -AddrTest.testFail_addr_false() -AddrTest.testFail_addr_true() -AllowChangesTest.test() -AllowChangesTest.testAllow_fail() -ArithmeticTest.test_decreasing_div(uint256,uint256) -ArithmeticTest.test_max1_broken(uint256,uint256) -ArithmeticTest.test_wdiv_rounding(uint256,uint256) -ArithmeticTest.test_wmul_increasing(uint256,uint256) -ArithmeticTest.test_wmul_increasing_gt_one(uint256,uint256) -ArithmeticTest.test_wmul_increasing_overflow(uint256,uint256) -ArithmeticTest.test_wmul_increasing_positive(uint256,uint256) -ArithmeticTest.test_wmul_rounding(uint256,uint256) -ArithmeticTest.test_wmul_wdiv_inverse(uint256,uint256) -ArithmeticTest.test_wmul_wdiv_inverse_underflow(uint256,uint256) -ArithmeticTest.test_wmul_weakly_increasing_positive(uint256,uint256) -AssertTest.test_assert_false() -AssertTest.testFail_assert_true() -AssertTest.testFail_expect_revert() -AssertTest.test_failing_branch(uint256) -AssertTest.test_revert_branch(uint256,uint256) -AssumeTest.test_assume_false(uint256,uint256) -AssumeTest.testFail_assume_false(uint256,uint256) -BroadcastTest.testDeploy() -BytesTypeTest.test_bytes32_fail(bytes32) -BytesTypeTest.test_bytes4_fail(bytes4) -BytesTypeTest.testFail_bytes32(bytes32) -BytesTypeTest.testFail_bytes4(bytes4) -ContractBTest.testCannotSubtract43() -ContractBTest.testFailSubtract43() -ContractBTest.testNumberIs42() -ContractTest.testExample() -EnvTest.testEnvAddress() -EnvTest.testEnvAddresseArray() -EnvTest.testEnvBool() -EnvTest.testEnvBoolArray() -EnvTest.testEnvBytes() -EnvTest.testEnvBytes32() -EnvTest.testEnvBytes32Array() -EnvTest.testEnvBytesArray() -EnvTest.testEnvInt() -EnvTest.testEnvIntArray() -EnvTest.testEnvString() -EnvTest.testEnvStringArray() -EnvTest.testEnvUInt() -EnvTest.testEnvUIntArray() -ExpectRevertTest.test_expectRevert_bytes4() -ExpectRevertTest.test_expectRevert_encodedSymbolic(address) -ExpectRevertTest.testFail_expectRevert_bytes4() -FfiTest.testffi() -FfiTest.testFFIFOO() -FfiTest.testFFIScript() -FfiTest.testFFIScript2() -FilesTest.testFailRemoveFile() -FilesTest.testReadWriteFile() -FilesTest.testReadWriteLine() -ForkTest.testActiveFork() -ForkTest.testAllRPCUrl() -ForkTest.testCreateFork() -ForkTest.testCreateForkBlock() -ForkTest.testCreateSelectFork() -ForkTest.testCreateSelectForkBlock() -ForkTest.testRollFork() -ForkTest.testRollForkId() -ForkTest.testRPCUrl() -ForkTest.testRPCUrlRevert() -GasTest.testInfiniteGas() -GetCodeTest.testGetCode() -LoopsTest.testIsNotPrime(uint256) -LoopsTest.testIsPrime(uint256,uint256) -LoopsTest.testIsPrimeBroken(uint256,uint256) -LoopsTest.testIsPrimeOpt(uint256) -LoopsTest.testMax(uint256[]) -LoopsTest.testMaxBroken(uint256[]) -LoopsTest.testNthPrime(uint256,uint256) -LoopsTest.testSort(uint256[]) -LoopsTest.testSortBroken(uint256[]) -LoopsTest.testSqrt(uint256) -LoopsTest.test_sum_100() -LoopsTest.test_sum_1000() -LoopsTest.testSumToN(uint256) -LoopsTest.testSumToNBroken(uint256) -MockCallTest.testMockCall() -MockCallTest.testMockCalls() -MockCallTest.testMockCallValue() -OwnerUpOnlyTest.testFailIncrementAsNotOwner() -OwnerUpOnlyTest.testIncrementAsNotOwner() -OwnerUpOnlyTest.testIncrementAsOwner() -PlainPrankTest.testFail_startPrank_existingAlready() -PrankTest.testAddAsOwner(uint256) -PrankTest.testAddStartPrank(uint256) -PrankTest.testFailAddPrank(uint256) -PrankTest.testSubtractAsTxOrigin(uint256,uint256) -PrankTest.testSubtractFail(uint256) -PrankTest.testSubtractStartPrank(uint256,uint256) -RecordLogsTest.testRecordLogs() -SafeTest.testWithdraw() -SafeTest.testWithdrawFuzz(uint96) -SetUpTest.testSetUpCalled() -SetUpTest.testSetUpCalledSymbolic(uint256) -SignTest.testSign() -SignTest.testSign_symbolic(uint256) -SnapshotTest.testSnapshot() -StoreTest.testAccesses() -StoreTest.testGasLoadWarmVM() -StoreTest.testGasStoreWarmVM() -ToStringTest.testAddressToString() -ToStringTest.testBoolToString() -ToStringTest.testBytes32ToString() -ToStringTest.testBytesToString() -ToStringTest.testIntToString() -ToStringTest.testUint256ToString() -UintTypeTest.testFail_uint104(uint104) -UintTypeTest.testFail_uint112(uint112) -UintTypeTest.testFail_uint120(uint120) -UintTypeTest.testFail_uint128(uint128) -UintTypeTest.testFail_uint136(uint136) -UintTypeTest.testFail_uint144(uint144) -UintTypeTest.testFail_uint152(uint152) -UintTypeTest.testFail_uint16(uint16) -UintTypeTest.testFail_uint160(uint160) -UintTypeTest.testFail_uint168(uint168) -UintTypeTest.testFail_uint176(uint176) -UintTypeTest.testFail_uint184(uint184) -UintTypeTest.testFail_uint192(uint192) -UintTypeTest.testFail_uint200(uint200) -UintTypeTest.testFail_uint208(uint208) -UintTypeTest.testFail_uint216(uint216) -UintTypeTest.testFail_uint224(uint224) -UintTypeTest.testFail_uint232(uint232) -UintTypeTest.testFail_uint24(uint24) -UintTypeTest.testFail_uint240(uint240) -UintTypeTest.testFail_uint248(uint248) -UintTypeTest.testFail_uint256(uint256) -UintTypeTest.testFail_uint32(uint32) -UintTypeTest.testFail_uint40(uint40) -UintTypeTest.testFail_uint48(uint48) -UintTypeTest.testFail_uint56(uint56) -UintTypeTest.testFail_uint64(uint64) -UintTypeTest.testFail_uint72(uint72) -UintTypeTest.testFail_uint8(uint8) -UintTypeTest.testFail_uint80(uint80) -UintTypeTest.testFail_uint88(uint88) -UintTypeTest.testFail_uint96(uint96) -UintTypeTest.test_uint104(uint104) -UintTypeTest.test_uint104_fail(uint104) -UintTypeTest.test_uint112(uint112) -UintTypeTest.test_uint112_fail(uint112) -UintTypeTest.test_uint120(uint120) -UintTypeTest.test_uint120_fail(uint120) -UintTypeTest.test_uint128(uint128) -UintTypeTest.test_uint128_fail(uint128) -UintTypeTest.test_uint136(uint136) -UintTypeTest.test_uint136_fail(uint136) -UintTypeTest.test_uint144(uint144) -UintTypeTest.test_uint144_fail(uint144) -UintTypeTest.test_uint152(uint152) -UintTypeTest.test_uint152_fail(uint152) -UintTypeTest.test_uint16(uint16) -UintTypeTest.test_uint160(uint160) -UintTypeTest.test_uint160_fail(uint160) -UintTypeTest.test_uint168(uint168) -UintTypeTest.test_uint168_fail(uint168) -UintTypeTest.test_uint16_fail(uint16) -UintTypeTest.test_uint176(uint176) -UintTypeTest.test_uint176_fail(uint176) -UintTypeTest.test_uint184(uint184) -UintTypeTest.test_uint184_fail(uint184) -UintTypeTest.test_uint192(uint192) -UintTypeTest.test_uint192_fail(uint192) -UintTypeTest.test_uint200(uint200) -UintTypeTest.test_uint200_fail(uint200) -UintTypeTest.test_uint208(uint208) -UintTypeTest.test_uint208_fail(uint208) -UintTypeTest.test_uint216(uint216) -UintTypeTest.test_uint216_fail(uint216) -UintTypeTest.test_uint224(uint224) -UintTypeTest.test_uint224_fail(uint224) -UintTypeTest.test_uint232(uint232) -UintTypeTest.test_uint232_fail(uint232) -UintTypeTest.test_uint24(uint24) -UintTypeTest.test_uint240(uint240) -UintTypeTest.test_uint240_fail(uint240) -UintTypeTest.test_uint248(uint248) -UintTypeTest.test_uint248_fail(uint248) -UintTypeTest.test_uint24_fail(uint24) -UintTypeTest.test_uint256_fail(uint256) -UintTypeTest.test_uint32(uint32) -UintTypeTest.test_uint32_fail(uint32) -UintTypeTest.test_uint40(uint40) -UintTypeTest.test_uint40_fail(uint40) -UintTypeTest.test_uint48(uint48) -UintTypeTest.test_uint48_fail(uint48) -UintTypeTest.test_uint56(uint56) -UintTypeTest.test_uint56_fail(uint56) -UintTypeTest.test_uint64(uint64) -UintTypeTest.test_uint64_fail(uint64) -UintTypeTest.test_uint72(uint72) -UintTypeTest.test_uint72_fail(uint72) -UintTypeTest.test_uint8(uint8) -UintTypeTest.test_uint80(uint80) -UintTypeTest.test_uint80_fail(uint80) -UintTypeTest.test_uint88(uint88) -UintTypeTest.test_uint88_fail(uint88) -UintTypeTest.test_uint8_fail(uint8) -UintTypeTest.test_uint96(uint96) -UintTypeTest.test_uint96_fail(uint96) -IntTypeTest.testFail_uint128(uint128) -IntTypeTest.testFail_uint256(uint256) -IntTypeTest.testFail_uint64(uint64) -IntTypeTest.test_uint128(uint128) -IntTypeTest.test_uint128_fail(uint128) -IntTypeTest.test_uint256(uint256) -IntTypeTest.test_uint256_fail(uint256) -IntTypeTest.test_uint64(uint64) -IntTypeTest.test_uint64_fail(uint64) diff --git a/kevm-pyk/src/tests/integration/test-data/foundry-show b/kevm-pyk/src/tests/integration/test-data/foundry-show deleted file mode 100644 index b76c1b28a7..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry-show +++ /dev/null @@ -1,12 +0,0 @@ -AssertTest.test_assert_false() -AssertTest.test_assert_true() -AssertTest.testFail_assert_false() -AssertTest.testFail_assert_true() -AssertTest.testFail_expect_revert() -AssertTest.test_failing_branch(uint256) -AssertTest.test_revert_branch(uint256,uint256) -AssumeTest.test_assume_false(uint256,uint256) -AssumeTest.testFail_assume_false(uint256,uint256) -AssumeTest.testFail_assume_true(uint256,uint256) -LoopsTest.sum_N(uint256) -SetUpDeployTest.test_extcodesize() diff --git a/kevm-pyk/src/tests/integration/test-data/foundry.k.expected b/kevm-pyk/src/tests/integration/test-data/foundry.k.expected deleted file mode 100644 index b118fa00ac..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry.k.expected +++ /dev/null @@ -1,601 +0,0 @@ -requires "contracts.k" -requires "requires/lemmas.k" - -module FOUNDRY-MAIN - imports public AccountParamsTest-VERIFICATION - imports public AddrTest-VERIFICATION - imports public AllowChangesTest-VERIFICATION - imports public ValueStore-VERIFICATION - imports public ArithmeticTest-VERIFICATION - imports public AssumeTest-VERIFICATION - imports public BMCLoopsTest-VERIFICATION - imports public BlockParamsTest-VERIFICATION - imports public BroadcastTest-VERIFICATION - imports public Constants-VERIFICATION - imports public Contract-VERIFICATION - imports public ContractTest-VERIFICATION - imports public ContractBTest-VERIFICATION - imports public Counter-VERIFICATION - imports public CounterTest-VERIFICATION - imports public DynamicTypes-VERIFICATION - imports public ExpectEmit-VERIFICATION - imports public EmitContractTest-VERIFICATION - imports public EnvTest-VERIFICATION - imports public Dummy-VERIFICATION - imports public ExpectCallTest-VERIFICATION - imports public DepthReverter-VERIFICATION - imports public ExpectRevertTest-VERIFICATION - imports public Reverter-VERIFICATION - imports public ReverterWithReturn-VERIFICATION - imports public FfiTest-VERIFICATION - imports public FilesTest-VERIFICATION - imports public ForkTest-VERIFICATION - imports public GasTest-VERIFICATION - imports public GetCodeTest-VERIFICATION - imports public KEVMCheats-VERIFICATION - imports public KEVMCheatsBase-VERIFICATION - imports public LabelTest-VERIFICATION - imports public LoopsTest-VERIFICATION - imports public MethodDisambiguateTest-VERIFICATION - imports public MockCallTest-VERIFICATION - imports public MyIERC20-VERIFICATION - imports public MyToken-VERIFICATION - imports public NoImport-VERIFICATION - imports public OwnerUpOnly-VERIFICATION - imports public OwnerUpOnlyTest-VERIFICATION - imports public AdditionalToken-VERIFICATION - imports public PlainPrankTest-VERIFICATION - imports public Prank-VERIFICATION - imports public PrankTest-VERIFICATION - imports public PreconditionsTest-VERIFICATION - imports public RecordLogsTest-VERIFICATION - imports public Safe-VERIFICATION - imports public SafeTest-VERIFICATION - imports public Script-VERIFICATION - imports public Setup2Test-VERIFICATION - imports public SetUpDeployTest-VERIFICATION - imports public SetUpTest-VERIFICATION - imports public SignTest-VERIFICATION - imports public AssertTest-VERIFICATION - imports public SnapshotTest-VERIFICATION - imports public Store-VERIFICATION - imports public StoreTest-VERIFICATION - imports public SymbolicStorageTest-VERIFICATION - imports public SymbolicStore-VERIFICATION - imports public Test-VERIFICATION - imports public stdError-VERIFICATION - imports public stdMath-VERIFICATION - imports public stdStorage-VERIFICATION - imports public TestNumber-VERIFICATION - imports public ToStringTest-VERIFICATION - imports public Token-VERIFICATION - imports public BytesTypeTest-VERIFICATION - imports public IntTypeTest-VERIFICATION - imports public UintTypeTest-VERIFICATION - imports public Vm-VERIFICATION - imports public console-VERIFICATION - imports public console2-VERIFICATION - imports public DSTest-VERIFICATION - - - -endmodule - -module AccountParamsTest-VERIFICATION - imports public AccountParamsTest-CONTRACT - - - -endmodule - -module AddrTest-VERIFICATION - imports public AddrTest-CONTRACT - - - -endmodule - -module AllowChangesTest-VERIFICATION - imports public AllowChangesTest-CONTRACT - - - -endmodule - -module ValueStore-VERIFICATION - imports public ValueStore-CONTRACT - - - -endmodule - -module ArithmeticTest-VERIFICATION - imports public ArithmeticTest-CONTRACT - - - -endmodule - -module AssumeTest-VERIFICATION - imports public AssumeTest-CONTRACT - - - -endmodule - -module BMCLoopsTest-VERIFICATION - imports public BMCLoopsTest-CONTRACT - - - -endmodule - -module BlockParamsTest-VERIFICATION - imports public BlockParamsTest-CONTRACT - - - -endmodule - -module BroadcastTest-VERIFICATION - imports public BroadcastTest-CONTRACT - - - -endmodule - -module Constants-VERIFICATION - imports public Constants-CONTRACT - - - -endmodule - -module Contract-VERIFICATION - imports public Contract-CONTRACT - - - -endmodule - -module ContractTest-VERIFICATION - imports public ContractTest-CONTRACT - - - -endmodule - -module ContractBTest-VERIFICATION - imports public ContractBTest-CONTRACT - - - -endmodule - -module Counter-VERIFICATION - imports public Counter-CONTRACT - - - -endmodule - -module CounterTest-VERIFICATION - imports public CounterTest-CONTRACT - - - -endmodule - -module DynamicTypes-VERIFICATION - imports public DynamicTypes-CONTRACT - - - -endmodule - -module ExpectEmit-VERIFICATION - imports public ExpectEmit-CONTRACT - - - -endmodule - -module EmitContractTest-VERIFICATION - imports public EmitContractTest-CONTRACT - - - -endmodule - -module EnvTest-VERIFICATION - imports public EnvTest-CONTRACT - - - -endmodule - -module Dummy-VERIFICATION - imports public Dummy-CONTRACT - - - -endmodule - -module ExpectCallTest-VERIFICATION - imports public ExpectCallTest-CONTRACT - - - -endmodule - -module DepthReverter-VERIFICATION - imports public DepthReverter-CONTRACT - - - -endmodule - -module ExpectRevertTest-VERIFICATION - imports public ExpectRevertTest-CONTRACT - - - -endmodule - -module Reverter-VERIFICATION - imports public Reverter-CONTRACT - - - -endmodule - -module ReverterWithReturn-VERIFICATION - imports public ReverterWithReturn-CONTRACT - - - -endmodule - -module FfiTest-VERIFICATION - imports public FfiTest-CONTRACT - - - -endmodule - -module FilesTest-VERIFICATION - imports public FilesTest-CONTRACT - - - -endmodule - -module ForkTest-VERIFICATION - imports public ForkTest-CONTRACT - - - -endmodule - -module GasTest-VERIFICATION - imports public GasTest-CONTRACT - - - -endmodule - -module GetCodeTest-VERIFICATION - imports public GetCodeTest-CONTRACT - - - -endmodule - -module KEVMCheats-VERIFICATION - imports public KEVMCheats-CONTRACT - - - -endmodule - -module KEVMCheatsBase-VERIFICATION - imports public KEVMCheatsBase-CONTRACT - - - -endmodule - -module LabelTest-VERIFICATION - imports public LabelTest-CONTRACT - - - -endmodule - -module LoopsTest-VERIFICATION - imports public LoopsTest-CONTRACT - imports public SUM-TO-N-INVARIANT - - - -endmodule - -module MethodDisambiguateTest-VERIFICATION - imports public MethodDisambiguateTest-CONTRACT - - - -endmodule - -module MockCallTest-VERIFICATION - imports public MockCallTest-CONTRACT - - - -endmodule - -module MyIERC20-VERIFICATION - imports public MyIERC20-CONTRACT - - - -endmodule - -module MyToken-VERIFICATION - imports public MyToken-CONTRACT - - - -endmodule - -module NoImport-VERIFICATION - imports public NoImport-CONTRACT - - - -endmodule - -module OwnerUpOnly-VERIFICATION - imports public OwnerUpOnly-CONTRACT - - - -endmodule - -module OwnerUpOnlyTest-VERIFICATION - imports public OwnerUpOnlyTest-CONTRACT - - - -endmodule - -module AdditionalToken-VERIFICATION - imports public AdditionalToken-CONTRACT - - - -endmodule - -module PlainPrankTest-VERIFICATION - imports public PlainPrankTest-CONTRACT - - - -endmodule - -module Prank-VERIFICATION - imports public Prank-CONTRACT - - - -endmodule - -module PrankTest-VERIFICATION - imports public PrankTest-CONTRACT - - - -endmodule - -module PreconditionsTest-VERIFICATION - imports public PreconditionsTest-CONTRACT - - - -endmodule - -module RecordLogsTest-VERIFICATION - imports public RecordLogsTest-CONTRACT - - - -endmodule - -module Safe-VERIFICATION - imports public Safe-CONTRACT - - - -endmodule - -module SafeTest-VERIFICATION - imports public SafeTest-CONTRACT - - - -endmodule - -module Script-VERIFICATION - imports public Script-CONTRACT - - - -endmodule - -module Setup2Test-VERIFICATION - imports public Setup2Test-CONTRACT - - - -endmodule - -module SetUpDeployTest-VERIFICATION - imports public SetUpDeployTest-CONTRACT - - - -endmodule - -module SetUpTest-VERIFICATION - imports public SetUpTest-CONTRACT - - - -endmodule - -module SignTest-VERIFICATION - imports public SignTest-CONTRACT - - - -endmodule - -module AssertTest-VERIFICATION - imports public AssertTest-CONTRACT - - - -endmodule - -module SnapshotTest-VERIFICATION - imports public SnapshotTest-CONTRACT - - - -endmodule - -module Store-VERIFICATION - imports public Store-CONTRACT - - - -endmodule - -module StoreTest-VERIFICATION - imports public StoreTest-CONTRACT - - - -endmodule - -module SymbolicStorageTest-VERIFICATION - imports public SymbolicStorageTest-CONTRACT - - - -endmodule - -module SymbolicStore-VERIFICATION - imports public SymbolicStore-CONTRACT - - - -endmodule - -module Test-VERIFICATION - imports public Test-CONTRACT - - - -endmodule - -module stdError-VERIFICATION - imports public stdError-CONTRACT - - - -endmodule - -module stdMath-VERIFICATION - imports public stdMath-CONTRACT - - - -endmodule - -module stdStorage-VERIFICATION - imports public stdStorage-CONTRACT - - - -endmodule - -module TestNumber-VERIFICATION - imports public TestNumber-CONTRACT - - - -endmodule - -module ToStringTest-VERIFICATION - imports public ToStringTest-CONTRACT - - - -endmodule - -module Token-VERIFICATION - imports public Token-CONTRACT - - - -endmodule - -module BytesTypeTest-VERIFICATION - imports public BytesTypeTest-CONTRACT - - - -endmodule - -module IntTypeTest-VERIFICATION - imports public IntTypeTest-CONTRACT - - - -endmodule - -module UintTypeTest-VERIFICATION - imports public UintTypeTest-CONTRACT - - - -endmodule - -module Vm-VERIFICATION - imports public Vm-CONTRACT - - - -endmodule - -module console-VERIFICATION - imports public console-CONTRACT - - - -endmodule - -module console2-VERIFICATION - imports public console2-CONTRACT - - - -endmodule - -module DSTest-VERIFICATION - imports public DSTest-CONTRACT - - - -endmodule diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/foundry.toml b/kevm-pyk/src/tests/integration/test-data/foundry/foundry.toml deleted file mode 100644 index 8f947e25c1..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/foundry.toml +++ /dev/null @@ -1,6 +0,0 @@ -[profile.default] -src = 'src' -out = 'out' -extra_output = ['storageLayout', 'abi', 'evm.methodIdentifiers', 'evm.deployedBytecode.object'] -rpc_endpoints = { optimism = "https://optimism.alchemyapi.io/v2/...", mainnet = "${RPC_MAINNET}" } - diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/src/Constants.sol b/kevm-pyk/src/tests/integration/test-data/foundry/src/Constants.sol deleted file mode 100644 index ad5f098557..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/src/Constants.sol +++ /dev/null @@ -1,5 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -bytes4 constant zero = 0x00000000; -bytes4 constant ff = 0xffffffff; diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/src/Contract.sol b/kevm-pyk/src/tests/integration/test-data/foundry/src/Contract.sol deleted file mode 100644 index 96771514fe..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/src/Contract.sol +++ /dev/null @@ -1,4 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -contract Contract {} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/src/EmitContract.sol b/kevm-pyk/src/tests/integration/test-data/foundry/src/EmitContract.sol deleted file mode 100644 index eb66fe934d..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/src/EmitContract.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -contract ExpectEmit { - event Transfer(address indexed from, address indexed to, uint256 amount); - - function t() public { - emit Transfer(msg.sender, address(1337), 1337); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/src/KEVMCheats.sol b/kevm-pyk/src/tests/integration/test-data/foundry/src/KEVMCheats.sol deleted file mode 100644 index 112a6b75eb..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/src/KEVMCheats.sol +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; -pragma experimental ABIEncoderV2; - -interface KEVMCheatsBase { - // Expects a call using the CALL opcode to an address with the specified calldata. - function expectRegularCall(address,bytes calldata) external; - // Expects a call using the CALL opcode to an address with the specified msg.value and calldata. - function expectRegularCall(address,uint256,bytes calldata) external; - // Expects a static call to an address with the specified calldata. - function expectStaticCall(address,bytes calldata) external; - // Expects a delegate call to an address with the specified calldata. - function expectDelegateCall(address,bytes calldata) external; - // Expects that no contract calls are made after invoking the cheatcode. - function expectNoCall() external; - // Expects the given address to deploy a new contract, using the CREATE opcode, with the specified value and bytecode. - function expectCreate(address,uint256,bytes calldata) external; - // Expects the given address to deploy a new contract, using the CREATE2 opcode, with the specified value and bytecode (appended with a bytes32 salt). - function expectCreate2(address,uint256,bytes calldata) external; - // Makes the storage of the given address completely symbolic. - function symbolicStorage(address) external; - // Adds an address to the whitelist. - function allowCallsToAddress(address) external; - // Adds an address and a storage slot to the whitelist. - function allowChangesToStorage(address,uint256) external; - // Set the current cell - function infiniteGas() external; -} - -abstract contract KEVMCheats { - KEVMCheatsBase public constant kevm = KEVMCheatsBase(address(uint160(uint256(keccak256("hevm cheat code"))))); - - // Checks if an address matches one of the built-in addresses. - function notBuiltinAddress(address addr) internal pure returns (bool) { - return (addr != address(645326474426547203313410069153905908525362434349) && - addr != address(728815563385977040452943777879061427756277306518)); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/src/MyIERC20.sol b/kevm-pyk/src/tests/integration/test-data/foundry/src/MyIERC20.sol deleted file mode 100644 index 7761234855..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/src/MyIERC20.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity =0.8.13; - -interface MyIERC20 { - function totalSupply() external view returns (uint256); - - function transfer(address recipient, uint256 amount) external returns (bool); - - function decimals() external view returns (uint8); - - function symbol() external view returns (string memory); - - function balanceOf(address) external view returns (uint256); - - function transferFrom( - address sender, - address recipient, - uint256 amount - ) external returns (bool); - - function approve(address spender, uint256 value) external returns (bool); -} \ No newline at end of file diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/src/MyToken.sol b/kevm-pyk/src/tests/integration/test-data/foundry/src/MyToken.sol deleted file mode 100644 index df5307b8e1..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/src/MyToken.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -contract MyToken{ - address public token; - mapping (address => uint256) public balances; - - constructor(address sometoken) { - token = sometoken; - } - - function balanceOf(address user) external view returns (uint256) { - return balances[user]; - } - - receive() external payable {} - - function pay(address user) external payable returns (uint256) { - balances[user]+=msg.value; - return balances[user]; - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/src/OwnerOnlyUp.sol b/kevm-pyk/src/tests/integration/test-data/foundry/src/OwnerOnlyUp.sol deleted file mode 100644 index 6d71a3920c..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/src/OwnerOnlyUp.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -error Unauthorized(); - -contract OwnerUpOnly { - address public immutable owner; - uint256 public count; - - constructor() { - owner = msg.sender; - } - - function increment() external { - if (msg.sender != owner) { - revert Unauthorized(); - } - count++; - } -} \ No newline at end of file diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/src/Prank.sol b/kevm-pyk/src/tests/integration/test-data/foundry/src/Prank.sol deleted file mode 100644 index e0fb903dec..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/src/Prank.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -error Unauthorized(); - -contract Prank { - address public immutable owner; - uint256 public count; - - constructor() { - owner = msg.sender; - } - - function add(uint256 value) external { - require(msg.sender == owner, "Only owner"); - count += value; - } - - function subtract(uint256 value) external { - require(tx.origin == address(0)); - require(count >= value); - count -= value; - } -} \ No newline at end of file diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/src/Safe.sol b/kevm-pyk/src/tests/integration/test-data/foundry/src/Safe.sol deleted file mode 100644 index 3b3d390b22..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/src/Safe.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -contract Safe { - receive() external payable {} - - function withdraw() external { - payable(msg.sender).transfer(address(this).balance); - } -} \ No newline at end of file diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/src/TestNumber.sol b/kevm-pyk/src/tests/integration/test-data/foundry/src/TestNumber.sol deleted file mode 100644 index b7ce5adcea..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/src/TestNumber.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "ds-test/test.sol"; - -contract TestNumber is DSTest{ - uint256 public testNumber ; - - constructor(uint256 initial){ - testNumber = initial; - } - - function t(uint256 a) public returns (uint256) { - uint256 b = 0; - testNumber = a; - emit log_string("here"); - return b; - } - -} \ No newline at end of file diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/src/Token.sol b/kevm-pyk/src/tests/integration/test-data/foundry/src/Token.sol deleted file mode 100644 index 9c267d2d74..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/src/Token.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -contract Token { - uint256 x; - mapping(address => uint256) balances; - mapping(address => mapping(address => uint256)) allowances; - string name; - uint64 y; - uint96 z; - uint32 a; - - struct Foo { - uint256 bar; - address baz; - uint48 boo; - uint48 frob; - uint48[] bills; - } - - mapping(address => Foo) foos; - - function _move(address src, address dst, uint256 amount) internal { - balances[src] = balances[src] - amount; - balances[dst] = balances[dst] + amount; - } - - function transfer(address dst, uint256 amount) external { - _move(msg.sender, dst, amount); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/AccountParamsTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/AccountParamsTest.t.sol deleted file mode 100644 index 1f1a399312..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/AccountParamsTest.t.sol +++ /dev/null @@ -1,76 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract AccountParamsTest is Test { - - function testDealConcrete() public { - vm.deal(address(505), 256); - assertEq(address(505).balance, 256); - } - - function testDealSymbolic(uint256 value) public { - vm.deal(address(328), value); - assertEq(address(328).balance, value); - } - - function testEtchConcrete() public { - bytes memory code = bytes("this should be EVM bytecode"); - vm.etch(address(124), code); - assertEq(address(124).code, code); - } - - function testEtchSymbolic(bytes calldata code) public { - vm.etch(address(124), code); - assertEq(address(124).code, code); - } - - function testNonceSymbolic(uint64 newNonce) public { - uint64 oldNonce = vm.getNonce(address(this)); - vm.assume(newNonce > oldNonce); - vm.setNonce(address(this), newNonce); - assert(vm.getNonce(address(this)) == newNonce); - } - - function test_GetNonce_true() public { - uint64 nonce = vm.getNonce(address(this)); - assert(nonce == 1); - } - - function test_getNonce_unknownSymbolic(address addr) public { - vm.assume(addr != address(vm)); - vm.assume(addr != address(this)); - vm.assume(addr != address(0x3fAB184622Dc19b6109349B94811493BF2a45362)); - vm.assume(addr != address(0x4e59b44847b379578588920cA78FbF26c0B4956C)); - uint64 nonce = vm.getNonce(addr); - assert(nonce == 0); - } - - function test_GetNonce_false() public { - uint64 nonce = vm.getNonce(address(100)); - assertEq(nonce, 10); - } - - function testFail_GetNonce_true() public { - uint64 nonce = vm.getNonce(address(0)); - assertEq(nonce, 10); - } - - function testFail_GetNonce_false() public { - uint64 nonce = vm.getNonce(address(this)); - assertEq(nonce, 1); - } - - function test_Nonce_ExistentAddress() public { - vm.setNonce(address(this), 100); - uint64 nonce = vm.getNonce(address(this)); - assert(nonce == 100); - } - - function test_Nonce_NonExistentAddress() public { - vm.setNonce(address(100), 100); - uint64 nonce = vm.getNonce(address(100)); - assert(nonce == 100); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/AddrTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/AddrTest.t.sol deleted file mode 100644 index 3e0a470c06..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/AddrTest.t.sol +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract AddrTest is Test, KEVMCheats { - - function test_addr_true() public { - address alice = vm.addr(1); - assertEq(alice, 0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf); - } - - function test_addr_false() public { - address alice = vm.addr(0); - } - - function testFail_addr_true() public { - address alice = vm.addr(115792089237316195423570985008687907852837564279074904382605163141518161494337); - } - - function testFail_addr_false() public { - address alice = vm.addr(1); - assertEq(alice, 0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf); - } - - function test_addr_symbolic(uint256 pk) public { - vm.assume(pk != 0); - vm.assume(pk < 115792089237316195423570985008687907852837564279074904382605163141518161494337); - address alice = vm.addr(pk); - assert(true); - } - - function test_notBuiltinAddress_concrete() public { - assertTrue(notBuiltinAddress(address(110))); - } - - function test_notBuiltinAddress_symbolic(address addr) public { - vm.assume(addr != address(728815563385977040452943777879061427756277306518)); - vm.assume(addr != address(645326474426547203313410069153905908525362434349)); - assertTrue(notBuiltinAddress(addr)); - } - - function test_builtInAddresses() public { - assertEq(address(this), address(728815563385977040452943777879061427756277306518)); - assertEq(address(vm), address(645326474426547203313410069153905908525362434349)); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/AllowChangesTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/AllowChangesTest.t.sol deleted file mode 100644 index aa382a1cfa..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/AllowChangesTest.t.sol +++ /dev/null @@ -1,64 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract ValueStore { - uint256 public value1; - uint256 public value2; - - function changeValue1(uint256 newValue) public { - value1 = newValue; - } - - function changeValue2(uint256 newValue) public { - value2 = newValue; - } -} - -contract AllowChangesTest is Test, KEVMCheats { - function test() public { - assertTrue(true); - } - - function testAllow() public { - ValueStore canChange = new ValueStore(); - ValueStore cannotChange = new ValueStore(); - - kevm.allowCallsToAddress(address(canChange)); - kevm.allowChangesToStorage(address(canChange), 0); - - canChange.changeValue1(85); - } - - function testFailAllowCallsToAddress() public { - ValueStore canChange = new ValueStore(); - ValueStore cannotChange = new ValueStore(); - - kevm.allowCallsToAddress(address(canChange)); - kevm.allowChangesToStorage(address(canChange), 0); - - cannotChange.changeValue1(10245); - } - - function testFailAllowChangesToStorage() public { - ValueStore canChange = new ValueStore(); - ValueStore cannotChange = new ValueStore(); - - kevm.allowCallsToAddress(address(canChange)); - kevm.allowChangesToStorage(address(canChange), 0); - - canChange.changeValue2(23452); - } - - function testAllow_fail() public { - ValueStore canChange = new ValueStore(); - ValueStore cannotChange = new ValueStore(); - - kevm.allowCallsToAddress(address(canChange)); - kevm.allowChangesToStorage(address(canChange), 0); - - canChange.changeValue2(234521); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/Arithmetic.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/Arithmetic.t.sol deleted file mode 100644 index 9ebbe51749..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/Arithmetic.t.sol +++ /dev/null @@ -1,146 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract ArithmeticTest is Test { - function max(uint x, uint y) internal pure returns (uint z) { - if (x < y) { - return y; - } - return x; - } - - function test_max1(uint a, uint b) external { - vm.assume(a <= b); - uint c = max(a, b); - assertEq(c, b); - } - - function test_max1_broken(uint a, uint b) external { - vm.assume(a <= b); - uint c = max(a, b); - assertEq(c + 1, a); - } - - function max2(uint256 x, uint256 y) internal pure returns (uint256) { - if (x < y && x != 2**100 - 1337) { - return y; - } - return x; - } - - function test_max2(uint256 x, uint256 y) public { - uint256 m = max(x, y); - assertTrue(m >= x && m >= y); - } - - uint constant MAX_INT = (2 ** 256) - 1; - uint constant WAD = 10 ** 18; - uint constant RAY = 10 ** 27; - - function wmul1(uint x, uint y) internal pure returns (uint z) { - z = ((x * y) + (WAD / 2)) / WAD; - } - - function wmul2(uint x, uint y) internal pure returns (uint z) { - z = (x * y) / WAD; - } - - function wdiv1(uint x, uint y) internal pure returns (uint z) { - z = ((x * WAD) + (y / 2)) / y; - } - - function wdiv2(uint x, uint y) internal pure returns (uint z) { - z = (x * WAD) / y; - } - - function test_wmul_rounding(uint a, uint b) external { - uint c1 = wmul1(a, b); - uint c2 = wmul2(a ,b); - assertTrue(c2 <= c1); - } - - function test_wmul_increasing_overflow(uint a, uint b) public { - uint c = wmul2(a, b); - assertTrue(a < c && b < c); - } - // { true #Equals ( ( 115792089237316195423570985008687907853269984665640564039457584007913129639935 /Int VV0_a_3c5818c8 ) ) true requires Y <=Int maxUInt256 /Int X [simplification] - - function test_wmul_wdiv_inverse_underflow(uint a, uint b) public { - if (0 < a && 0 < b) { - if (b <= MAX_INT / a) { - uint c = wdiv2(wmul2(a, b), b); - assertEq(a, c); - } - } - } - // { true #Equals maxUInt256 /Word ( ( ( ( VV0_a_3c5818c8 *Int VV1_b_3c5818c8 ) ) /Int 1000000000000000000 ) ) 0) { - n = n - 1; - } - assert(n == 0); - } - - function test_countdown_symbolic(uint n) public returns (uint) { - vm.assume(n <= 3); - while (n > 0) { - n = n - 1; - } - assert(n == 0); - } - - function test_bmc(uint256 n) public { - uint256 x = 0; - for (uint256 i = 0; i < n; ++i) { - x += 1; - } - assertEq(x, n); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/BlockParamsTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/BlockParamsTest.t.sol deleted file mode 100644 index 423cca9e31..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/BlockParamsTest.t.sol +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract BlockParamsTest is Test { - - function testWarp(uint256 time) public { - vm.warp(time); - assertEq(block.timestamp, time); - } - - function testRoll(uint256 newHeight) public { - vm.roll(newHeight); - assertEq(block.number, newHeight); - } - - function testFee(uint256 newFee) public { - vm.fee(newFee); - assertEq(block.basefee, newFee); - } - - function testChainId(uint256 newChainId) public { - vm.chainId(newChainId); - assertEq(block.chainid, newChainId); - } - - function testCoinBase() public { - address coinBase = 0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8; - vm.coinbase(coinBase); - assertEq(block.coinbase, coinBase); - } - - function testBlockNumber() public { - uint256 x = block.number; - assert(x >= 0); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/BroadcastTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/BroadcastTest.t.sol deleted file mode 100644 index b9e254d1d6..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/BroadcastTest.t.sol +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "src/TestNumber.sol"; -import "forge-std/Test.sol"; - -contract BroadcastTest is Test { - address ACCOUNT_A; - address ACCOUNT_B; - - function setUp() public { - ACCOUNT_A = 0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8; - ACCOUNT_B = 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D; - } - - function testDeploy() public { - vm.broadcast(ACCOUNT_A); - TestNumber test = new TestNumber(10); - // this won't generate tx to sign - uint256 b = test.t(4); - assertEq(b,0); - // this will - vm.broadcast(ACCOUNT_B); - test.t(5); - } - - function deployOther() public { - vm.startBroadcast(ACCOUNT_A); - TestNumber test = new TestNumber(10); - - // will trigger a transaction - test.t(1); - - vm.stopBroadcast(); - } - - function deployNoArgs() public { - // broadcast the next call - vm.broadcast(); - TestNumber test1 = new TestNumber(5); - test1.t(0); - - // broadcast all calls between this line and `stopBroadcast` - vm.startBroadcast(); - TestNumber test2 = new TestNumber(20); - test2.t(25); - vm.stopBroadcast(); -} -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/Contract.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/Contract.t.sol deleted file mode 100644 index 07a537ee2d..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/Contract.t.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract ContractTest is Test { - function testExample() public { - assertTrue(true); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/ContractBTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/ContractBTest.t.sol deleted file mode 100644 index f50f9b999e..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/ContractBTest.t.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract ContractBTest is Test { - uint256 testNumber; - - function setUp() public { - testNumber = 42; - } - - function testNumberIs42() public { - assertEq(testNumber, 42); - } - - function testFailSubtract43() public { - testNumber -= 43; - } - - function testCannotSubtract43() public { - vm.expectRevert(stdError.arithmeticError); - testNumber -= 43; - } - -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/CounterTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/CounterTest.t.sol deleted file mode 100644 index 939ad5e48f..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/CounterTest.t.sol +++ /dev/null @@ -1,43 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity >=0.8.13; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract Counter { - uint256 public number; - - function setNumber(uint256 newNumber) public { - number = newNumber; - } - - function increment() public { - number++; - } -} - -contract CounterTest is Test, KEVMCheats { - Counter public counter; - - // function setUp() public { - // counter = new Counter(); - // counter.setNumber(0); - // } - - function testIncrement() public { - kevm.infiniteGas(); - counter = new Counter(); - counter.setNumber(0); - counter.increment(); - assertEq(counter.number(), 1); - } - - function testSetNumber(uint256 x) public { - //setUp(); - kevm.infiniteGas(); - counter = new Counter(); - counter.setNumber(0); - counter.setNumber(x); - assertEq(counter.number(), x); - } -} \ No newline at end of file diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/DynamicTypes.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/DynamicTypes.t.sol deleted file mode 100644 index 82cb69a9e9..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/DynamicTypes.t.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract DynamicTypes is Test { - - function test_dynamic_byte_read(bytes memory data, uint256 offset) public { - uint8 mydata = uint8(data[offset]); - vm.assume(mydata < 3); - assertTrue(mydata == 2 || mydata == 1 || mydata == 0); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/EmitContractTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/EmitContractTest.t.sol deleted file mode 100644 index d53ea18279..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/EmitContractTest.t.sol +++ /dev/null @@ -1,39 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/EmitContract.sol"; - -contract EmitContractTest is Test { - event Transfer(address indexed from, address indexed to, uint256 amount); - - function testExpectEmit() public { - ExpectEmit emitter = new ExpectEmit(); - // Check that topic 1, topic 2, and data are the same as the following emitted event. - // Checking topic 3 here doesn't matter, because `Transfer` only has 2 indexed topics. - vm.expectEmit(true, true, false, true); - // The event we expect - emit Transfer(address(this), address(1337), 1337); - // The event we get - emitter.t(); - } - - function testExpectEmitDoNotCheckData() public { - ExpectEmit emitter = new ExpectEmit(); - // Check topic 1 and topic 2, but do not check data - vm.expectEmit(true, true, false, false); - // The event we expect - emit Transfer(address(this), address(1337), 1338); - // The event we get - emitter.t(); - } - - function testExpectEmitCheckEmitter() public { - ExpectEmit emitter = new ExpectEmit(); - vm.expectEmit(true, true, false, true, address(emitter)); - // The event we expect - emit Transfer(address(this), address(1337), 1337); - // The event we get - emitter.t(); - } -} \ No newline at end of file diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/EnvTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/EnvTest.t.sol deleted file mode 100644 index 4e0373d2a6..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/EnvTest.t.sol +++ /dev/null @@ -1,170 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract EnvTest is Test { - - function testEnvBool() public { - string memory key = "BOOL_VALUE"; - string memory val = "true"; - vm.setEnv(key, val); - - bool expected = true; - bool output = vm.envBool(key); - assert(output == expected); - } - - function testEnvUInt() public { - string memory key = "UINT_VALUE"; - string memory val = "115792089237316195423570985008687907853269984665640564039457584007913129639935"; - vm.setEnv(key, val); - - uint256 expected = type(uint256).max; - uint256 output = vm.envUint(key); - assert(output == expected); - } - - function testEnvInt() public { - string memory key = "INT_VALUE"; - string memory val = "-57896044618658097711785492504343953926634992332820282019728792003956564819968"; - vm.setEnv(key, val); - - int256 expected = type(int256).min; - int256 output = vm.envInt(key); - assert(output == expected); - } - - function testEnvAddress() public { - string memory key = "ADDRESS_VALUE"; - string memory val = "0x7109709ECfa91a80626fF3989D68f67F5b1DD12D"; - vm.setEnv(key, val); - - address expected = 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D; - address output = vm.envAddress(key); - assert(output == expected); - } - - function testEnvBytes32() public { - string memory key = "BYTES32_VALUE"; - string memory val = "0x00"; - vm.setEnv(key, val); - - bytes32 expected = bytes32(0x0000000000000000000000000000000000000000000000000000000000000000); - bytes32 output = vm.envBytes32(key); - assert(output == expected); - } - - function testEnvString() public { - string memory key = "STRING_VALUE"; - string memory val = "hello, world!"; - vm.setEnv(key, val); - - string memory expected = "hello, world!"; - string memory output = vm.envString(key); - assertEq(output, expected); - } - - function testEnvBytes() public { - string memory key = "BYTES_VALUE"; - string memory val = "0x7109709ECfa91a80626fF3989D68f67F5b1DD12D"; - vm.setEnv(key, val); - - bytes memory expected = hex"7109709ECfa91a80626fF3989D68f67F5b1DD12D"; - bytes memory output = vm.envBytes(key); - assertEq(output, expected); - } - - function testEnvBoolArray() public { - string memory key = "BOOL_VALUES"; - string memory val = "true,false,true,false"; - vm.setEnv(key, val); - - string memory delimiter = ","; - bool[4] memory expected = [true, false, true, false]; - bool[] memory output = vm.envBool(key, delimiter); - assert(keccak256(abi.encodePacked((output))) == keccak256(abi.encodePacked((expected)))); - } - - function testEnvUIntArray() public { - string memory key = "UINT_VALUES"; - string memory val = "0,0x0000000000000000000000000000000000000000000000000000000000000000"; - vm.setEnv(key, val); - - string memory delimiter = ","; - uint256[2] memory expected = [type(uint256).min, type(uint256).min]; - uint256[] memory output = vm.envUint(key, delimiter); - assert(keccak256(abi.encodePacked((output))) == keccak256(abi.encodePacked((expected)))); - } - - function testEnvIntArray() public { - string memory key = "INT_VALUES"; - string memory val = "-0x8000000000000000000000000000000000000000000000000000000000000000,+0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"; - vm.setEnv(key, val); - - string memory delimiter = ","; - int256[2] memory expected = [type(int256).min, type(int256).max]; - int256[] memory output = vm.envInt(key, delimiter); - assert(keccak256(abi.encodePacked((output))) == keccak256(abi.encodePacked((expected)))); - } - - function testEnvAddresseArray() public { - string memory key = "ADDRESS_VALUES"; - string memory val = "0x7109709ECfa91a80626fF3989D68f67F5b1DD12D,0x0000000000000000000000000000000000000000"; - vm.setEnv(key, val); - - string memory delimiter = ","; - address[2] memory expected = [ - 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D, - 0x0000000000000000000000000000000000000000 - ]; - address[] memory output = vm.envAddress(key, delimiter); - assert(keccak256(abi.encodePacked((output))) == keccak256(abi.encodePacked((expected)))); - } - - function testEnvBytes32Array() public { - string memory key = "BYTES32_VALUES"; - string memory val = "0x7109709ECfa91a80626fF3989D68f67F5b1DD12D,0x00"; - vm.setEnv(key, val); - - string memory delimiter = ","; - bytes32[2] memory expected = [ - bytes32(0x7109709ECfa91a80626fF3989D68f67F5b1DD12D000000000000000000000000), - bytes32(0x0000000000000000000000000000000000000000000000000000000000000000) - ]; - bytes32[] memory output = vm.envBytes32(key, delimiter); - assert(keccak256(abi.encodePacked((output))) == keccak256(abi.encodePacked((expected)))); - } - - function testEnvStringArray() public { - string memory key = "STRING_VALUES"; - string memory val = "hello, world!|0x7109709ECfa91a80626fF3989D68f67F5b1DD12D"; - vm.setEnv(key, val); - - string memory delimiter = "|"; - string[2] memory expected = [ - "hello, world!", - "0x7109709ECfa91a80626fF3989D68f67F5b1DD12D" - ]; - string[] memory output = vm.envString(key, delimiter); - for (uint i = 0; i < expected.length; ++i) { - assert(keccak256(abi.encodePacked((output[i]))) == keccak256(abi.encodePacked((expected[i])))); - } - } - - function testEnvBytesArray() public { - string memory key = "BYTES_VALUES"; - string memory val = "0x7109709ECfa91a80626fF3989D68f67F5b1DD12D,0x00"; - vm.setEnv(key, val); - - string memory delimiter = ","; - bytes[] memory expected = new bytes[](2); - expected[0] = hex"7109709ECfa91a80626fF3989D68f67F5b1DD12D"; - expected[1] = hex"00"; - bytes[] memory output = vm.envBytes(key, delimiter); - for (uint i = 0; i < expected.length; ++i) { - assert(keccak256(abi.encodePacked((output[i]))) == keccak256(abi.encodePacked((expected[i])))); - } - } - -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/ExpectCallTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/ExpectCallTest.t.sol deleted file mode 100644 index dfe1876325..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/ExpectCallTest.t.sol +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract Dummy { - function numberA() public pure returns (uint) { - return 200; - } -} - -contract ExpectCallTest is Test, KEVMCheats { - - - function testExpectStaticCall() public { - Dummy dummyContract = new Dummy(); - address addr = address(dummyContract); - bytes memory data = abi.encodeWithSelector(dummyContract.numberA.selector); - uint256 result = 0; - kevm.expectStaticCall(addr, data); - - assembly { - let status := staticcall(16000, addr, add(data, 32), mload(data), 0, 0) - if eq(status, 1) { - if eq(returndatasize(), 32) { - returndatacopy(0, 0, 32) - result := mload(0) - } - } - } - - assert(result == 200); - } - - function testExpectRegularCall() public { - Dummy dummyContract = new Dummy(); - address addr = address(dummyContract); - bytes memory data = abi.encodeWithSelector(dummyContract.numberA.selector); - uint256 result = 0; - kevm.expectRegularCall(addr, 0, data); - - assembly { - let status := call(16000, addr, 0, add(data, 32), mload(data), 0, 0) - if eq(status, 1) { - if eq(returndatasize(), 32) { - returndatacopy(0, 0, 32) - result := mload(0) - } - } - } - - assert(result == 200); - } -} \ No newline at end of file diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/ExpectRevertTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/ExpectRevertTest.t.sol deleted file mode 100644 index cdb44a35ca..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/ExpectRevertTest.t.sol +++ /dev/null @@ -1,147 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract Reverter { - function revertWithoutReason() public pure { - revert(); - } - - function revertWithReason(string calldata _a) public pure { - revert(_a); - } - - function noRevert() public pure returns (bool) { - return true; - } -} - -contract DepthReverter { - Reverter reverter; - - constructor() { - reverter = new Reverter(); - } - - function revertAtNextDepth() public view { - reverter.revertWithoutReason(); - } -} - -contract ReverterWithReturn { - function returnBytesUnless(bool revertInstead) - public - returns (bytes memory) - { - if (revertInstead) { - revert("Error"); - } else { - return abi.encodePacked(bytes4(0xdeadbeef)); - } - } - - function returnTupleUnless(bool revertInstead) - public - returns (uint256, uint256) - { - if (revertInstead) { - revert("Error"); - } else { - return (1, 2); - } - } -} - -contract ExpectRevertTest is Test { - error NotAuthorised(address caller, string message); - - function doRevert() internal pure { - require(false, ""); - } - - function test_expectRevert_internalCall() public { - vm.expectRevert(); - doRevert(); - } - - function test_expectRevert_true() public { - Reverter reverter = new Reverter(); - vm.expectRevert(); - reverter.revertWithoutReason(); - } - - function testFail_expectRevert_false() public { - Reverter reverter = new Reverter(); - vm.expectRevert(); - reverter.noRevert(); - } - - function test_expectRevert_message() public { - Reverter reverter = new Reverter(); - vm.expectRevert(bytes("Revert Reason Here")); - reverter.revertWithReason("Revert Reason Here"); - } - - function testFail_expectRevert_bytes4() public { - Reverter reverter = new Reverter(); - vm.expectRevert(bytes4("FAIL")); - reverter.revertWithReason("But fail."); - } - - function test_expectRevert_bytes4() public { - Reverter reverter = new Reverter(); - vm.expectRevert(bytes4("FAIL")); - reverter.revertWithReason("FAIL"); - } - - function testFail_expectRevert_empty() public { - vm.expectRevert(); - } - - function testFail_expectRevert_multipleReverts() public { - Reverter reverter = new Reverter(); - vm.expectRevert(); - reverter.revertWithoutReason(); - reverter.revertWithoutReason(); - } - - function test_ExpectRevert_increasedDepth() public { - DepthReverter reverter = new DepthReverter(); - vm.expectRevert(); - reverter.revertAtNextDepth(); - } - - function testFail_ExpectRevert_failAndSuccess() public { - Reverter reverter = new Reverter(); - vm.expectRevert(); - reverter.noRevert(); - vm.expectRevert(); - reverter.revertWithoutReason(); - } - - function test_expectRevert_encodedSymbolic(address controller) public { - vm.startPrank(controller); - vm.expectRevert( - abi.encodeWithSelector( - NotAuthorised.selector, - controller, - "TRANSFEROWNERSHIP" - ) - ); - revert NotAuthorised(controller, "TRANSFEROWNERSHIP"); - } - - function test_expectRevert_returnValue() public { - ReverterWithReturn reverter = new ReverterWithReturn(); - - vm.expectRevert("Error"); - bytes memory returnValueBytes = reverter.returnBytesUnless(true); - assertEq0(returnValueBytes, ""); - - vm.expectRevert("Error"); - (uint256 fst, uint256 snd) = reverter.returnTupleUnless(true); - assertEq(fst, 0); - assertEq(snd, 0); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/FfiTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/FfiTest.t.sol deleted file mode 100644 index 99a37ee6e6..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/FfiTest.t.sol +++ /dev/null @@ -1,57 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract FfiTest is Test { - - function setUp() public{ - string memory key = "FOO"; - string memory val = "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a72756e74696d6556617200000000000000000000000000000000000000000000"; - vm.setEnv(key, val); - } - - function testffi() public { - string[] memory inputs = new string[](3); - inputs[0] = "echo"; - inputs[1] = "-n"; - // ABI encoded "gm", as a string - inputs[2] = vm.toString(abi.encode("gm")); - //inputs[2] = "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002676d000000000000000000000000000000000000000000000000000000000000"; - bytes memory res = vm.ffi(inputs); - string memory output = abi.decode(res, (string)); - assertEq(output, "gm"); - } - - - function testFFIFOO() public { - string[] memory inputs = new string[](3); - inputs[0] = "bash"; - inputs[1] = "-c"; - inputs[2] = "echo -n $FOO"; - - bytes memory res = vm.ffi(inputs); - string memory output = abi.decode(res, (string)); - assertEq(output, "runtimeVar"); - } - - function testFFIScript() public { - string[] memory inputs = new string[](2); - inputs[0] = "bash"; - inputs[1] = "test/myscript.sh"; - - bytes memory res = vm.ffi(inputs); - string memory output = abi.decode(res, (string)); - assertEq(output, "runtimeVar"); - } - - function testFFIScript2() public { - string[] memory inputs = new string[](2); - inputs[0] = "bash"; - inputs[1] = "test/script.sh"; - - bytes memory res = vm.ffi(inputs); - string memory output = abi.decode(res, (string)); - assertEq(output, "true"); - } -} \ No newline at end of file diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/FilesTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/FilesTest.t.sol deleted file mode 100644 index 9f019aac58..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/FilesTest.t.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract FilesTest is Test { - - function testReadWriteFile() public { - string memory contents = vm.readFile("./test/file.txt"); - vm.writeFile("./test/filecopy.txt", contents); - string memory contentsCopy = vm.readFile("./test/filecopy.txt"); - - assertEq(contents, contentsCopy); - } - - function testReadWriteLine() public { - string memory line = vm.readLine("./test/file.txt"); - vm.writeLine("./test/fileline.txt", line); - line = vm.readLine("./test/file.txt"); - assertEq(line, "for testing"); - - vm.closeFile("./test/file.txt"); - line = vm.readLine("./test/file.txt"); - assertEq(line, "This is a file"); - } - - function testFailRemoveFile() public { - string memory contents = vm.readFile("./test/file.txt"); - vm.writeFile("./test/filecopy2.txt", contents); - vm.removeFile("./test/filecopy2.txt"); - vm.readFile("./test/filecopy2.txt"); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/ForkTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/ForkTest.t.sol deleted file mode 100644 index ba83e3eb93..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/ForkTest.t.sol +++ /dev/null @@ -1,86 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract ForkTest is Test { - - function testCreateFork() public { - uint256 forkId = vm.createFork("https://eth-mainnet.public.blastapi.io"); - vm.selectFork(forkId); - - assertGt(block.number, 15223854); // as of time of writing - } - - function testCreateForkBlock() public { - uint256 forkId = vm.createFork("https://eth-mainnet.public.blastapi.io", 15223849); - vm.selectFork(forkId); - - assertEq(block.number, 15223849); - } - - function testCreateSelectFork() public { - vm.createSelectFork("https://eth-mainnet.public.blastapi.io"); - assertGt(block.number, 15223854); - } - - function testCreateSelectForkBlock() public { - vm.createSelectFork("https://eth-mainnet.public.blastapi.io", 15223849); - assertEq(block.number, 15223849); - } - - function testActiveFork() public { - uint256 mainnetForkId = vm.createFork("https://eth-mainnet.public.blastapi.io"); - uint256 binanceForkId = vm.createFork("https://bscrpc.com"); - - assert(mainnetForkId != binanceForkId); - - vm.selectFork(mainnetForkId); - assertEq(vm.activeFork(), mainnetForkId); - - vm.selectFork(binanceForkId); - assertEq(vm.activeFork(), binanceForkId); - } - - function testRollFork() public { - uint256 forkId = vm.createFork("https://bscrpc.com"); - vm.selectFork(forkId); - - assertGt(block.number, 19918933); // - vm.rollFork(19918777); - - assertEq(block.number, 19918777); - } - - function testRollForkId() public { - uint256 forkId = vm.createFork("https://api.avax.network/ext/bc/C/rpc"); - vm.rollFork(forkId, 17871134); - - vm.selectFork(forkId); - //console.log(block.number); - assertEq(block.number, 17871134); - } - - function testRPCUrl() public { - string memory url = vm.rpcUrl("optimism"); - assertEq(url, "https://optimism.alchemyapi.io/v2/..."); - } - - function testRPCUrlRevert() public { - vm.expectRevert("Failed to resolve env var `RPC_MAINNET`: environment variable not found"); - vm.rpcUrl("mainnet"); - } - - function testAllRPCUrl() public { - //this line is to comment after I know how to set the environment variable RPC_MAINNET - vm.expectRevert("Failed to resolve env var `RPC_MAINNET`: environment variable not found"); - string[2][] memory allUrls = vm.rpcUrls(); - assertEq(allUrls.length, 2); - - string[2] memory val = allUrls[0]; - assertEq(val[0], "mainnet"); - - string[2] memory env = allUrls[1]; - assertEq(env[0], "optimism"); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/GasTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/GasTest.t.sol deleted file mode 100644 index 12d0ddba17..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/GasTest.t.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract GasTest is Test, KEVMCheats { - function testInfiniteGas() public { - kevm.infiniteGas(); - uint256 gasLeftBefore = gasleft(); - uint256 x = 345; - uint256 y = 928; - uint256 z = y - x; - uint256 gasLeftAfter = gasleft(); - assert(gasLeftBefore <= gasLeftAfter); - assert(gasLeftAfter <= gasLeftBefore); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/GetCodeTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/GetCodeTest.t.sol deleted file mode 100644 index 40681c40fb..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/GetCodeTest.t.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/MyToken.sol"; - - -contract GetCodeTest is Test { - MyToken myToken; - - - function setUp() public{ - myToken = new MyToken(address(1234)); - } - - function testGetCode() public { - bytes memory args = abi.encode(address(1234)); - vm.label(address(1234), "exampleAddress"); - bytes memory bytecode = abi.encodePacked(vm.getCode("MyToken.sol:MyToken"), args); - address anotherAddress; - assembly { - anotherAddress := create(0, add(bytecode, 0x20), mload(bytecode)) - } - - assertEq0(address(myToken).code, anotherAddress.code); - } - -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/LabelTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/LabelTest.t.sol deleted file mode 100644 index 2d7e5dff48..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/LabelTest.t.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract LabelTest is Test { - - function testLabel() public { - vm.label(address(0), "Zero Address"); - //Just to check test trace - assert(true); - } -} \ No newline at end of file diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/Loops.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/Loops.t.sol deleted file mode 100644 index 8431da9283..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/Loops.t.sol +++ /dev/null @@ -1,278 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract LoopsTest is Test { - - uint constant WAD = 10 ** 18; - uint constant RAY = 10 ** 27; - - function wmul(uint x, uint y) internal pure returns (uint z) { - z = ((x * y) + (WAD / 2)) / WAD; - } - - function wdiv(uint x, uint y) internal pure returns (uint z) { - z = ((x * WAD) + (y / 2)) / y; - } - - function sumToN(uint256 n) internal pure returns (uint256) { - uint256 result = 0; - for (uint256 i = 0; i <= n; i++) { - result += i; - } - return result; - } - - function sumToNBroken(uint256 n) internal pure returns (uint256) { - uint256 result = 0; - // Off by one error in loop condition - for (uint256 i = 0; i < n; i++) { - result += i; - } - return result; - } - - function testSumToN(uint256 n) public { - vm.assume(n <= 100); // We need this to keep the test running time low - uint256 expected = n * (n + 1) / 2; - uint256 actual = sumToN(n); - assertEq(expected, actual); - } - - function testSumToNBroken(uint256 n) public { - // This test should fail - vm.assume(n <= 100); // We need this to keep the test running time low - uint256 expected = n * (n + 1) / 2; - uint256 actual = sumToNBroken(n); - assertEq(expected, actual); - } - - function sum_N(uint n) public returns (uint) { - // Amount of gas left at beginning of loop: 9223372036854772642 - // Amount of gas consumed per iteration: 178 - // Number of iterations: n - // 9223372036854772642 // 178 = 51816696836262767 - vm.assume(n <= 51816696836262767); - uint s = 0; - while (0 < n) { - s = s + n; - n = n - 1; - } - return s; - } - - function test_sum_10() public returns (uint) { - return sum_N(10); - } - - function test_sum_100() public returns (uint) { - return sum_N(100); - } - - function test_sum_1000() public returns (uint) { - return sum_N(1000); - } - - function max(uint256[] memory numbers) internal pure returns (uint256) { - uint256 result = 0; - for (uint256 i = 0; i < numbers.length; i++) { - if (numbers[i] > result) result = numbers[i]; - } - return result; - } - - function maxBroken(uint256[] memory numbers) internal pure returns (uint256) { - uint256 result = 0; - // Off by one error in loop initialization - for (uint256 i = 1; i < numbers.length; i++) { - if (numbers[i] > result) result = numbers[i]; - } - return result; - } - - function testMax(uint256[] memory numbers) public { - uint256 maxium = max(numbers); - bool isMax = true; - for (uint256 i = 0; i < numbers.length && isMax; i++) { - isMax = maxium >= numbers[i]; - } - assertTrue(isMax); - } - - function testMaxBroken(uint256[] memory numbers) public { - // This test should fail - uint256 maxium = maxBroken(numbers); - bool isMax = true; - for (uint256 i = 0; i < numbers.length && isMax; i++) { - isMax = maxium >= numbers[i]; - } - assertTrue(isMax); - } - - function sort(uint256[] memory numbers) internal pure returns(uint256[] memory) { - if (numbers.length <= 1) return numbers; - quickSort(numbers, 0, numbers.length - 1); - return numbers; - } - - function sortBroken(uint256[] memory numbers) internal pure returns(uint256[] memory) { - if (numbers.length <= 1) return numbers; - // Off by one error in second parameter - quickSort(numbers, 1, numbers.length - 1); - return numbers; - } - - function quickSort(uint[] memory numbers, uint left, uint right) internal pure { - if (left >= right) return; - uint i = left; - uint j = right; - uint pivot = numbers[left + (right - left) / 2]; - while (i <= j) { - while (numbers[i] < pivot) i++; - while (pivot < numbers[j] && j > 0) j--; - if (i <= j) { - (numbers[i], numbers[j]) = (numbers[j], numbers[i]); - i++; - if (j > 0) j--; - } - } - if (left < j) - quickSort(numbers, left, j); - if (i < right) - quickSort(numbers, i, right); - } - - function testSort(uint256[] memory numbers) public { - uint256[] memory sorted = sort(numbers); - bool isSorted = true; - for (uint256 i = 1; i < sorted.length && isSorted; i++) { - isSorted = numbers[i - 1] <= numbers[i]; - } - assertTrue(isSorted); - } - - function testSortBroken(uint256[] memory numbers) public { - // This test should fail - uint256[] memory sorted = sortBroken(numbers); - bool isSorted = true; - for (uint256 i = 1; i < sorted.length && isSorted; i++) { - isSorted = numbers[i - 1] <= numbers[i]; - } - assertTrue(isSorted); - } - - function sqrt(uint x) internal pure returns (uint y) { - if (x == 0) { - y = 0; - } else { - uint z = x; - while (true) { - y = z; - z = (wdiv(x, z) + z) / 2; - if (y == z) { - break; - } - } - } - } - - function testSqrt(uint x) public { - uint res = sqrt(x); - uint sqr = wmul(res, res); - uint err; - if (sqr > x) { - err = sqr - x; - } else { - err = sqr - res; - } - assertTrue(err < x / 100); - } - - function isPrimeBroken(uint n) internal pure returns (bool) { - for (uint i = 2; i < n; i++) { - if (n % i != 0) { - return false; - } - } - return true; - } - - function testIsPrimeBroken(uint n, uint i) public { - // This test should fail for n < 2 - bool prime = isPrimeBroken(n); - assertTrue(!prime || n > 1); - assertTrue(i < 2 || i >= n || !prime || (n % i != 0)); - } - - function isPrime(uint n) internal pure returns (bool) { - if (n < 2) { - return false; - } - for (uint i = 2; i < n; i++) { - if (n % i != 0) { - return false; - } - } - return true; - } - - function testIsPrime(uint n, uint i) public { - bool prime = isPrime(n); - assertTrue(!prime || n > 1); - assertTrue(i < 2 || i >= n || !prime || (n % i != 0)); - } - - function testIsNotPrime(uint n) public { - bool prime = isPrime(n); - if (prime || n < 2) { - return; - } - for (uint i = 2; i < n; i++) { - if (n % i == 0) { - return; - } - } - assertTrue(false); - } - - function isPrimeOpt(uint n) internal pure returns (bool) { - if (n < 2) { - return false; - } - for (uint i = 2; i <= n / 2; i++) { - if (n % i != 0) { - return false; - } - } - return true; - } - - function testIsPrimeOpt(uint n) public { - assertEq(isPrime(n), isPrimeOpt(n)); - } - - function nthPrime(uint n) internal pure returns (uint i) { - uint m; - while (m < n) { - i++; - if (isPrime(i)) { - m++; - } - } - } - - function testNthPrime(uint n, uint i) public { - uint nth = nthPrime(n); - - if (n == 0) { - assertEq(nth, 0); - return; - } - - assertTrue(isPrime(nth)); - - uint prev = nthPrime(n - 1); - assertTrue(i <= prev || i >= nth || !isPrime(i)); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/MethodDisambiguate.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/MethodDisambiguate.t.sol deleted file mode 100644 index 02798005f8..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/MethodDisambiguate.t.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract MethodDisambiguateTest is Test { - - function getNumber(uint256 x) public returns(uint256) { - assertEq(x, x); - return 1; - } - - function getNumber(uint32 x) public returns(uint256) { - assertEq(x, x); - return 2; - } - - function test_method_call() public { - uint256 x = 0; - assertEq(1, getNumber(x)); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/MockCallTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/MockCallTest.t.sol deleted file mode 100644 index 5058d33fa1..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/MockCallTest.t.sol +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/MyToken.sol"; -import "src/MyIERC20.sol"; - - -contract MockCallTest is Test { - - function testMockCall() public { - vm.mockCall( - address(0), - abi.encodeWithSelector(MyToken.balanceOf.selector, address(1)), - abi.encode(10) - ); - assertEq(MyIERC20(address(0)).balanceOf(address(1)), 10); - } - - function testMockCalls() public { - vm.mockCall( - address(0), - abi.encodeWithSelector(MyToken.balanceOf.selector), - abi.encode(10) - ); - assertEq(MyIERC20(address(0)).balanceOf(address(1)), 10); - assertEq(MyIERC20(address(0)).balanceOf(address(2)), 10); - vm.clearMockedCalls(); - } - - function testMockCallValue() public { - MyToken token = new MyToken(address(1337)); - - assertEq(token.pay{value: 10}(address(1)), 10); - assertEq(token.pay{value: 2}(address(2)), 2); - vm.mockCall( - address(token), - 10, - abi.encodeWithSelector(MyToken.pay.selector), - abi.encode(99) - ); - assertEq(token.pay{value: 10}(address(1)), 99); - assertEq(token.pay{value: 2}(address(2)), 4); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/NoImports.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/NoImports.t.sol deleted file mode 100644 index 73ae0ce289..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/NoImports.t.sol +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -contract NoImport { - function test_source_map() public pure returns (uint) { - uint x = 0; - uint y = 1; - uint z = 2; - uint a = x + y; - uint b = z - y; - uint c = a * b; - return a + b + c; - } -} - diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/OwnerOnlyUpTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/OwnerOnlyUpTest.t.sol deleted file mode 100644 index a9b8760ed9..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/OwnerOnlyUpTest.t.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/OwnerOnlyUp.sol"; - -contract OwnerUpOnlyTest is Test { - OwnerUpOnly upOnly; - - function setUp() public { - upOnly = new OwnerUpOnly(); - } - - function testIncrementAsOwner() public { - assertEq(upOnly.count(), 0); - upOnly.increment(); - assertEq(upOnly.count(), 1); - } - - function testFailIncrementAsNotOwner() public { - vm.prank(address(0)); - upOnly.increment(); - } - - function testIncrementAsNotOwner() public { - vm.expectRevert(Unauthorized.selector); - vm.prank(address(0)); - upOnly.increment(); - } -} \ No newline at end of file diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/PlainPrankTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/PlainPrankTest.t.sol deleted file mode 100644 index 0dadbee951..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/PlainPrankTest.t.sol +++ /dev/null @@ -1,79 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract AdditionalToken { - address public immutable owner; - uint256 public count; - - constructor() { - owner = msg.sender; - count = 0; - } - - function incrementCount() public { - if(msg.sender != owner) - count = count + 1; - } -} - -contract PlainPrankTest is Test { - - function internalCounter() public view returns (bool) { - return msg.sender == address(15); - } - - function testFail_startPrank_internalCall() public { - // The vm.assume is required only by KEVM in order to have this test passing. It is required - // because the `msg.sender` in KEVM specs is a symbolic `CALLER_ID` while in foundry it is a - // concrete, hardcoded address. - vm.assume(msg.sender != address(15)); - vm.startPrank(address(15)); - assert(internalCounter()); - } - - function test_startPrank_true() public { - AdditionalToken token = new AdditionalToken(); - vm.startPrank(address(token)); - token.incrementCount(); - vm.stopPrank(); - assert(token.count() == 1); - } - - function test_startPrankWithOrigin_true() public { - AdditionalToken token = new AdditionalToken(); - vm.startPrank(address(token), address(token)); - token.incrementCount(); - vm.stopPrank(); - assert(token.count() == 1); - } - - function test_startPrank_zeroAddress_true() public { - AdditionalToken token = new AdditionalToken(); - vm.startPrank(address(0)); - token.incrementCount(); - vm.stopPrank(); - assert(token.count() == 1); - } - - function test_stopPrank_notExistent() public { - vm.stopPrank(); - assert(true); - } - - function testFail_startPrank_existingAlready() public { - vm.startPrank(address(0)); - vm.startPrank(address(1)); - vm.stopPrank(); - vm.stopPrank(); - } - - function test_prank_zeroAddress_true() public { - AdditionalToken token = new AdditionalToken(); - vm.prank(address(0)); - token.incrementCount(); - token.incrementCount(); - assert(token.count() == 1); - } -} \ No newline at end of file diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/PrankTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/PrankTest.t.sol deleted file mode 100644 index 1516c25ece..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/PrankTest.t.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/Prank.sol"; - -contract PrankTest is Test { - Prank prankContract; - - function setUp() public { - prankContract = new Prank(); - } - - function testAddAsOwner(uint256 x) public { - assertEq(prankContract.count(), 0); - prankContract.add(x); - assertEq(prankContract.count(), x); - } - - function testFailAddPrank(uint256 x) public { - vm.prank(address(0)); - prankContract.add(x); - } - - function testAddStartPrank(uint256 x) public { - vm.expectRevert(bytes("Only owner")); - vm.startPrank(address(0)); - prankContract.add(x); - assertEq(prankContract.count(), 0); - vm.stopPrank(); - } - - - function testSubtractFail(uint256 x) public { - vm.expectRevert(); - prankContract.subtract(x); - assertEq(prankContract.count(), 0); - } - - function testSubtractAsTxOrigin(uint256 addValue, uint256 subValue) public { - prankContract.add(addValue); - vm.assume(subValue<=addValue); - vm.prank(address(0), address(0)); - prankContract.subtract(subValue); - assertEq(prankContract.count(), addValue-subValue); - } - - function testSubtractStartPrank(uint256 addValue, uint256 subValue) public { - prankContract.add(addValue); - vm.startPrank(address(0),address(0)); - vm.assume(subValue<=addValue); - prankContract.subtract(subValue); - assertEq(prankContract.count(), addValue-subValue); - vm.stopPrank(); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/Preconditions.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/Preconditions.t.sol deleted file mode 100644 index faeb134911..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/Preconditions.t.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity >=0.8.0; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract PreconditionsTest is Test, KEVMCheats { - uint256 n; - - function setUp() public { - kevm.symbolicStorage(address(this)); - vm.assume(n < 10); - } - - function testAssume() public { - assertLt(n, 10); - } -} - diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/RecordLogsTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/RecordLogsTest.t.sol deleted file mode 100644 index 3b88bb0f6b..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/RecordLogsTest.t.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/EmitContract.sol"; - -contract RecordLogsTest is Test { - ExpectEmit emitter; - - function setUp() public { - emitter = new ExpectEmit(); - vm.recordLogs(); - } - - function testRecordLogs() public{ - emitter.t(); - Vm.Log[] memory entries = vm.getRecordedLogs(); - assertEq(entries.length, 1); - assertEq(entries[0].topics[0], keccak256("Transfer(address,address,uint256)")); - assertEq(abi.decode(entries[0].data, (uint256)), 1337); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/SafeTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/SafeTest.t.sol deleted file mode 100644 index 8b148dbbc7..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/SafeTest.t.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/Safe.sol"; - -contract SafeTest is Test { - Safe safe; - - // Needed so the test contract itself can receive ether - // when withdrawing - receive() external payable {} - - function setUp() public { - safe = new Safe(); - } - - function testWithdraw() public { - payable(address(safe)).transfer(1 ether); - uint256 preBalance = address(this).balance; - safe.withdraw(); - uint256 postBalance = address(this).balance; - assertEq(preBalance + 1 ether, postBalance); - } - - function testWithdrawFuzz(uint96 amount) public { - vm.assume(amount > 0.1 ether); - payable(address(safe)).transfer(amount); - uint256 preBalance = address(this).balance; - safe.withdraw(); - uint256 postBalance = address(this).balance; - assertEq(preBalance + amount, postBalance); - } -} \ No newline at end of file diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/SetUp2Test.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/SetUp2Test.t.sol deleted file mode 100644 index f0bd827768..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/SetUp2Test.t.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract Setup2Test is Test { - - uint a; - uint b; - uint c; - - function setUp() public { - a = 1; - b = 2; - c = 3; - } - - function test_setup() public { - assertEq(a + b + c, 6); - } - function testFail_setup() public { - assertEq(a + b + c, 7); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/SetUpDeploy.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/SetUpDeploy.t.sol deleted file mode 100644 index b161ec78c4..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/SetUpDeploy.t.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/MyToken.sol"; - -// This experiment covers the basic behavior of the -// test contract constructor and setup function. -// -// In particular, it ensures that the constructor -// and setup functions are called before running -// the tests. -// -// The setup function is called exactly once after -// the constructor function. -// -// Before each test the VM reverts to the post -// setup state. -contract SetUpDeployTest is Test { - - MyToken token; - - function setUp() public{ - token = new MyToken(address(0)); - } - - function test_extcodesize() public { - uint size; - address token_addr = address(token); - assembly { - size := extcodesize(token_addr) - } - assert(size > 0); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/SetUpTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/SetUpTest.t.sol deleted file mode 100644 index 338831c356..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/SetUpTest.t.sol +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -// This experiment covers the basic behavior of the -// test contract constructor and setup function. -// -// In particular, it ensures that the constructor -// and setup functions are called before running -// the tests. -// -// The setup function is called exactly once after -// the constructor function. -// -// Before each test the VM reverts to the post -// setup state. -contract SetUpTest is Test { - - uint256 counter = 0; - - constructor () { - counter = 100; - } - - function setUp() public{ - counter++; - } - - function testSetUpCalled() public { - assertEq(counter, 101); - } - - // We also want to cover a symbolic case - function testSetUpCalledSymbolic(uint256 x) public { - assertEq(counter, 101); - // The following assertion is only here so that - // x is used and not thrown away by the optimizer - assertEq(x, x); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/SignTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/SignTest.t.sol deleted file mode 100644 index 42b3426c20..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/SignTest.t.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract SignTest is Test { - - function testSign() public { - address alice = vm.addr(1); - bytes32 hash = keccak256("Signed by Alice"); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(1, hash); - address signer = ecrecover(hash, v, r, s); - assertEq(alice, signer); - } - - function testSign_symbolic(uint256 pk) public { - vm.assume(pk != 0); - vm.assume(pk < 115792089237316195423570985008687907852837564279074904382605163141518161494337); - address fromPk = vm.addr(pk); - bytes32 hash = keccak256("Signed by private key"); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(pk, hash); - address signer = ecrecover(hash, v, r, s); - assertEq(fromPk, signer); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/Simple.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/Simple.t.sol deleted file mode 100644 index 1787b54f39..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/Simple.t.sol +++ /dev/null @@ -1,65 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract AssertTest is Test, KEVMCheats { - uint y; - - function setUp() public {} - - function test_failing_branch(uint x) public { - assert(x >= 100); - } - - function test_assert_true() public pure { - assert(true); - } - - function test_assert_true_branch(uint x) public { - if (x < 3) { - y = x; - assert(true); - } else { - y = x - 1; - assert(true); - } - assert(y <= x); - } - - function test_branch_merge(uint x) public { - kevm.infiniteGas(); - if (x < 10) { - y = 0; - } else { - y = 1; - } - assert(y < 2); - } - - function test_assert_false() public pure { - assert(false); - } - - function testFail_assert_true() public pure { - assert(true); - } - - function testFail_assert_false() public pure { - assert(false); - } - - function testFail_expect_revert() public { - vm.expectRevert(); - assert(false); - } - - function test_revert_branch(uint x, uint y) public{ - if (x < y) { - assert(true); - } else { - assert(false); - } - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/SnapshotTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/SnapshotTest.t.sol deleted file mode 100644 index 62fbf074a5..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/SnapshotTest.t.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -struct Storage { - uint slot0; - uint slot1; -} - -contract SnapshotTest is Test { - Storage store; - - function setUp() public { - store.slot0 = 10; - store.slot1 = 20; - } - - function testSnapshot() public { - uint256 snapshot = vm.snapshot(); - store.slot0 = 300; - store.slot1 = 400; - - assertEq(store.slot0, 300); - assertEq(store.slot1, 400); - - // after resetting to a snapshot all changes are discarded - vm.revertTo(snapshot); - assertEq(store.slot0, 10, "snapshot revert for slot 0 unsuccessful"); - assertEq(store.slot1, 20, "snapshot revert for slot 1 unsuccessful"); - } - -} - diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/StoreTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/StoreTest.t.sol deleted file mode 100644 index 7fc8206f99..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/StoreTest.t.sol +++ /dev/null @@ -1,110 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract Store { - uint256 private testNumber = 1337; // slot 0 - - constructor(){ - } -} - -contract StoreTest is Test { - - function testAccesses() public { - Store myStore = new Store(); - vm.record(); - - (bytes32[] memory reads, bytes32[] memory writes) = vm.accesses(address(myStore)); - assert(reads.length == 1); - assert(writes.length == 1); - } - - function testStoreLoad() public { - Store myStore = new Store(); - vm.store(address(myStore), bytes32(uint256(0)), bytes32(uint256(31337))); - bytes32 testNumber = vm.load(address(myStore), bytes32(uint256(0))); - assert(uint256(testNumber) == 31337); // 31337 - } - - function testStoreLoadNonExistent() public { - vm.store(address(0), bytes32(uint256(3)), bytes32(uint256(31337))); - bytes32 testNumber = vm.load(address(0), bytes32(uint256(3))); - assert(uint256(testNumber) == 31337); // 31337 - } - - function testLoadNonExistent() public { - bytes32 testNumber = vm.load(address(100), bytes32(uint256(23))); - assert(uint256(testNumber) == 0); - } - - - function testGasLoadColdVM() public { - // Call vm.load(address(101), bytes32(uint256(23))) - uint256 gasUsed = measureGasForCall(address(vm), abi.encodeCall(Vm.load, (address(101), bytes32(uint256(23))))); - assert(gasUsed == 2625); - } - - function testGasStoreColdVM() public { - // Call vm.store(address(101), bytes32(uint256(23)), bytes32(uint256(5))) - uint256 gasUsed = measureGasForCall(address(vm), abi.encodeCall(Vm.store, (address(101), bytes32(uint256(23)), bytes32(uint256(5))))); - assert(gasUsed == 2625); - } - - function testGasLoadWarmVM() public { - // Load the vm into the set of accessed accounts. Should make the - // following call to vm.load() cheaper - (payable(address(vm)).send(0)); - - // Call vm.load(address(101), bytes32(uint256(23))); - uint256 gasUsed = measureGasForCall(address(vm), abi.encodeCall(Vm.load, (address(101), bytes32(uint256(23))))); - assert(gasUsed == 125); - } - - function testGasStoreWarmVM() public { - // Load the vm into the set of accessed accounts. Should make the - // following call to vm.store() cheaper - (payable(address(vm)).send(0)); - - // Call vm.store(address(101), bytes32(uint256(23)), bytes32(uint256(5))); - uint256 gasUsed = measureGasForCall(address(vm), abi.encodeCall(Vm.store, (address(101), bytes32(uint256(23)), bytes32(uint256(5))))); - assert(gasUsed == 125); - } - - function testGasLoadWarmUp() public { - // Check that vm.load(addr, slot) loads addr into the set of accessed - // accounts, making subsequent access to addr cheaper - vm.load(address(101), bytes32(uint256(23))); - - uint256 gasUsed = measureGasForCall(address(101), ""); - assert(gasUsed == 125); - } - - - function testGasStoreWarmUp() public { - // Check that vm.store(addr, slot, val) loads addr into the set of accessed - // accounts, making subsequent access to addr cheaper - vm.store(address(101), bytes32(uint256(23)), bytes32(uint256(5))); - - uint256 gasUsed = measureGasForCall(address(101), ""); - assert(gasUsed == 125); - } - - - function measureGasForCall(address target, bytes memory callData) internal returns(uint256) { - // Use assembly to measure gas cost as this gives more predictable - // results than when using Solidity - - uint256 gasUsed; - assembly { - let dataPtr := add(32, callData) - let dataSize := mload(callData) - let g := gas() - let r := call(g, target, 0, dataPtr, dataSize, 0, 0) - gasUsed := sub(g, gas()) - } - - return gasUsed; - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/SymbolicStorageTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/SymbolicStorageTest.t.sol deleted file mode 100644 index 4133313571..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/SymbolicStorageTest.t.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract SymbolicStore { - uint256 private testNumber = 1337; // slot 0 - constructor() {} -} - -contract SymbolicStorageTest is Test, KEVMCheats { - function testFail_SymbolicStorage(uint256 slot) public { - address addr = 0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8; - kevm.symbolicStorage(addr); - bytes32 value = vm.load(addr, bytes32(slot)); - require(value != 0); - assertEq(uint256(value), 0); - } - - function testFail_SymbolicStorage1(uint256 slot) public { - SymbolicStore myStore = new SymbolicStore(); - kevm.symbolicStorage(address(myStore)); - bytes32 value = vm.load(address(myStore), bytes32(uint256(slot))); - require(value != 0); - assertEq(uint256(value), 0); - } - - function testEmptyInitialStorage(uint256 slot) public { - bytes32 storage_value = vm.load(address(vm), bytes32(slot)); - assertEq(uint256(storage_value), 0); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/ToStringTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/ToStringTest.t.sol deleted file mode 100644 index 116210ff1e..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/ToStringTest.t.sol +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract ToStringTest is Test { - - function testAddressToString() public { - address addr = 0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8; - string memory addrStr = vm.toString(addr); - assertEq("0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8", addrStr); - } - - function testBytesToString() public { - bytes memory bts = hex"7109709ecfa91a80626ff3989d68f67f5b1dd12d"; - string memory btsStr = vm.toString(bts); - assertEq("0x7109709ecfa91a80626ff3989d68f67f5b1dd12d", btsStr); - } - - function testBytes32ToString() public { - bytes32 bts = 0x00; - string memory btsStr = vm.toString(bts); - assertEq("0x0000000000000000000000000000000000000000000000000000000000000000", btsStr); - } - - function testBoolToString() public { - string memory boolStr = vm.toString(true); - assertEq("true", boolStr); - boolStr = vm.toString(false); - assertEq("false", boolStr); - } - - function testUint256ToString() public { - uint256 number = 1234; - string memory numberStr = vm.toString(number); - assertEq("1234", numberStr); - } - - function testIntToString() public { - int number = -1234; - string memory numberStr = vm.toString(number); - assertEq("-1234", numberStr); - } -} \ No newline at end of file diff --git a/kevm-pyk/src/tests/integration/test-data/foundry/test/TypeTest.t.sol b/kevm-pyk/src/tests/integration/test-data/foundry/test/TypeTest.t.sol deleted file mode 100644 index 318fddddb7..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/foundry/test/TypeTest.t.sol +++ /dev/null @@ -1,566 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -contract UintTypeTest { - - /* Tests for uint256 */ - function test_uint256(uint256 x) public pure { - assert(x == x); - assert(type(uint256).max >= x); - } - - function test_uint256_fail(uint256 x) public pure { - assert(type(uint256).max > x); - } - - function testFail_uint256(uint256 x) public pure { - assert(type(uint256).max > x); - } - - - /* Tests for uint248 */ - function test_uint248(uint248 x) public pure { - assert(x == x); - assert(type(uint248).max >= x); - } - - function test_uint248_fail(uint248 x) public pure { - assert(type(uint248).max > x); - } - - function testFail_uint248(uint248 x) public pure { - assert(type(uint248).max > x); - } - - - /* Tests for uint240 */ - function test_uint240(uint240 x) public pure { - assert(x == x); - assert(type(uint240).max >= x); - } - - function test_uint240_fail(uint240 x) public pure { - assert(type(uint240).max > x); - } - - function testFail_uint240(uint240 x) public pure { - assert(type(uint240).max > x); - } - - - /* Tests for uint232 */ - function test_uint232(uint232 x) public pure { - assert(x == x); - assert(type(uint232).max >= x); - } - - function test_uint232_fail(uint232 x) public pure { - assert(type(uint232).max > x); - } - - function testFail_uint232(uint232 x) public pure { - assert(type(uint232).max > x); - } - - - /* Tests for uint224 */ - function test_uint224(uint224 x) public pure { - assert(x == x); - assert(type(uint224).max >= x); - } - - function test_uint224_fail(uint224 x) public pure { - assert(type(uint224).max > x); - } - - function testFail_uint224(uint224 x) public pure { - assert(type(uint224).max > x); - } - - - /* Tests for uint216 */ - function test_uint216(uint216 x) public pure { - assert(x == x); - assert(type(uint216).max >= x); - } - - function test_uint216_fail(uint216 x) public pure { - assert(type(uint216).max > x); - } - - function testFail_uint216(uint216 x) public pure { - assert(type(uint216).max > x); - } - - - /* Tests for uint208 */ - function test_uint208(uint208 x) public pure { - assert(x == x); - assert(type(uint208).max >= x); - } - - function test_uint208_fail(uint208 x) public pure { - assert(type(uint208).max > x); - } - - function testFail_uint208(uint208 x) public pure { - assert(type(uint208).max > x); - } - - - /* Tests for uint200 */ - function test_uint200(uint200 x) public pure { - assert(x == x); - assert(type(uint200).max >= x); - } - - function test_uint200_fail(uint200 x) public pure { - assert(type(uint200).max > x); - } - - function testFail_uint200(uint200 x) public pure { - assert(type(uint200).max > x); - } - - - /* Tests for uint192 */ - function test_uint192(uint192 x) public pure { - assert(x == x); - assert(type(uint192).max >= x); - } - - function test_uint192_fail(uint192 x) public pure { - assert(type(uint192).max > x); - } - - function testFail_uint192(uint192 x) public pure { - assert(type(uint192).max > x); - } - - - /* Tests for uint184 */ - function test_uint184(uint184 x) public pure { - assert(x == x); - assert(type(uint184).max >= x); - } - - function test_uint184_fail(uint184 x) public pure { - assert(type(uint184).max > x); - } - - function testFail_uint184(uint184 x) public pure { - assert(type(uint184).max > x); - } - - - /* Tests for uint176 */ - function test_uint176(uint176 x) public pure { - assert(x == x); - assert(type(uint176).max >= x); - } - - function test_uint176_fail(uint176 x) public pure { - assert(type(uint176).max > x); - } - - function testFail_uint176(uint176 x) public pure { - assert(type(uint176).max > x); - } - - - /* Tests for uint168 */ - function test_uint168(uint168 x) public pure { - assert(x == x); - assert(type(uint168).max >= x); - } - - function test_uint168_fail(uint168 x) public pure { - assert(type(uint168).max > x); - } - - function testFail_uint168(uint168 x) public pure { - assert(type(uint168).max > x); - } - - - /* Tests for uint160 */ - function test_uint160(uint160 x) public pure { - assert(x == x); - assert(type(uint160).max >= x); - } - - function test_uint160_fail(uint160 x) public pure { - assert(type(uint160).max > x); - } - - function testFail_uint160(uint160 x) public pure { - assert(type(uint160).max > x); - } - - - /* Tests for uint152 */ - function test_uint152(uint152 x) public pure { - assert(x == x); - assert(type(uint152).max >= x); - } - - function test_uint152_fail(uint152 x) public pure { - assert(type(uint152).max > x); - } - - function testFail_uint152(uint152 x) public pure { - assert(type(uint152).max > x); - } - - - /* Tests for uint144 */ - function test_uint144(uint144 x) public pure { - assert(x == x); - assert(type(uint144).max >= x); - } - - function test_uint144_fail(uint144 x) public pure { - assert(type(uint144).max > x); - } - - function testFail_uint144(uint144 x) public pure { - assert(type(uint144).max > x); - } - - - /* Tests for uint136 */ - function test_uint136(uint136 x) public pure { - assert(x == x); - assert(type(uint136).max >= x); - } - - function test_uint136_fail(uint136 x) public pure { - assert(type(uint136).max > x); - } - - function testFail_uint136(uint136 x) public pure { - assert(type(uint136).max > x); - } - - - /* Tests for uint128 */ - function test_uint128(uint128 x) public pure { - assert(x == x); - assert(type(uint128).max >= x); - } - - function test_uint128_fail(uint128 x) public pure { - assert(type(uint128).max > x); - } - - function testFail_uint128(uint128 x) public pure { - assert(type(uint128).max > x); - } - - - /* Tests for uint120 */ - function test_uint120(uint120 x) public pure { - assert(x == x); - assert(type(uint120).max >= x); - } - - function test_uint120_fail(uint120 x) public pure { - assert(type(uint120).max > x); - } - - function testFail_uint120(uint120 x) public pure { - assert(type(uint120).max > x); - } - - - /* Tests for uint112 */ - function test_uint112(uint112 x) public pure { - assert(x == x); - assert(type(uint112).max >= x); - } - - function test_uint112_fail(uint112 x) public pure { - assert(type(uint112).max > x); - } - - function testFail_uint112(uint112 x) public pure { - assert(type(uint112).max > x); - } - - - /* Tests for uint104 */ - function test_uint104(uint104 x) public pure { - assert(x == x); - assert(type(uint104).max >= x); - } - - function test_uint104_fail(uint104 x) public pure { - assert(type(uint104).max > x); - } - - function testFail_uint104(uint104 x) public pure { - assert(type(uint104).max > x); - } - - - /* Tests for uint96 */ - function test_uint96(uint96 x) public pure { - assert(x == x); - assert(type(uint96).max >= x); - } - - function test_uint96_fail(uint96 x) public pure { - assert(type(uint96).max > x); - } - - function testFail_uint96(uint96 x) public pure { - assert(type(uint96).max > x); - } - - - /* Tests for uint88 */ - function test_uint88(uint88 x) public pure { - assert(x == x); - assert(type(uint88).max >= x); - } - - function test_uint88_fail(uint88 x) public pure { - assert(type(uint88).max > x); - } - - function testFail_uint88(uint88 x) public pure { - assert(type(uint88).max > x); - } - - - /* Tests for uint80 */ - function test_uint80(uint80 x) public pure { - assert(x == x); - assert(type(uint80).max >= x); - } - - function test_uint80_fail(uint80 x) public pure { - assert(type(uint80).max > x); - } - - function testFail_uint80(uint80 x) public pure { - assert(type(uint80).max > x); - } - - - /* Tests for uint72 */ - function test_uint72(uint72 x) public pure { - assert(x == x); - assert(type(uint72).max >= x); - } - - function test_uint72_fail(uint72 x) public pure { - assert(type(uint72).max > x); - } - - function testFail_uint72(uint72 x) public pure { - assert(type(uint72).max > x); - } - - - /* Tests for uint64 */ - function test_uint64(uint64 x) public pure { - assert(x == x); - assert(type(uint64).max >= x); - } - - function test_uint64_fail(uint64 x) public pure { - assert(type(uint64).max > x); - } - - function testFail_uint64(uint64 x) public pure { - assert(type(uint64).max > x); - } - - - /* Tests for uint56 */ - function test_uint56(uint56 x) public pure { - assert(x == x); - assert(type(uint56).max >= x); - } - - function test_uint56_fail(uint56 x) public pure { - assert(type(uint56).max > x); - } - - function testFail_uint56(uint56 x) public pure { - assert(type(uint56).max > x); - } - - - /* Tests for uint48 */ - function test_uint48(uint48 x) public pure { - assert(x == x); - assert(type(uint48).max >= x); - } - - function test_uint48_fail(uint48 x) public pure { - assert(type(uint48).max > x); - } - - function testFail_uint48(uint48 x) public pure { - assert(type(uint48).max > x); - } - - - /* Tests for uint40 */ - function test_uint40(uint40 x) public pure { - assert(x == x); - assert(type(uint40).max >= x); - } - - function test_uint40_fail(uint40 x) public pure { - assert(type(uint40).max > x); - } - - function testFail_uint40(uint40 x) public pure { - assert(type(uint40).max > x); - } - - - /* Tests for uint32 */ - function test_uint32(uint32 x) public pure { - assert(x == x); - assert(type(uint32).max >= x); - } - - function test_uint32_fail(uint32 x) public pure { - assert(type(uint32).max > x); - } - - function testFail_uint32(uint32 x) public pure { - assert(type(uint32).max > x); - } - - - /* Tests for uint24 */ - function test_uint24(uint24 x) public pure { - assert(x == x); - assert(type(uint24).max >= x); - } - - function test_uint24_fail(uint24 x) public pure { - assert(type(uint24).max > x); - } - - function testFail_uint24(uint24 x) public pure { - assert(type(uint24).max > x); - } - - - /* Tests for uint16 */ - function test_uint16(uint16 x) public pure { - assert(x == x); - assert(type(uint16).max >= x); - } - - function test_uint16_fail(uint16 x) public pure { - assert(type(uint16).max > x); - } - - function testFail_uint16(uint16 x) public pure { - assert(type(uint16).max > x); - } - - - /* Tests for uint8 */ - function test_uint8(uint8 x) public pure { - assert(x == x); - assert(type(uint8).max >= x); - } - - function test_uint8_fail(uint8 x) public pure { - assert(type(uint8).max > x); - } - - function testFail_uint8(uint8 x) public pure { - assert(type(uint8).max > x); - } - -} - - -contract IntTypeTest { - - /* Tests for int256 */ - function test_int256(int256 x) public pure { - assert(x == x); - assert(type(int256).max >= x); - } - - function test_int256_fail(int256 x) public pure { - assert(type(int256).max > x); - } - - function testFail_int256(int256 x) public pure { - assert(type(int256).max > x); - } - - - /* Tests for int128 */ - function test_int128(int128 x) public pure { - assert(x == x); - assert(type(int128).max >= x); - } - - function test_int128_fail(int128 x) public pure { - assert(type(int128).max > x); - } - - function testFail_int128(int128 x) public pure { - assert(type(int128).max > x); - } - - - /* Tests for int64 */ - function test_int64(int64 x) public pure { - assert(x == x); - assert(type(int64).max >= x); - } - - function test_int64_fail(int64 x) public pure { - assert(type(int64).max > x); - } - - function testFail_int64(int64 x) public pure { - assert(type(int64).max > x); - } -} - - -contract BytesTypeTest { - - /* Tests for bytes32 */ - function test_bytes32(bytes32 x) public pure { - assert(x == x); - assert(type(uint256).max >= uint256(x)); - } - - function test_bytes32_fail(bytes32 x) public pure { - assert(type(uint256).max > uint256(x)); - } - - function testFail_bytes32(bytes32 x) public pure { - assert(type(uint256).max > uint256(x)); - } - - - /* Tests for bytes4 */ - function test_bytes4(bytes4 x) public pure { - assert(x == x); - assert(type(uint32).max >= uint32(x)); - } - - function test_bytes4_fail(bytes4 x) public pure { - assert(type(uint32).max > uint32(x)); - } - - function testFail_bytes4(bytes4 x) public pure { - assert(type(uint32).max > uint32(x)); - } -} diff --git a/kevm-pyk/src/tests/integration/test-data/gas-abstraction.expected b/kevm-pyk/src/tests/integration/test-data/gas-abstraction.expected deleted file mode 100644 index 53f9095a0d..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/gas-abstraction.expected +++ /dev/null @@ -1,1470 +0,0 @@ - -┌─ 1 (root, init) -│ k: #execute ~> CONTINUATION:K -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (511 steps) -├─ 3 -│ k: CALL 9223372036854772946 645326474426547203313410069153905908525362434349 0 128 ... -│ pc: 361 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #checkCall 728815563385977040452943777879061427756277306518 0 ~> #call 728815563 ... -│ pc: 361 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (445 steps) -├─ 5 -│ k: #end EVMC_REVERT ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -│ pc: 808 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -┊ constraint: true -┊ subst: { - CONTINUATION <- CONTINUATION:K - EXITCODE_CELL <- EXITCODE_CELL:Int - STATUSCODE <- STATUSCODE:StatusCode - TOUCHEDACCOUNTS_CELL <- TOUCHEDACCOUNTS_CELL:Set - CALLER_ID <- CALLER_ID:Int - ?_VGAS <- ?_VGAS:Int - ?_VCALLGAS <- ?_VCALLGAS:Int - VGAS_1675167e <- ( ( ?_VGAS:Int +Int ?_VCALLGAS:Int ) +Int -202 ) - SELFDESTRUCT_CELL <- SELFDESTRUCT_CELL:Set - REFUND_CELL <- REFUND_CELL:Int - GASPRICE_CELL <- GASPRICE_CELL:Int - ORIGIN_ID <- ORIGIN_ID:Int - BLOCKHASHES_CELL <- BLOCKHASHES_CELL:List - PREVIOUSHASH_CELL <- PREVIOUSHASH_CELL:Int - OMMERSHASH_CELL <- OMMERSHASH_CELL:Int - COINBASE_CELL <- COINBASE_CELL:Int - STATEROOT_CELL <- STATEROOT_CELL:Int - TRANSACTIONSROOT_CELL <- TRANSACTIONSROOT_CELL:Int - RECEIPTSROOT_CELL <- RECEIPTSROOT_CELL:Int - LOGSBLOOM_CELL <- LOGSBLOOM_CELL:Bytes - DIFFICULTY_CELL <- DIFFICULTY_CELL:Int - NUMBER_CELL <- NUMBER_CELL:Int - GASLIMIT_CELL <- GASLIMIT_CELL:Int - GASUSED_CELL <- GASUSED_CELL:Gas - TIMESTAMP_CELL <- TIMESTAMP_CELL:Int - EXTRADATA_CELL <- EXTRADATA_CELL:Bytes - MIXHASH_CELL <- MIXHASH_CELL:Int - BLOCKNONCE_CELL <- BLOCKNONCE_CELL:Int - BASEFEE_CELL <- BASEFEE_CELL:Int - OMMERBLOCKHEADERS_CELL <- OMMERBLOCKHEADERS_CELL:JSON - CHAINID_CELL <- CHAINID_CELL:Int - TXORDER_CELL <- TXORDER_CELL:List - TXPENDING_CELL <- TXPENDING_CELL:List - MESSAGES_CELL <- MESSAGES_CELL:MessageCellMap - DEPTH_CELL <- DEPTH_CELL:Int - EXPECTEDREASON_CELL <- EXPECTEDREASON_CELL:Bytes - EXPECTEDDEPTH_CELL <- EXPECTEDDEPTH_CELL:Int - CHECKEDTOPICS_CELL <- CHECKEDTOPICS_CELL:List - CHECKEDDATA_CELL <- CHECKEDDATA_CELL:Bool - EXPECTEDEVENTADDRESS_CELL <- EXPECTEDEVENTADDRESS_CELL:Account - GENERATEDCOUNTER_CELL <- GENERATEDCOUNTER_CELL:Int -} -├─ 6 -│ k: #end EVMC_REVERT ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -│ pc: 808 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 7 -│ k: #halt ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -│ pc: 808 -│ callDepth: 0 -│ statusCode: EVMC_REVERT -│ -│ (2 steps) -└─ 8 (leaf, terminal) - k: #halt ~> CONTINUATION:K - pc: 808 - callDepth: 0 - statusCode: EVMC_REVERT - - -┌─ 2 (root, leaf, target) -│ k: #halt ~> CONTINUATION:K -│ pc: PC_CELL_5d410f2a:Int -│ callDepth: CALLDEPTH_CELL_5d410f2a:Int -│ statusCode: STATUSCODE_FINAL:StatusCode - - -Node 8: - -( - - - - #halt - ~> CONTINUATION:K - - - EXITCODE_CELL:Int - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - TOUCHEDACCOUNTS_CELL:Set - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"c\xfe\xc36" - - - 0 - - - ( 428 : ( ( ( ?_VGAS:Int +Int ?_VCALLGAS:Int ) +Int -127 ) : ( 583 : ( 928 : ( 345 : ( ( ( ?_VGAS:Int +Int ?_VCALLGAS:Int ) +Int -36 ) : ( 167 : ( selector ( "testInfiniteGas()" ) : .WordStack ) ) ) ) ) ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x9fsS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 5 - - - #gas ( ?_VCALLGAS:Int ) - - - false - - - 0 - - - - - SELFDESTRUCT_CELL:Set - - - .List - - - REFUND_CELL:Int - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - - - GASPRICE_CELL:Int - - - ORIGIN_ID:Int - - - BLOCKHASHES_CELL:List - - - - PREVIOUSHASH_CELL:Int - - - OMMERSHASH_CELL:Int - - - COINBASE_CELL:Int - - - STATEROOT_CELL:Int - - - TRANSACTIONSROOT_CELL:Int - - - RECEIPTSROOT_CELL:Int - - - LOGSBLOOM_CELL:Bytes - - - DIFFICULTY_CELL:Int - - - NUMBER_CELL:Int - - - GASLIMIT_CELL:Int - - - GASUSED_CELL:Gas - - - TIMESTAMP_CELL:Int - - - EXTRADATA_CELL:Bytes - - - MIXHASH_CELL:Int - - - BLOCKNONCE_CELL:Int - - - BASEFEE_CELL:Int - - - OMMERBLOCKHEADERS_CELL:JSON - - - - - - CHAINID_CELL:Int - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - - TXORDER_CELL:List - - - TXPENDING_CELL:List - - - MESSAGES_CELL:MessageCellMap - - - - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - DEPTH_CELL:Int - - - false - - - - - false - - - EXPECTEDREASON_CELL:Bytes - - - EXPECTEDDEPTH_CELL:Int - - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - - CHECKEDTOPICS_CELL:List - - - CHECKEDDATA_CELL:Bool - - - EXPECTEDEVENTADDRESS_CELL:Account - - - - - false - - - false - - - .Set - - - .Set - - - - - - GENERATEDCOUNTER_CELL:Int - - -#And ( { true #Equals 0 <=Int CALLER_ID:Int } -#And ( { true #Equals 0 <=Int ORIGIN_ID:Int } -#And ( { true #Equals 0 <=Int NUMBER_CELL:Int } -#And ( { true #Equals CALLER_ID:Int - - - ( .K => CALL 9223372036854772946 645326474426547203313410069153905908525362434349 0 128 4 128 0 - ~> #pc [ CALL ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"c\xfe\xc36" - - - 0 - - - ( .WordStack => ( 132 : ( selector ( "infiniteGas()" ) : ( 645326474426547203313410069153905908525362434349 : ( 167 : ( selector ( "testInfiniteGas()" ) : .WordStack ) ) ) ) ) ) - - - ( b"" => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x9fsS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - ... - ... - - ( 0 => 5 ) - - - ( _CALLGAS_CELL => 9079256848778917021 ) - - - false - - - 0 - - - - - .List - - - ( .Set => SetItem ( 645326474426547203313410069153905908525362434349 ) ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - - ( CALL 9223372036854772946 645326474426547203313410069153905908525362434349 0 128 4 128 0 => #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"\xed\x9fsS" false - ~> #return 128 0 ) - ~> #pc [ CALL ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"c\xfe\xc36" - - - 0 - - - ( 132 : ( selector ( "infiniteGas()" ) : ( 645326474426547203313410069153905908525362434349 : ( 167 : ( selector ( "testInfiniteGas()" ) : .WordStack ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x9fsS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 5 - - - 9079256848778917021 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - - ( #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"\xed\x9fsS" false - ~> #return 128 0 - ~> #pc [ CALL ] => #end EVMC_REVERT - ~> #pc [ REVERT ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"c\xfe\xc36" - - - 0 - - - ( ( 132 => 428 ) : ( ( selector ( "infiniteGas()" ) => ( ( ??_VGAS +Int ??_VCALLGAS ) +Int -127 ) ) : ( ( 645326474426547203313410069153905908525362434349 => 583 ) : ( ( 167 => 928 ) : ( ( selector ( "testInfiniteGas()" ) => 345 ) : ( .WordStack => ( ( ( ??_VGAS +Int ??_VCALLGAS ) +Int -36 ) : ( 167 : ( selector ( "testInfiniteGas()" ) : .WordStack ) ) ) ) ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x9fsS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x9fsS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - ... - ... - - 5 - - - ( 9079256848778917021 => #gas ( ??_VCALLGAS ) ) - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - - ( #end EVMC_REVERT => #halt ) - ~> #pc [ REVERT ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - ( _STATUSCODE => EVMC_REVERT ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"c\xfe\xc36" - - - 0 - - - ( 428 : ( ( ( ?_VGAS:Int +Int ?_VCALLGAS:Int ) +Int -127 ) : ( 583 : ( 928 : ( 345 : ( ( ( ?_VGAS:Int +Int ?_VCALLGAS:Int ) +Int -36 ) : ( 167 : ( selector ( "testInfiniteGas()" ) : .WordStack ) ) ) ) ) ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x9fsS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 5 - - - #gas ( ?_VCALLGAS:Int ) - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - - #halt - ~> ( #pc [ REVERT ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"c\xfe\xc36" - - - 0 - - - ( 428 : ( ( ( ?_VGAS:Int +Int ?_VCALLGAS:Int ) +Int -127 ) : ( 583 : ( 928 : ( 345 : ( ( ( ?_VGAS:Int +Int ?_VCALLGAS:Int ) +Int -36 ) : ( 167 : ( selector ( "testInfiniteGas()" ) : .WordStack ) ) ) ) ) ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x9fsS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 5 - - - #gas ( ?_VCALLGAS:Int ) - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int maxUInt256 -Int N - requires #rangeUInt(256, N) - [simplification] - - rule [foundry-sum-to-n-loop-invariant]: - - - ((JUMPI 1569 CONDITION) => JUMP 1569) - ~> #pc [ JUMPI ] - ~> #execute - ... - - - NORMAL - - - LONDON - - - - - - PROGRAM - - - JUMPDESTS - - - (S => (S +Int ((N *Int (N +Int 1)) /Int 2))) - : 0 - : (N => 0) - : 334 - : 2123244496 - : .WordStack - - - 1539 - - - GAS_AMT:Int => GAS_AMT -Int (N *Int 178) - - ... - - ... - - ... - - ... - - - requires 0 =Int N *Int 178 - andBool CONDITION ==K bool2Word ( N:Int ==Int 0 ) - andBool PROGRAM ==K #binRuntime(S2KLoopsTest) - andBool JUMPDESTS ==K #computeValidJumpDests(#binRuntime(S2KLoopsTest)) - [priority(40)] - -endmodule diff --git a/kevm-pyk/src/tests/integration/test-data/show/AssertTest.testFail_assert_false().expected b/kevm-pyk/src/tests/integration/test-data/show/AssertTest.testFail_assert_false().expected deleted file mode 100644 index 1f84f8143d..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/show/AssertTest.testFail_assert_false().expected +++ /dev/null @@ -1,681 +0,0 @@ - -┌─ 1 (root, init) -│ k: #execute ~> CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ -│ (407 steps) -├─ 3 -│ k: #end EVMC_REVERT ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -│ pc: 1249 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #halt ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -│ pc: 1249 -│ callDepth: 0 -│ statusCode: EVMC_REVERT -│ -│ (2 steps) -├─ 5 (terminal) -│ k: #halt ~> CONTINUATION:K -│ pc: 1249 -│ callDepth: 0 -│ statusCode: EVMC_REVERT -│ -┊ constraint: true -┊ subst: OMITTED SUBST -└─ 2 (leaf, target) - k: #halt ~> CONTINUATION - pc: PC_CELL_5d410f2a - callDepth: CALLDEPTH_CELL_5d410f2a - statusCode: STATUSCODE_FINAL - - - - - - - rule [BASIC-BLOCK-1-TO-3]: - - - ( #execute - ~> CONTINUATION => #end EVMC_REVERT - ~> #pc [ REVERT ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( S2KAssertTest . S2KtestFailZUndassertZUndfalse ( ) => b"z\xa9\xcc\xae" ) - - - 0 - - - ( .WordStack => ( 495 : ( 250 : ( selector ( "testFail_assert_false()" ) : .WordStack ) ) ) ) - - - ( .Bytes => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - ( 0 => 3 ) - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID - andBool ( CALLER_ID - - - ( #end EVMC_REVERT => #halt ) - ~> #pc [ REVERT ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - ( _STATUSCODE => EVMC_REVERT ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"z\xa9\xcc\xae" - - - 0 - - - ( 495 : ( 250 : ( selector ( "testFail_assert_false()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - - #halt - ~> ( #pc [ REVERT ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"z\xa9\xcc\xae" - - - 0 - - - ( 495 : ( 250 : ( selector ( "testFail_assert_false()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ -│ (303 steps) -├─ 3 -│ k: #end EVMC_SUCCESS ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 251 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #halt ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 251 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ -│ (2 steps) -└─ 5 (leaf, terminal) - k: #halt ~> CONTINUATION:K - pc: 251 - callDepth: 0 - statusCode: EVMC_SUCCESS - - -┌─ 2 (root, leaf, target) -│ k: #halt ~> CONTINUATION -│ pc: PC_CELL_5d410f2a -│ callDepth: CALLDEPTH_CELL_5d410f2a -│ statusCode: STATUSCODE_FINAL - - -Node 5: - -( - - - - #halt - ~> CONTINUATION:K - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x18g]B" - - - 0 - - - ( selector ( "testFail_assert_true()" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - - .Map - - - .Map - - - 0 - - ... - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - - .Map - - - .Map - - - 1 - - ... - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - ... - -#And ( { true #Equals 0 <=Int CALLER_ID:Int } -#And ( { true #Equals 0 <=Int ORIGIN_ID:Int } -#And ( { true #Equals 0 <=Int NUMBER_CELL:Int } -#And ( { true #Equals CALLER_ID:Int - - - ( #execute - ~> CONTINUATION => #end EVMC_SUCCESS - ~> #pc [ STOP ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( S2KAssertTest . S2KtestFailZUndassertZUndtrue ( ) => b"\x18g]B" ) - - - 0 - - - ( .WordStack => ( selector ( "testFail_assert_true()" ) : .WordStack ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - ( 0 => 3 ) - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID - andBool ( CALLER_ID - - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ STOP ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x18g]B" - - - 0 - - - ( selector ( "testFail_assert_true()" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - - #halt - ~> ( #pc [ STOP ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x18g]B" - - - 0 - - - ( selector ( "testFail_assert_true()" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ -│ (588 steps) -├─ 3 -│ k: CALL 9223372036854772878 645326474426547203313410069153905908525362434349 0 128 ... -│ pc: 576 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #checkCall 728815563385977040452943777879061427756277306518 0 ~> #call 728815563 ... -│ pc: 576 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (212 steps) -├─ 5 -│ k: #end EVMC_REVERT ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -│ pc: 1249 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 6 -│ k: #halt ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -│ pc: 1249 -│ callDepth: 0 -│ statusCode: EVMC_REVERT -│ -│ (5 steps) -└─ 7 (leaf, terminal) - k: #halt ~> CONTINUATION:K - pc: 1249 - callDepth: 0 - statusCode: EVMC_SUCCESS - - -┌─ 2 (root, leaf, target) -│ k: #halt ~> CONTINUATION -│ pc: PC_CELL_5d410f2a -│ callDepth: CALLDEPTH_CELL_5d410f2a -│ statusCode: STATUSCODE_FINAL - - -Node 7: - -( - - - - #halt - ~> CONTINUATION:K - - - NORMAL - - - LONDON - - - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - EVMC_SUCCESS - - - .List - - - .List - - - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"*M\xe1\xa1" - - - 0 - - - ( 495 : ( 250 : ( selector ( "testFail_expect_revert()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x84H\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - 5 - - - 9079256848778916954 - - - false - - - 0 - - ... - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - - .Map - - - .Map - - - 0 - - ... - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - - .Map - - - .Map - - - 1 - - ... - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - - b"" - - - 0 - - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - ... - -#And ( { true #Equals 0 <=Int CALLER_ID:Int } -#And ( { true #Equals 0 <=Int ORIGIN_ID:Int } -#And ( { true #Equals 0 <=Int NUMBER_CELL:Int } -#And ( { true #Equals CALLER_ID:Int - - - ( #execute - ~> CONTINUATION => CALL 9223372036854772878 645326474426547203313410069153905908525362434349 0 128 4 128 0 - ~> #pc [ CALL ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( S2KAssertTest . S2KtestFailZUndexpectZUndrevert ( ) => b"*M\xe1\xa1" ) - - - 0 - - - ( .WordStack => ( 132 : ( selector ( "expectRevert()" ) : ( 645326474426547203313410069153905908525362434349 : ( 250 : ( selector ( "testFail_expect_revert()" ) : .WordStack ) ) ) ) ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x84H\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - ... - ... - - ( 0 => 5 ) - - - ( _CALLGAS_CELL => 9079256848778916954 ) - - - false - - - 0 - - - - - .List - - - ( .Set => SetItem ( 645326474426547203313410069153905908525362434349 ) ) - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID - andBool ( CALLER_ID - - - ( CALL 9223372036854772878 645326474426547203313410069153905908525362434349 0 128 4 128 0 => #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"\xf4\x84H\x14" false - ~> #return 128 0 ) - ~> #pc [ CALL ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"*M\xe1\xa1" - - - 0 - - - ( 132 : ( selector ( "expectRevert()" ) : ( 645326474426547203313410069153905908525362434349 : ( 250 : ( selector ( "testFail_expect_revert()" ) : .WordStack ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x84H\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 5 - - - 9079256848778916954 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - - ( #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"\xf4\x84H\x14" false - ~> #return 128 0 - ~> #pc [ CALL ] => #end EVMC_REVERT - ~> #pc [ REVERT ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"*M\xe1\xa1" - - - 0 - - - ( ( 132 => 495 ) : ( ( selector ( "expectRevert()" ) => 250 ) : ( ( 645326474426547203313410069153905908525362434349 => selector ( "testFail_expect_revert()" ) ) : ( ( 250 : ( selector ( "testFail_expect_revert()" ) : .WordStack ) ) => .WordStack ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x84H\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x84H\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - ... - ... - - 5 - - - 9079256848778916954 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - ( false => true ) - - - ( _EXPECTEDREASON_CELL => b"" ) - - - ( _EXPECTEDDEPTH_CELL => 1 ) - - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - - ( #end EVMC_REVERT => #halt ) - ~> #pc [ REVERT ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - ( _STATUSCODE => EVMC_REVERT ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"*M\xe1\xa1" - - - 0 - - - ( 495 : ( 250 : ( selector ( "testFail_expect_revert()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x84H\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 5 - - - 9079256848778916954 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - true - - - b"" - - - 1 - - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - - #halt - ~> ( #pc [ REVERT ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - - ( EVMC_REVERT => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"*M\xe1\xa1" - - - 0 - - - ( 495 : ( 250 : ( selector ( "testFail_expect_revert()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x84H\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 5 - - - 9079256848778916954 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - ( true => false ) - - - b"" - - - ( 1 => 0 ) - - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ -│ (376 steps) -├─ 3 -│ k: #end EVMC_REVERT ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -│ pc: 1249 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #halt ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -│ pc: 1249 -│ callDepth: 0 -│ statusCode: EVMC_REVERT -│ -│ (2 steps) -└─ 5 (leaf, terminal) - k: #halt ~> CONTINUATION:K - pc: 1249 - callDepth: 0 - statusCode: EVMC_REVERT - - -┌─ 2 (root, leaf, target) -│ k: #halt ~> CONTINUATION -│ pc: PC_CELL_5d410f2a -│ callDepth: CALLDEPTH_CELL_5d410f2a -│ statusCode: STATUSCODE_FINAL - - -Node 5: - -( - - - - #halt - ~> CONTINUATION:K - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"]\xde\xcb\xfd" - - - 0 - - - ( 495 : ( 250 : ( selector ( "test_assert_false()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - - .Map - - - .Map - - - 0 - - ... - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - - .Map - - - .Map - - - 1 - - ... - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - ... - -#And ( { true #Equals 0 <=Int CALLER_ID:Int } -#And ( { true #Equals 0 <=Int ORIGIN_ID:Int } -#And ( { true #Equals 0 <=Int NUMBER_CELL:Int } -#And ( { true #Equals CALLER_ID:Int - - - ( #execute - ~> CONTINUATION => #end EVMC_REVERT - ~> #pc [ REVERT ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( S2KAssertTest . S2KtestZUndassertZUndfalse ( ) => b"]\xde\xcb\xfd" ) - - - 0 - - - ( .WordStack => ( 495 : ( 250 : ( selector ( "test_assert_false()" ) : .WordStack ) ) ) ) - - - ( .Bytes => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - ( 0 => 3 ) - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID - andBool ( CALLER_ID - - - ( #end EVMC_REVERT => #halt ) - ~> #pc [ REVERT ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - ( _STATUSCODE => EVMC_REVERT ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"]\xde\xcb\xfd" - - - 0 - - - ( 495 : ( 250 : ( selector ( "test_assert_false()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - - #halt - ~> ( #pc [ REVERT ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"]\xde\xcb\xfd" - - - 0 - - - ( 495 : ( 250 : ( selector ( "test_assert_false()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ -│ (258 steps) -├─ 3 -│ k: #end EVMC_SUCCESS ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 251 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #halt ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 251 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ -│ (2 steps) -├─ 5 (terminal) -│ k: #halt ~> CONTINUATION:K -│ pc: 251 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ -┊ constraint: true -┊ subst: OMITTED SUBST -└─ 2 (leaf, target) - k: #halt ~> CONTINUATION - pc: PC_CELL_5d410f2a - callDepth: CALLDEPTH_CELL_5d410f2a - statusCode: STATUSCODE_FINAL - - - - - - - rule [BASIC-BLOCK-1-TO-3]: - - - ( #execute - ~> CONTINUATION => #end EVMC_SUCCESS - ~> #pc [ STOP ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( S2KAssertTest . S2KtestZUndassertZUndtrue ( ) => b"6\r\xa4\xd2" ) - - - 0 - - - ( .WordStack => ( selector ( "test_assert_true()" ) : .WordStack ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - ( 0 => 3 ) - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID - andBool ( CALLER_ID - - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ STOP ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"6\r\xa4\xd2" - - - 0 - - - ( selector ( "test_assert_true()" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - - #halt - ~> ( #pc [ STOP ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"6\r\xa4\xd2" - - - 0 - - - ( selector ( "test_assert_true()" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ -│ (574 steps) -├─ 3 (split) -│ k: JUMPI 766 bool2Word ( 100 <=Int VV0_x_114b9705:Int ) ~> #pc [ JUMPI ] ~> #execut ... -│ pc: 778 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -┃ -┃ (branch) -┣━━┓ constraint: { true #Equals 100 <=Int VV0_x_114b9705:Int } -┃ │ -┃ ├─ 4 -┃ │ k: JUMPI 766 bool2Word ( 100 <=Int VV0_x_114b9705:Int ) ~> #pc [ JUMPI ] ~> #execut ... -┃ │ pc: 778 -┃ │ callDepth: 0 -┃ │ statusCode: STATUSCODE:StatusCode -┃ │ -┃ │ (64 steps) -┃ ├─ 6 -┃ │ k: #end EVMC_SUCCESS ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -┃ │ pc: 251 -┃ │ callDepth: 0 -┃ │ statusCode: STATUSCODE:StatusCode -┃ │ -┃ │ (1 step) -┃ ├─ 8 -┃ │ k: #halt ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -┃ │ pc: 251 -┃ │ callDepth: 0 -┃ │ statusCode: EVMC_SUCCESS -┃ │ -┃ │ (2 steps) -┃ ├─ 10 (terminal) -┃ │ k: #halt ~> CONTINUATION:K -┃ │ pc: 251 -┃ │ callDepth: 0 -┃ │ statusCode: EVMC_SUCCESS -┃ │ -┃ ┊ constraint: true -┃ ┊ subst: OMITTED SUBST -┃ └─ 2 (leaf, target) -┃ k: #halt ~> CONTINUATION -┃ pc: PC_CELL_5d410f2a -┃ callDepth: CALLDEPTH_CELL_5d410f2a -┃ statusCode: STATUSCODE_FINAL -┃ -┗━━┓ constraint: { true #Equals ( notBool 100 <=Int VV0_x_114b9705:Int ) } - │ - ├─ 5 - │ k: JUMPI 766 bool2Word ( 100 <=Int VV0_x_114b9705:Int ) ~> #pc [ JUMPI ] ~> #execut ... - │ pc: 778 - │ callDepth: 0 - │ statusCode: STATUSCODE:StatusCode - │ - │ (102 steps) - ├─ 7 - │ k: #end EVMC_REVERT ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K - │ pc: 1249 - │ callDepth: 0 - │ statusCode: STATUSCODE:StatusCode - │ - │ (1 step) - ├─ 9 - │ k: #halt ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K - │ pc: 1249 - │ callDepth: 0 - │ statusCode: EVMC_REVERT - │ - │ (2 steps) - └─ 11 (leaf, terminal) - k: #halt ~> CONTINUATION:K - pc: 1249 - callDepth: 0 - statusCode: EVMC_REVERT - - - -Node 11: - -( - - - - #halt - ~> CONTINUATION:K - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) - - - 0 - - - ( 766 : ( VV0_x_114b9705:Int : ( 250 : ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - - .Map - - - .Map - - - 0 - - ... - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - - .Map - - - .Map - - - 1 - - ... - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - ... - -#And ( { true #Equals 0 <=Int CALLER_ID:Int } -#And ( { true #Equals 0 <=Int ORIGIN_ID:Int } -#And ( { true #Equals 0 <=Int NUMBER_CELL:Int } -#And ( { true #Equals 0 <=Int VV0_x_114b9705:Int } -#And ( { true #Equals VV0_x_114b9705:Int - - - ( #execute - ~> CONTINUATION => JUMPI 766 bool2Word ( 100 <=Int VV0_x_114b9705:Int ) - ~> #pc [ JUMPI ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( S2KAssertTest . S2KtestZUndfailingZUndbranch ( VV0_x_114b9705 : uint256 ) => b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) ) - - - 0 - - - ( .WordStack => ( VV0_x_114b9705:Int : ( 250 : ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) ) ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - ( 0 => 3 ) - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int VV0_x_114b9705:Int - andBool ( VV0_x_114b9705:Int - - - ( JUMPI 766 bool2Word ( 100 <=Int VV0_x_114b9705:Int ) - ~> #pc [ JUMPI ] => #end EVMC_SUCCESS - ~> #pc [ STOP ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) - - - 0 - - - ( ( VV0_x_114b9705:Int => selector ( "test_failing_branch(uint256)" ) ) : ( ( 250 : ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) ) => .WordStack ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 100 <=Int VV0_x_114b9705:Int - andBool ( CALLER_ID:Int - - - ( JUMPI 766 bool2Word ( 100 <=Int VV0_x_114b9705:Int ) - ~> #pc [ JUMPI ] => #end EVMC_REVERT - ~> #pc [ REVERT ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) - - - 0 - - - ( ( VV0_x_114b9705:Int => 766 ) : ( ( 250 => VV0_x_114b9705:Int ) : ( ( selector ( "test_failing_branch(uint256)" ) => 250 ) : ( .WordStack => ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ STOP ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) - - - 0 - - - ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 100 <=Int VV0_x_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #end EVMC_REVERT => #halt ) - ~> #pc [ REVERT ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - ( _STATUSCODE => EVMC_REVERT ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) - - - 0 - - - ( 766 : ( VV0_x_114b9705:Int : ( 250 : ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( VV0_x_114b9705:Int - - - #halt - ~> ( #pc [ STOP ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) - - - 0 - - - ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 100 <=Int VV0_x_114b9705:Int - andBool ( CALLER_ID:Int - - - #halt - ~> ( #pc [ REVERT ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) - - - 0 - - - ( 766 : ( VV0_x_114b9705:Int : ( 250 : ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( VV0_x_114b9705:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ -│ (580 steps) -├─ 3 (split) -│ k: JUMPI 806 bool2Word ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int ) ~> #pc [ JUM ... -│ pc: 802 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -┃ -┃ (branch) -┣━━┓ constraint: { true #Equals VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int } -┃ │ -┃ ├─ 4 -┃ │ k: JUMPI 806 bool2Word ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int ) ~> #pc [ JUM ... -┃ │ pc: 802 -┃ │ callDepth: 0 -┃ │ statusCode: STATUSCODE:StatusCode -┃ │ -┃ │ (116 steps) -┃ ├─ 6 -┃ │ k: #end EVMC_REVERT ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -┃ │ pc: 1249 -┃ │ callDepth: 0 -┃ │ statusCode: STATUSCODE:StatusCode -┃ │ -┃ │ (1 step) -┃ ├─ 8 -┃ │ k: #halt ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -┃ │ pc: 1249 -┃ │ callDepth: 0 -┃ │ statusCode: EVMC_REVERT -┃ │ -┃ │ (2 steps) -┃ └─ 10 (leaf, terminal) -┃ k: #halt ~> CONTINUATION:K -┃ pc: 1249 -┃ callDepth: 0 -┃ statusCode: EVMC_REVERT -┃ -┗━━┓ constraint: { true #Equals ( notBool VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int ) } - │ - ├─ 5 - │ k: JUMPI 806 bool2Word ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int ) ~> #pc [ JUM ... - │ pc: 802 - │ callDepth: 0 - │ statusCode: STATUSCODE:StatusCode - │ - │ (62 steps) - ├─ 7 - │ k: #end EVMC_SUCCESS ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K - │ pc: 251 - │ callDepth: 0 - │ statusCode: STATUSCODE:StatusCode - │ - │ (1 step) - ├─ 9 - │ k: #halt ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K - │ pc: 251 - │ callDepth: 0 - │ statusCode: EVMC_SUCCESS - │ - │ (2 steps) - ├─ 11 (terminal) - │ k: #halt ~> CONTINUATION:K - │ pc: 251 - │ callDepth: 0 - │ statusCode: EVMC_SUCCESS - │ - ┊ constraint: true - ┊ subst: OMITTED SUBST - └─ 2 (leaf, target) - k: #halt ~> CONTINUATION - pc: PC_CELL_5d410f2a - callDepth: CALLDEPTH_CELL_5d410f2a - statusCode: STATUSCODE_FINAL - - - -Node 10: - -( - - - - #halt - ~> CONTINUATION:K - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) - - - 0 - - - ( 814 : ( VV1_y_114b9705:Int : ( VV0_x_114b9705:Int : ( 250 : ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) ) ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - - .Map - - - .Map - - - 0 - - ... - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - - .Map - - - .Map - - - 1 - - ... - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - ... - -#And ( { true #Equals 0 <=Int CALLER_ID:Int } -#And ( { true #Equals 0 <=Int ORIGIN_ID:Int } -#And ( { true #Equals 0 <=Int NUMBER_CELL:Int } -#And ( { true #Equals 0 <=Int VV0_x_114b9705:Int } -#And ( { true #Equals 0 <=Int VV1_y_114b9705:Int } -#And ( { true #Equals VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int } -#And ( { true #Equals CALLER_ID:Int - - - ( #execute - ~> CONTINUATION => JUMPI 806 bool2Word ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int ) - ~> #pc [ JUMPI ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( S2KAssertTest . S2KtestZUndrevertZUndbranch ( VV0_x_114b9705 : uint256 , VV1_y_114b9705 : uint256 ) => b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) ) - - - 0 - - - ( .WordStack => ( VV1_y_114b9705:Int : ( VV0_x_114b9705:Int : ( 250 : ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) ) ) ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - ( 0 => 3 ) - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int VV0_x_114b9705:Int - andBool ( 0 <=Int VV1_y_114b9705:Int - andBool ( VV0_x_114b9705:Int - - - ( JUMPI 806 bool2Word ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int ) - ~> #pc [ JUMPI ] => #end EVMC_REVERT - ~> #pc [ REVERT ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) - - - 0 - - - ( ( VV1_y_114b9705:Int => 814 ) : ( ( VV0_x_114b9705:Int => VV1_y_114b9705:Int ) : ( ( 250 => VV0_x_114b9705:Int ) : ( ( selector ( "test_revert_branch(uint256,uint256)" ) => 250 ) : ( .WordStack => ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 0 <=Int VV1_y_114b9705:Int - andBool ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int - andBool ( CALLER_ID:Int - - - ( JUMPI 806 bool2Word ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int ) - ~> #pc [ JUMPI ] => #end EVMC_SUCCESS - ~> #pc [ STOP ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) - - - 0 - - - ( ( VV1_y_114b9705:Int => selector ( "test_revert_branch(uint256,uint256)" ) ) : ( ( VV0_x_114b9705:Int : ( 250 : ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) ) ) => .WordStack ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 0 <=Int VV1_y_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #end EVMC_REVERT => #halt ) - ~> #pc [ REVERT ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - ( _STATUSCODE => EVMC_REVERT ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) - - - 0 - - - ( 814 : ( VV1_y_114b9705:Int : ( VV0_x_114b9705:Int : ( 250 : ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) ) ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 0 <=Int VV1_y_114b9705:Int - andBool ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ STOP ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) - - - 0 - - - ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 0 <=Int VV1_y_114b9705:Int - andBool ( VV0_x_114b9705:Int - - - #halt - ~> ( #pc [ REVERT ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) - - - 0 - - - ( 814 : ( VV1_y_114b9705:Int : ( VV0_x_114b9705:Int : ( 250 : ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) ) ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 0 <=Int VV1_y_114b9705:Int - andBool ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int - andBool ( CALLER_ID:Int - - - #halt - ~> ( #pc [ STOP ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) - - - 0 - - - ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 0 <=Int VV1_y_114b9705:Int - andBool ( VV0_x_114b9705:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ -│ (919 steps) -├─ 3 -│ k: CALL 9223372036854772734 645326474426547203313410069153905908525362434349 0 128 ... -│ pc: 424 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #checkCall 728815563385977040452943777879061427756277306518 0 ~> #call 728815563 ... -│ pc: 424 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (299 steps) -├─ 5 -│ k: #end EVMC_SUCCESS ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 183 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 6 -│ k: #halt ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 183 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ -│ (2 steps) -└─ 7 (leaf, terminal) - k: #halt ~> CONTINUATION:K - pc: 183 - callDepth: 0 - statusCode: EVMC_SUCCESS - - -┌─ 2 (root, leaf, target) -│ k: #halt ~> CONTINUATION -│ pc: PC_CELL_5d410f2a -│ callDepth: CALLDEPTH_CELL_5d410f2a -│ statusCode: STATUSCODE_FINAL - - -Node 7: - -( - - - - #halt - ~> CONTINUATION:K - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"_.p\xfb" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "testFail_assume_false(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - 6 - - - 9079256848778916812 - - - false - - - 0 - - ... - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - - .Map - - - .Map - - - 0 - - ... - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - - .Map - - - .Map - - - 1 - - ... - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - ... - -#And ( { VV0_a_114b9705:Int #Equals VV1_b_114b9705:Int } -#And ( { true #Equals 0 <=Int CALLER_ID:Int } -#And ( { true #Equals 0 <=Int ORIGIN_ID:Int } -#And ( { true #Equals 0 <=Int NUMBER_CELL:Int } -#And ( { true #Equals 0 <=Int VV1_b_114b9705:Int } -#And ( { true #Equals CALLER_ID:Int - - - ( #execute - ~> CONTINUATION => CALL 9223372036854772734 645326474426547203313410069153905908525362434349 0 128 36 128 0 - ~> #pc [ CALL ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( S2KAssumeTest . S2KtestFailZUndassumeZUndfalse ( VV0_a_114b9705 : uint256 , VV1_b_114b9705 : uint256 ) => b"_.p\xfb" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) ) - - - 0 - - - ( .WordStack => ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) - - ... - ... - - ( 0 => 6 ) - - - ( _CALLGAS_CELL => 9079256848778916812 ) - - - false - - - 0 - - - - - .List - - - ( .Set => SetItem ( 645326474426547203313410069153905908525362434349 ) ) - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( VV0_a_114b9705:Int - - - ( CALL 9223372036854772734 645326474426547203313410069153905908525362434349 0 128 36 128 0 => #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) false - ~> #return 128 0 ) - ~> #pc [ CALL ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"_.p\xfb" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) - - ... - ... - - 6 - - - 9079256848778916812 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) false - ~> #return 128 0 - ~> #pc [ CALL ] => #end EVMC_SUCCESS - ~> #pc [ STOP ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"_.p\xfb" +Bytes #buf ( 32 , ( VV0_a_114b9705:Int => VV1_b_114b9705:Int ) ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 164 => selector ( "testFail_assume_false(uint256,uint256)" ) ) : ( ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) => .WordStack ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - ... - ... - - 6 - - - 9079256848778916812 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ STOP ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"_.p\xfb" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "testFail_assume_false(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - ... - ... - - 6 - - - 9079256848778916812 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( _VV0_a_114b9705 ==K VV1_b_114b9705:Int - andBool ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - #halt - ~> ( #pc [ STOP ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"_.p\xfb" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "testFail_assume_false(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - ... - ... - - 6 - - - 9079256848778916812 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( _VV0_a_114b9705 ==K VV1_b_114b9705:Int - andBool ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ -│ (824 steps) -├─ 3 -│ k: CALL 9223372036854772808 645326474426547203313410069153905908525362434349 0 128 ... -│ pc: 424 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #checkCall 728815563385977040452943777879061427756277306518 0 ~> #call 728815563 ... -│ pc: 424 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1000 steps) -├─ 5 -│ k: #gas [ MSTORE , MSTORE 192 46308022326495007027972728677917914892729792999299745 ... -│ pc: 2271 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1000 steps) -├─ 6 -│ k: #gasExec ( LONDON , JUMP 2621 ) ~> #deductGas ~> #access [ JUMP , JUMP 2621 ] ~> ... -│ pc: 2691 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (819 steps) -├─ 7 -│ k: CALL 9223372036854765663 645326474426547203313410069153905908525362434349 0 388 ... -│ pc: 2389 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 8 -│ k: #checkCall 728815563385977040452943777879061427756277306518 0 ~> #call 728815563 ... -│ pc: 2389 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (387 steps) -├─ 9 -│ k: #end EVMC_SUCCESS ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 183 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 10 -│ k: #halt ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 183 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ -│ (2 steps) -├─ 11 (terminal) -│ k: #halt ~> CONTINUATION:K -│ pc: 183 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ -┊ constraint: true -┊ subst: OMITTED SUBST -└─ 2 (leaf, target) - k: #halt ~> CONTINUATION - pc: PC_CELL_5d410f2a - callDepth: CALLDEPTH_CELL_5d410f2a - statusCode: STATUSCODE_FINAL - - - - - - - rule [BASIC-BLOCK-1-TO-3]: - - - ( #execute - ~> CONTINUATION => CALL 9223372036854772808 645326474426547203313410069153905908525362434349 0 128 36 128 0 - ~> #pc [ CALL ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( S2KAssumeTest . S2KtestFailZUndassumeZUndtrue ( VV0_a_114b9705 : uint256 , VV1_b_114b9705 : uint256 ) => b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) ) - - - 0 - - - ( .WordStack => ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) ) - - ... - ... - - ( 0 => 6 ) - - - ( _CALLGAS_CELL => 9079256848778916885 ) - - - false - - - 0 - - - - - .List - - - ( .Set => SetItem ( 645326474426547203313410069153905908525362434349 ) ) - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( VV0_a_114b9705:Int - - - ( CALL 9223372036854772808 645326474426547203313410069153905908525362434349 0 128 36 128 0 => #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) false - ~> #return 128 0 ) - ~> #pc [ CALL ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) - - ... - ... - - 6 - - - 9079256848778916885 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) false - ~> #return 128 0 - ~> #pc [ CALL ] => #gas [ MSTORE , MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 ] - ~> MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 - ~> #pc [ MSTORE ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 164 => 128 ) : ( ( selector ( "assume(bool)" ) => 645326474426547203313410069153905908525362434349 ) : ( ( 645326474426547203313410069153905908525362434349 => 455 ) : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( ( 182 => 455 ) : ( ( selector ( "testFail_assume_true(uint256,uint256)" ) => VV1_b_114b9705:Int ) : ( .WordStack => ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - ... - ... - - ( 6 => 8 ) - - - 9079256848778916885 - - - false - - - 0 - - - - - ( .List => ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Left\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #gas [ MSTORE , MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 ] - ~> MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 - ~> #pc [ MSTORE ] => #gasExec ( LONDON , JUMP 2621 ) - ~> #deductGas - ~> #access [ JUMP , JUMP 2621 ] - ~> JUMP 2621 - ~> #pc [ JUMP ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 128 => 256 ) : ( ( 645326474426547203313410069153905908525362434349 => 388 ) : ( ( 455 => 2540 ) : ( ( VV1_b_114b9705:Int => 0 ) : ( ( VV0_a_114b9705:Int => 388 ) : ( ( 455 => 256 ) : ( ( VV1_b_114b9705:Int => 2375 ) : ( ( VV0_a_114b9705:Int => 645326474426547203313410069153905908525362434349 ) : ( ( 182 => 0 ) : ( ( selector ( "testFail_assume_true(uint256,uint256)" ) => 455 ) : ( .WordStack => ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - ... - ... - - ( 8 => 13 ) - - - 9079256848778916885 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Left\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #gasExec ( LONDON , JUMP 2621 ) - ~> #deductGas - ~> #access [ JUMP , JUMP 2621 ] - ~> JUMP 2621 - ~> #pc [ JUMP ] => CALL 9223372036854765663 645326474426547203313410069153905908525362434349 0 388 100 388 0 - ~> #pc [ CALL ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 256 => 488 ) : ( ( 388 => 645326474426547203313410069153905908525362434349 ) : ( ( 2540 => 0 ) : ( ( 0 => 455 ) : ( ( 388 => VV1_b_114b9705:Int ) : ( ( 256 => VV0_a_114b9705:Int ) : ( ( 2375 => 455 ) : ( ( 645326474426547203313410069153905908525362434349 => VV1_b_114b9705:Int ) : ( ( 0 => VV0_a_114b9705:Int ) : ( ( 455 => 182 ) : ( ( VV1_b_114b9705:Int => selector ( "testFail_assume_true(uint256,uint256)" ) ) : ( ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) => .WordStack ) ) ) ) ) ) ) ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - ... - ... - - ( 13 => 17 ) - - - ( 9079256848778916885 => 9079256848778909852 ) - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Left\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - ( CALL 9223372036854765663 645326474426547203313410069153905908525362434349 0 388 100 388 0 => #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" false - ~> #return 388 0 ) - ~> #pc [ CALL ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( 488 : ( 645326474426547203313410069153905908525362434349 : ( 0 : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909852 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Left\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" false - ~> #return 388 0 - ~> #pc [ CALL ] => #end EVMC_SUCCESS - ~> #pc [ STOP ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 488 => selector ( "testFail_assume_true(uint256,uint256)" ) ) : ( ( 645326474426547203313410069153905908525362434349 : ( 0 : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) => .WordStack ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909852 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Left\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - ( .Map => ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 0 ) ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - ( .Map => ( 46308022326495007027972728677917914892729792999299745830475596687180801507328 |-> 1 ) ) - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( .Map => ( 0 |-> 256 ) ) - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ STOP ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909852 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Left\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 0 ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - ( 46308022326495007027972728677917914892729792999299745830475596687180801507328 |-> 1 ) - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( 0 |-> 256 ) - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - #halt - ~> ( #pc [ STOP ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909852 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Left\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 0 ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - ( 46308022326495007027972728677917914892729792999299745830475596687180801507328 |-> 1 ) - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( 0 |-> 256 ) - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ -│ (872 steps) -├─ 3 -│ k: CALL 9223372036854772765 645326474426547203313410069153905908525362434349 0 128 ... -│ pc: 424 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #checkCall 728815563385977040452943777879061427756277306518 0 ~> #call 728815563 ... -│ pc: 424 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1000 steps) -├─ 5 -│ k: #gas [ MSTORE , MSTORE 192 46308022326495007027972728677917914892729792999299745 ... -│ pc: 2271 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1000 steps) -├─ 6 -│ k: #gasExec ( LONDON , JUMP 2621 ) ~> #deductGas ~> #access [ JUMP , JUMP 2621 ] ~> ... -│ pc: 2691 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (819 steps) -├─ 7 -│ k: CALL 9223372036854765620 645326474426547203313410069153905908525362434349 0 388 ... -│ pc: 2389 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 8 -│ k: #checkCall 728815563385977040452943777879061427756277306518 0 ~> #call 728815563 ... -│ pc: 2389 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (387 steps) -├─ 9 -│ k: #end EVMC_SUCCESS ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 183 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 10 -│ k: #halt ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 183 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ -│ (2 steps) -└─ 11 (leaf, terminal) - k: #halt ~> CONTINUATION:K - pc: 183 - callDepth: 0 - statusCode: EVMC_SUCCESS - - -┌─ 2 (root, leaf, target) -│ k: #halt ~> CONTINUATION -│ pc: PC_CELL_5d410f2a -│ callDepth: CALLDEPTH_CELL_5d410f2a -│ statusCode: STATUSCODE_FINAL - - -Node 11: - -( - - - - #halt - ~> CONTINUATION:K - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - 17 - - - 9079256848778909809 - - - false - - - 0 - - ... - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Left\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 0 ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - - ( 46308022326495007027972728677917914892729792999299745830475596687180801507328 |-> 1 ) - - - .Map - - - 0 - - ... - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - - ( 0 |-> 256 ) - - - .Map - - - 1 - - ... - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - ... - -#And ( { true #Equals 0 <=Int CALLER_ID:Int } -#And ( { true #Equals 0 <=Int ORIGIN_ID:Int } -#And ( #Not ( { VV0_a_114b9705:Int #Equals VV1_b_114b9705:Int } ) -#And ( { true #Equals 0 <=Int NUMBER_CELL:Int } -#And ( { true #Equals 0 <=Int VV0_a_114b9705:Int } -#And ( { true #Equals 0 <=Int VV1_b_114b9705:Int } -#And ( { true #Equals CALLER_ID:Int - - - ( #execute - ~> CONTINUATION => CALL 9223372036854772765 645326474426547203313410069153905908525362434349 0 128 36 128 0 - ~> #pc [ CALL ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( S2KAssumeTest . S2KtestZUndassumeZUndfalse ( VV0_a_114b9705 : uint256 , VV1_b_114b9705 : uint256 ) => b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) ) - - - 0 - - - ( .WordStack => ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) ) - - ... - ... - - ( 0 => 6 ) - - - ( _CALLGAS_CELL => 9079256848778916843 ) - - - false - - - 0 - - - - - .List - - - ( .Set => SetItem ( 645326474426547203313410069153905908525362434349 ) ) - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( VV0_a_114b9705:Int - - - ( CALL 9223372036854772765 645326474426547203313410069153905908525362434349 0 128 36 128 0 => #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) false - ~> #return 128 0 ) - ~> #pc [ CALL ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) - - ... - ... - - 6 - - - 9079256848778916843 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) false - ~> #return 128 0 - ~> #pc [ CALL ] => #gas [ MSTORE , MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 ] - ~> MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 - ~> #pc [ MSTORE ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 164 => 128 ) : ( ( selector ( "assume(bool)" ) => 645326474426547203313410069153905908525362434349 ) : ( ( 645326474426547203313410069153905908525362434349 => 455 ) : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( ( 182 => 455 ) : ( ( selector ( "test_assume_false(uint256,uint256)" ) => VV1_b_114b9705:Int ) : ( .WordStack => ( VV0_a_114b9705:Int : ( 182 : ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - ... - ... - - ( 6 => 8 ) - - - 9079256848778916843 - - - false - - - 0 - - - - - ( .List => ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Left\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #gas [ MSTORE , MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 ] - ~> MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 - ~> #pc [ MSTORE ] => #gasExec ( LONDON , JUMP 2621 ) - ~> #deductGas - ~> #access [ JUMP , JUMP 2621 ] - ~> JUMP 2621 - ~> #pc [ JUMP ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 128 => 256 ) : ( ( 645326474426547203313410069153905908525362434349 => 388 ) : ( ( 455 => 2540 ) : ( ( VV1_b_114b9705:Int => 0 ) : ( ( VV0_a_114b9705:Int => 388 ) : ( ( 455 => 256 ) : ( ( VV1_b_114b9705:Int => 2375 ) : ( ( VV0_a_114b9705:Int => 645326474426547203313410069153905908525362434349 ) : ( ( 182 => 0 ) : ( ( selector ( "test_assume_false(uint256,uint256)" ) => 455 ) : ( .WordStack => ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - ... - ... - - ( 8 => 13 ) - - - 9079256848778916843 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Left\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #gasExec ( LONDON , JUMP 2621 ) - ~> #deductGas - ~> #access [ JUMP , JUMP 2621 ] - ~> JUMP 2621 - ~> #pc [ JUMP ] => CALL 9223372036854765620 645326474426547203313410069153905908525362434349 0 388 100 388 0 - ~> #pc [ CALL ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 256 => 488 ) : ( ( 388 => 645326474426547203313410069153905908525362434349 ) : ( ( 2540 => 0 ) : ( ( 0 => 455 ) : ( ( 388 => VV1_b_114b9705:Int ) : ( ( 256 => VV0_a_114b9705:Int ) : ( ( 2375 => 455 ) : ( ( 645326474426547203313410069153905908525362434349 => VV1_b_114b9705:Int ) : ( ( 0 => VV0_a_114b9705:Int ) : ( ( 455 => 182 ) : ( ( VV1_b_114b9705:Int => selector ( "test_assume_false(uint256,uint256)" ) ) : ( ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) => .WordStack ) ) ) ) ) ) ) ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - ... - ... - - ( 13 => 17 ) - - - ( 9079256848778916843 => 9079256848778909809 ) - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Left\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - ( CALL 9223372036854765620 645326474426547203313410069153905908525362434349 0 388 100 388 0 => #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" false - ~> #return 388 0 ) - ~> #pc [ CALL ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( 488 : ( 645326474426547203313410069153905908525362434349 : ( 0 : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909809 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Left\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" false - ~> #return 388 0 - ~> #pc [ CALL ] => #end EVMC_SUCCESS - ~> #pc [ STOP ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 488 => selector ( "test_assume_false(uint256,uint256)" ) ) : ( ( 645326474426547203313410069153905908525362434349 : ( 0 : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) => .WordStack ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909809 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Left\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - ( .Map => ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 0 ) ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - ( .Map => ( 46308022326495007027972728677917914892729792999299745830475596687180801507328 |-> 1 ) ) - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( .Map => ( 0 |-> 256 ) ) - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ STOP ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909809 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Left\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 0 ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - ( 46308022326495007027972728677917914892729792999299745830475596687180801507328 |-> 1 ) - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( 0 |-> 256 ) - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - - #halt - ~> ( #pc [ STOP ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909809 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Left\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Right\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 0 ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - ( 46308022326495007027972728677917914892729792999299745830475596687180801507328 |-> 1 ) - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( 0 |-> 256 ) - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int 1 ) , 46308022326495007027972728677917914892729792999299745830475596687180801507328 ) , revertExpected: false , opcodeExpected: false , recordEventExpected: false , eventExpected: false ) } ) - Path condition: - #Top - Model: - CALLER_ID = 0 - NUMBER_CELL = 0 - ORIGIN_ID = 0 - VV0_a_114b9705 = 1 - VV1_b_114b9705 = 0 - -Join the Runtime Verification Discord server for support: https://discord.com/invite/CurfmXNtbN - -Access documentation for KEVM foundry integration at https://docs.runtimeverification.com/kevm-integration-for-foundry/ diff --git a/kevm-pyk/src/tests/integration/test-data/show/LoopsTest.sum_N(uint256).expected b/kevm-pyk/src/tests/integration/test-data/show/LoopsTest.sum_N(uint256).expected deleted file mode 100644 index bc91ceb815..0000000000 --- a/kevm-pyk/src/tests/integration/test-data/show/LoopsTest.sum_N(uint256).expected +++ /dev/null @@ -1,2106 +0,0 @@ - -┌─ 1 (root, init) -│ k: #execute ~> CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ -│ (776 steps) -├─ 3 -│ k: CALL 9223372036854772793 645326474426547203313410069153905908525362434349 0 128 ... -│ pc: 1509 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #checkCall 728815563385977040452943777879061427756277306518 0 ~> #call 728815563 ... -│ pc: 1509 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (153 steps) -├─ 5 (split) -│ k: JUMPI 1569 bool2Word ( VV0_n_114b9705:Int ==Int 0 ) ~> #pc [ JUMPI ] ~> #execute ... -│ pc: 1539 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -┃ -┃ (branch) -┣━━┓ constraint: { true #Equals VV0_n_114b9705:Int ==Int 0 } -┃ │ -┃ ├─ 6 -┃ │ k: JUMPI 1569 bool2Word ( VV0_n_114b9705:Int ==Int 0 ) ~> #pc [ JUMPI ] ~> #execute ... -┃ │ pc: 1539 -┃ │ callDepth: 0 -┃ │ statusCode: STATUSCODE:StatusCode -┃ │ -┃ │ (162 steps) -┃ ├─ 8 -┃ │ k: #end EVMC_SUCCESS ~> #pc [ RETURN ] ~> #execute ~> CONTINUATION:K -┃ │ pc: 352 -┃ │ callDepth: 0 -┃ │ statusCode: STATUSCODE:StatusCode -┃ │ -┃ │ (1 step) -┃ ├─ 10 -┃ │ k: #halt ~> #pc [ RETURN ] ~> #execute ~> CONTINUATION:K -┃ │ pc: 352 -┃ │ callDepth: 0 -┃ │ statusCode: EVMC_SUCCESS -┃ │ -┃ │ (2 steps) -┃ ├─ 12 (terminal) -┃ │ k: #halt ~> CONTINUATION:K -┃ │ pc: 352 -┃ │ callDepth: 0 -┃ │ statusCode: EVMC_SUCCESS -┃ │ -┃ ┊ constraint: true -┃ ┊ subst: OMITTED SUBST -┃ └─ 2 (leaf, target) -┃ k: #halt ~> CONTINUATION -┃ pc: PC_CELL_5d410f2a -┃ callDepth: CALLDEPTH_CELL_5d410f2a -┃ statusCode: STATUSCODE_FINAL -┃ -┗━━┓ constraint: { true #Equals ( notBool VV0_n_114b9705:Int ==Int 0 ) } - │ - ├─ 7 - │ k: JUMPI 1569 bool2Word ( VV0_n_114b9705:Int ==Int 0 ) ~> #pc [ JUMPI ] ~> #execute ... - │ pc: 1539 - │ callDepth: 0 - │ statusCode: STATUSCODE:StatusCode - │ - │ (162 steps) - ├─ 9 - │ k: #end EVMC_SUCCESS ~> #pc [ RETURN ] ~> #execute ~> CONTINUATION:K - │ pc: 352 - │ callDepth: 0 - │ statusCode: STATUSCODE:StatusCode - │ - │ (1 step) - ├─ 11 - │ k: #halt ~> #pc [ RETURN ] ~> #execute ~> CONTINUATION:K - │ pc: 352 - │ callDepth: 0 - │ statusCode: EVMC_SUCCESS - │ - │ (2 steps) - ├─ 13 (terminal) - │ k: #halt ~> CONTINUATION:K - │ pc: 352 - │ callDepth: 0 - │ statusCode: EVMC_SUCCESS - │ - ┊ constraint: true - ┊ subst: OMITTED SUBST - └─ 2 (leaf, target) - k: #halt ~> CONTINUATION - pc: PC_CELL_5d410f2a - callDepth: CALLDEPTH_CELL_5d410f2a - statusCode: STATUSCODE_FINAL - - - - - - - rule [BASIC-BLOCK-1-TO-3]: - - - ( #execute - ~> CONTINUATION => CALL 9223372036854772793 645326474426547203313410069153905908525362434349 0 128 36 128 0 - ~> #pc [ CALL ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( S2KLoopsTest . S2KsumZUndN ( VV0_n_114b9705 : uint256 ) => b"~\x8e#\xd0" +Bytes #buf ( 32 , VV0_n_114b9705:Int ) ) - - - 0 - - - ( .WordStack => ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( 0 : ( VV0_n_114b9705:Int : ( 334 : ( selector ( "sum_N(uint256)" ) : .WordStack ) ) ) ) ) ) ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) ) - - ... - ... - - ( 0 => 6 ) - - - ( _CALLGAS_CELL => 9079256848778916870 ) - - - false - - - 0 - - - - - .List - - - ( .Set => SetItem ( 645326474426547203313410069153905908525362434349 ) ) - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int VV0_n_114b9705:Int - andBool ( VV0_n_114b9705:Int - - - ( CALL 9223372036854772793 645326474426547203313410069153905908525362434349 0 128 36 128 0 => #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) false - ~> #return 128 0 ) - ~> #pc [ CALL ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"~\x8e#\xd0" +Bytes #buf ( 32 , VV0_n_114b9705:Int ) - - - 0 - - - ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( 0 : ( VV0_n_114b9705:Int : ( 334 : ( selector ( "sum_N(uint256)" ) : .WordStack ) ) ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_n_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) false - ~> #return 128 0 - ~> #pc [ CALL ] => JUMPI 1569 bool2Word ( VV0_n_114b9705:Int ==Int 0 ) - ~> #pc [ JUMPI ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"~\x8e#\xd0" +Bytes #buf ( 32 , VV0_n_114b9705:Int ) - - - 0 - - - ( ( 164 => 0 ) : ( ( selector ( "assume(bool)" ) => 0 ) : ( ( 645326474426547203313410069153905908525362434349 => VV0_n_114b9705:Int ) : ( ( 0 => 334 ) : ( ( VV0_n_114b9705:Int => selector ( "sum_N(uint256)" ) ) : ( ( 334 : ( selector ( "sum_N(uint256)" ) : .WordStack ) ) => .WordStack ) ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_n_114b9705:Int - andBool ( CALLER_ID:Int - - - ( JUMPI 1569 bool2Word ( VV0_n_114b9705:Int ==Int 0 ) - ~> #pc [ JUMPI ] => #end EVMC_SUCCESS - ~> #pc [ RETURN ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( b"" => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - ( b"~\x8e#\xd0" +Bytes #buf ( 32 , VV0_n_114b9705:Int ) => b"~\x8e#\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - - 0 - - - ( ( 0 => selector ( "sum_N(uint256)" ) ) : ( ( 0 : ( VV0_n_114b9705:Int : ( 334 : ( selector ( "sum_N(uint256)" ) : .WordStack ) ) ) ) => .WordStack ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_n_114b9705:Int - andBool ( VV0_n_114b9705:Int ==Int 0 - andBool ( CALLER_ID:Int - - - ( JUMPI 1569 bool2Word ( VV0_n_114b9705:Int ==Int 0 ) - ~> #pc [ JUMPI ] => #end EVMC_SUCCESS - ~> #pc [ RETURN ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( b"" => #buf ( 32 , ( ( VV0_n_114b9705:Int *Int ( VV0_n_114b9705:Int +Int 1 ) ) /Int 2 ) ) ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"~\x8e#\xd0" +Bytes #buf ( 32 , VV0_n_114b9705:Int ) - - - 0 - - - ( ( 0 => selector ( "sum_N(uint256)" ) ) : ( ( 0 : ( VV0_n_114b9705:Int : ( 334 : ( selector ( "sum_N(uint256)" ) : .WordStack ) ) ) ) => .WordStack ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) +Bytes ( #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) => #buf ( 32 , ( ( VV0_n_114b9705:Int *Int ( VV0_n_114b9705:Int +Int 1 ) ) /Int 2 ) ) +Bytes #range ( #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) , 28 , 4 ) ) - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_n_114b9705:Int - andBool ( CALLER_ID:Int - - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ RETURN ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"~\x8e#\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - 0 - - - ( selector ( "sum_N(uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( _VV0_n_114b9705 ==K 0 - andBool ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ RETURN ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - #buf ( 32 , ( ( VV0_n_114b9705:Int *Int ( VV0_n_114b9705:Int +Int 1 ) ) /Int 2 ) ) - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"~\x8e#\xd0" +Bytes #buf ( 32 , VV0_n_114b9705:Int ) - - - 0 - - - ( selector ( "sum_N(uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +Bytes #buf ( 32 , ( ( VV0_n_114b9705:Int *Int ( VV0_n_114b9705:Int +Int 1 ) ) /Int 2 ) ) +Bytes #range ( #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) , 28 , 4 ) - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( VV0_n_114b9705:Int =/=K 0 - andBool ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 - - - #halt - ~> ( #pc [ RETURN ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"~\x8e#\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - 0 - - - ( selector ( "sum_N(uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( _VV0_n_114b9705 ==K 0 - andBool ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - - #halt - ~> ( #pc [ RETURN ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - #buf ( 32 , ( ( VV0_n_114b9705:Int *Int ( VV0_n_114b9705:Int +Int 1 ) ) /Int 2 ) ) - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"~\x8e#\xd0" +Bytes #buf ( 32 , VV0_n_114b9705:Int ) - - - 0 - - - ( selector ( "sum_N(uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +Bytes #buf ( 32 , ( ( VV0_n_114b9705:Int *Int ( VV0_n_114b9705:Int +Int 1 ) ) /Int 2 ) ) +Bytes #range ( #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) , 28 , 4 ) - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( VV0_n_114b9705:Int =/=K 0 - andBool ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ -│ (435 steps) -├─ 3 -│ k: #end EVMC_SUCCESS ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 112 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #halt ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 112 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ -│ (2 steps) -├─ 5 (terminal) -│ k: #halt ~> CONTINUATION:K -│ pc: 112 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ -┊ constraint: true -┊ subst: OMITTED SUBST -└─ 2 (leaf, target) - k: #halt ~> CONTINUATION - pc: PC_CELL_5d410f2a - callDepth: CALLDEPTH_CELL_5d410f2a - statusCode: STATUSCODE_FINAL - - - - - - - rule [BASIC-BLOCK-1-TO-3]: - - - ( #execute - ~> CONTINUATION => #end EVMC_SUCCESS - ~> #pc [ STOP ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( S2KSetUpDeployTest . S2KtestZUndextcodesize ( ) => b"b\xc9\xea\xc5" ) - - - 0 - - - ( .WordStack => ( selector ( "test_extcodesize()" ) : .WordStack ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - ( 0 => 3 ) - - - false - - - 0 - - ... - - - - .List - - - ( .Set => SetItem ( 491460923342184218035706888008750043977755113263 ) ) - - - ( .Map => ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 8 ) ) ) - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 491460923342184218035706888008750043977755113263 - - - 0 - - ... - - ( 0 |-> 0 ) - - - .Map - - - 1 - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( 8 |-> 491460923342184218035706888008750043977755113263 ) - - - .Map - - - 2 - - ) ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID - andBool ( CALLER_ID - - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ STOP ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"b\xc9\xea\xc5" - - - 0 - - - ( selector ( "test_extcodesize()" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - SetItem ( 491460923342184218035706888008750043977755113263 ) - - - ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 8 ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 491460923342184218035706888008750043977755113263 - - - 0 - - ... - - ( 0 |-> 0 ) - - - .Map - - - 1 - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( 8 |-> 491460923342184218035706888008750043977755113263 ) - - - .Map - - - 2 - - ) ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - - #halt - ~> ( #pc [ STOP ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"b\xc9\xea\xc5" - - - 0 - - - ( selector ( "test_extcodesize()" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - SetItem ( 491460923342184218035706888008750043977755113263 ) - - - ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 8 ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 491460923342184218035706888008750043977755113263 - - - 0 - - ... - - ( 0 |-> 0 ) - - - .Map - - - 1 - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( 8 |-> 491460923342184218035706888008750043977755113263 ) - - - .Map - - - 2 - - ) ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int None: - # Given - with gst_file.open() as f: - gst_data = json.load(f) - - # When - res = interpret(gst_data, schedule, mode, chainid, check=False) - - # Then - _assert_exit_code_zero(res) - - -def _assert_exit_code_zero(pattern: Pattern) -> None: - assert type(pattern) is App - kevm_cell = pattern.args[0] - assert type(kevm_cell) is App - exit_code_cell = kevm_cell.args[1] - assert type(exit_code_cell) is App - - exit_code = exit_code_cell.args[0] - if exit_code == int_dv(0): - return - - pretty = kore_print(pattern, definition_dir=config.LLVM_DIR, output=PrintOutput.PRETTY) - assert pretty == GOLDEN - - -def _skipped_tests() -> set[Path]: - def read_test_list(path: Path) -> list[Path]: - return [REPO_ROOT / test_path for test_path in path.read_text().splitlines()] - - slow_tests = read_test_list(REPO_ROOT / 'tests/slow.llvm') - failing_tests = read_test_list(REPO_ROOT / 'tests/failing.llvm') - return set(slow_tests + failing_tests) - - -SKIPPED_TESTS: Final = _skipped_tests() - -VM_TEST_DIR: Final = TEST_DIR / 'LegacyTests/Constantinople/VMTests' -ALL_VM_TESTS: Final = tuple(VM_TEST_DIR.glob('*/*.json')) -VM_TESTS: Final = tuple(test_file for test_file in ALL_VM_TESTS if test_file not in SKIPPED_TESTS) -REST_VM_TESTS: Final = tuple(test_file for test_file in ALL_VM_TESTS if test_file in SKIPPED_TESTS) - - -@pytest.mark.parametrize( - 'test_file', - VM_TESTS, - ids=[str(test_file.relative_to(VM_TEST_DIR)) for test_file in VM_TESTS], -) -def test_vm(test_file: Path) -> None: - _test(test_file, 'DEFAULT', 'VMTESTS', 1) - - -@pytest.mark.skip(reason='failing / slow VM tests') -@pytest.mark.parametrize( - 'test_file', - REST_VM_TESTS, - ids=[str(test_file.relative_to(VM_TEST_DIR)) for test_file in REST_VM_TESTS], -) -def test_rest_vm(test_file: Path) -> None: - _test(test_file, 'DEFAULT', 'VMTESTS', 1) - - -BCHAIN_NEW_TEST_DIR: Final = TEST_DIR / 'BlockchainTests/GeneralStateTests' -BCHAIN_NEW_TESTS: Final = tuple(BCHAIN_NEW_TEST_DIR.glob('*/*.json')) - -BCHAIN_LEGACY_TEST_DIR: Final = TEST_DIR / 'LegacyTests/Constantinople/BlockchainTests/GeneralStateTests' -BCHAIN_LEGACY_TESTS: Final = tuple(BCHAIN_LEGACY_TEST_DIR.glob('*/*.json')) - -ALL_BCHAIN_TESTS: Final = BCHAIN_NEW_TESTS + BCHAIN_LEGACY_TESTS -BCHAIN_TESTS: Final = tuple(test_file for test_file in ALL_BCHAIN_TESTS if test_file not in SKIPPED_TESTS) -REST_BCHAIN_TESTS: Final = tuple(test_file for test_file in ALL_BCHAIN_TESTS if test_file in SKIPPED_TESTS) - - -@pytest.mark.parametrize( - 'test_file', - BCHAIN_TESTS, - ids=[str(test_file.relative_to(TEST_DIR)) for test_file in BCHAIN_TESTS], -) -def test_bchain(test_file: Path) -> None: - _test(test_file, 'MERGE', 'NORMAL', 1) - - -@pytest.mark.skip(reason='failing / slow blockchain tests') -@pytest.mark.parametrize( - 'test_file', - REST_BCHAIN_TESTS, - ids=[str(test_file.relative_to(TEST_DIR)) for test_file in REST_BCHAIN_TESTS], -) -def test_rest_bchain(test_file: Path) -> None: - _test(test_file, 'MERGE', 'NORMAL', 1) diff --git a/kevm-pyk/src/tests/integration/test_foundry_prove.py b/kevm-pyk/src/tests/integration/test_foundry_prove.py deleted file mode 100644 index bdca38a6f4..0000000000 --- a/kevm-pyk/src/tests/integration/test_foundry_prove.py +++ /dev/null @@ -1,356 +0,0 @@ -from __future__ import annotations - -from distutils.dir_util import copy_tree -from typing import TYPE_CHECKING - -import pytest -from filelock import FileLock -from pyk.utils import run_process - -from kontrol.foundry import ( - Foundry, - foundry_kompile, - foundry_merge_nodes, - foundry_prove, - foundry_remove_node, - foundry_show, - foundry_step_node, -) - -from .utils import TEST_DATA_DIR - -if TYPE_CHECKING: - from pathlib import Path - from typing import Final - - from pytest import TempPathFactory - - -FORGE_STD_REF: Final = '27e14b7' - - -@pytest.fixture(scope='session') -def foundry_root(tmp_path_factory: TempPathFactory, worker_id: str, use_booster: bool) -> Path: - if worker_id == 'master': - root_tmp_dir = tmp_path_factory.getbasetemp() - else: - root_tmp_dir = tmp_path_factory.getbasetemp().parent - - foundry_root = root_tmp_dir / 'foundry' - with FileLock(str(foundry_root) + '.lock'): - if not foundry_root.is_dir(): - copy_tree(str(TEST_DATA_DIR / 'foundry'), str(foundry_root)) - - run_process(['forge', 'install', '--no-git', f'foundry-rs/forge-std@{FORGE_STD_REF}'], cwd=foundry_root) - run_process(['forge', 'build'], cwd=foundry_root) - - foundry_kompile( - foundry_root=foundry_root, - includes=(), - requires=[str(TEST_DATA_DIR / 'lemmas.k')], - imports=['LoopsTest:SUM-TO-N-INVARIANT'], - llvm_library=use_booster, - ) - - session_foundry_root = tmp_path_factory.mktemp('foundry') - copy_tree(str(foundry_root), str(session_foundry_root)) - return session_foundry_root - - -def test_foundry_kompile(foundry_root: Path, update_expected_output: bool, use_booster: bool) -> None: - if use_booster: - return - # Then - assert_or_update_k_output( - foundry_root / 'out/kompiled/foundry.k', - TEST_DATA_DIR / 'foundry.k.expected', - update=update_expected_output, - ) - assert_or_update_k_output( - foundry_root / 'out/kompiled/contracts.k', - TEST_DATA_DIR / 'contracts.k.expected', - update=update_expected_output, - ) - - -def assert_or_update_k_output(k_file: Path, expected_file: Path, *, update: bool) -> None: - assert k_file.is_file() - assert expected_file.is_file() - - k_text = k_file.read_text() - filtered_lines = (line for line in k_text.splitlines() if not line.startswith(' rule ( #binRuntime (')) - - actual_text = '\n'.join(filtered_lines) + '\n' - expected_text = expected_file.read_text() - - if update: - expected_file.write_text(actual_text) - else: - assert actual_text == expected_text - - -ALL_PROVE_TESTS: Final = tuple((TEST_DATA_DIR / 'foundry-prove-all').read_text().splitlines()) -SKIPPED_PROVE_TESTS: Final = set((TEST_DATA_DIR / 'foundry-prove-skip').read_text().splitlines()) - -SHOW_TESTS = set((TEST_DATA_DIR / 'foundry-show').read_text().splitlines()) - - -@pytest.mark.parametrize('test_id', ALL_PROVE_TESTS) -def test_foundry_prove(test_id: str, foundry_root: Path, update_expected_output: bool, use_booster: bool) -> None: - if test_id in SKIPPED_PROVE_TESTS or (update_expected_output and not test_id in SHOW_TESTS): - pytest.skip() - - # When - prove_res = foundry_prove( - foundry_root, - tests=[test_id], - simplify_init=False, - smt_timeout=300, - smt_retry_limit=10, - use_booster=use_booster, - counterexample_info=True, - ) - - # Then - assert_pass(test_id, prove_res) - - if test_id not in SHOW_TESTS or use_booster: - return - - # And when - show_res = foundry_show( - foundry_root, - test=test_id, - to_module=True, - sort_collections=True, - omit_unstable_output=True, - pending=True, - failing=True, - failure_info=True, - counterexample_info=True, - ) - - # Then - assert_or_update_show_output(show_res, TEST_DATA_DIR / f'show/{test_id}.expected', update=update_expected_output) - - -FAIL_TESTS: Final = tuple((TEST_DATA_DIR / 'foundry-fail').read_text().splitlines()) - - -@pytest.mark.parametrize('test_id', FAIL_TESTS) -def test_foundry_fail(test_id: str, foundry_root: Path, update_expected_output: bool, use_booster: bool) -> None: - # When - prove_res = foundry_prove( - foundry_root, - tests=[test_id], - simplify_init=False, - smt_timeout=300, - smt_retry_limit=10, - use_booster=use_booster, - counterexample_info=True, - ) - - # Then - assert_fail(test_id, prove_res) - - if test_id not in SHOW_TESTS or use_booster: - return - - # And when - show_res = foundry_show( - foundry_root, - test=test_id, - to_module=True, - sort_collections=True, - omit_unstable_output=True, - pending=True, - failing=True, - failure_info=True, - counterexample_info=True, - ) - - # Then - assert_or_update_show_output(show_res, TEST_DATA_DIR / f'show/{test_id}.expected', update=update_expected_output) - - -ALL_BMC_TESTS: Final = tuple((TEST_DATA_DIR / 'foundry-bmc-all').read_text().splitlines()) -SKIPPED_BMC_TESTS: Final = set((TEST_DATA_DIR / 'foundry-bmc-skip').read_text().splitlines()) - - -@pytest.mark.parametrize('test_id', ALL_BMC_TESTS) -def test_foundry_bmc(test_id: str, foundry_root: Path, use_booster: bool) -> None: - if test_id in SKIPPED_BMC_TESTS: - pytest.skip() - - # When - prove_res = foundry_prove( - foundry_root, - tests=[test_id], - bmc_depth=3, - simplify_init=False, - smt_timeout=300, - smt_retry_limit=10, - use_booster=use_booster, - ) - - # Then - assert_pass(test_id, prove_res) - - -def test_foundry_merge_nodes(foundry_root: Path, use_booster: bool) -> None: - test_id = 'AssertTest.test_branch_merge(uint256)' - - foundry_prove( - foundry_root, - tests=[test_id], - smt_timeout=125, - smt_retry_limit=4, - max_iterations=4, - use_booster=use_booster, - ) - check_pending(foundry_root, test_id, [6, 7]) - - foundry_step_node(foundry_root, test_id, node=6, depth=49) - foundry_step_node(foundry_root, test_id, node=7, depth=50) - - check_pending(foundry_root, test_id, [8, 9]) - - foundry_merge_nodes(foundry_root=foundry_root, test=test_id, node_ids=[8, 9], include_disjunct=True) - - check_pending(foundry_root, test_id, [10]) - - prove_res = foundry_prove( - foundry_root, - tests=[test_id], - smt_timeout=125, - smt_retry_limit=4, - use_booster=use_booster, - ) - assert_pass(test_id, prove_res) - - -def check_pending(foundry_root: Path, test: str, pending: list[int]) -> None: - foundry = Foundry(foundry_root) - proof = foundry.get_apr_proof(test) - assert [node.id for node in proof.pending] == pending - - -def test_foundry_auto_abstraction(foundry_root: Path, update_expected_output: bool) -> None: - test_id = 'GasTest.testInfiniteGas()' - foundry_prove( - foundry_root, - tests=[test_id], - smt_timeout=300, - smt_retry_limit=10, - auto_abstract_gas=True, - ) - - show_res = foundry_show( - foundry_root, - test=test_id, - to_module=True, - minimize=False, - sort_collections=True, - omit_unstable_output=True, - pending=True, - failing=True, - failure_info=True, - ) - - assert_or_update_show_output(show_res, TEST_DATA_DIR / 'gas-abstraction.expected', update=update_expected_output) - - -def test_foundry_remove_node(foundry_root: Path, update_expected_output: bool) -> None: - test = 'AssertTest.test_assert_true()' - - foundry = Foundry(foundry_root) - - prove_res = foundry_prove( - foundry_root, - tests=[test], - ) - assert_pass(test, prove_res) - - foundry_remove_node( - foundry_root=foundry_root, - test=test, - node=4, - ) - - proof = foundry.get_apr_proof(test) - assert proof.pending - - prove_res = foundry_prove( - foundry_root, - tests=[test], - ) - assert_pass(test, prove_res) - - -def assert_pass(test_id: str, prove_res: dict[str, tuple[bool, list[str] | None]]) -> None: - assert test_id in prove_res - passed, log = prove_res[test_id] - if not passed: - assert log - pytest.fail('\n'.join(log)) - - -def assert_fail(test_id: str, prove_res: dict[str, tuple[bool, list[str] | None]]) -> None: - assert test_id in prove_res - passed, log = prove_res[test_id] - assert not passed - assert log - - -def assert_or_update_show_output(show_res: str, expected_file: Path, *, update: bool) -> None: - assert expected_file.is_file() - - filtered_lines = ( - line - for line in show_res.splitlines() - if not line.startswith( - ( - ' src: ', - '│ src: ', - '┃ │ src: ', - ' │ src: ', - 'module', - ) - ) - ) - actual_text = '\n'.join(filtered_lines) + '\n' - expected_text = expected_file.read_text() - - if update: - expected_file.write_text(actual_text) - else: - assert actual_text == expected_text - - -def test_foundry_resume_proof(foundry_root: Path, update_expected_output: bool) -> None: - foundry = Foundry(foundry_root) - test_id = 'AssumeTest.test_assume_false(uint256,uint256)' - - prove_res = foundry_prove( - foundry_root, - tests=[test_id], - smt_timeout=300, - smt_retry_limit=10, - auto_abstract_gas=True, - max_iterations=4, - reinit=True, - ) - - proof = foundry.get_apr_proof(test_id) - assert proof.pending - - prove_res = foundry_prove( - foundry_root, - tests=[test_id], - smt_timeout=300, - smt_retry_limit=10, - auto_abstract_gas=True, - max_iterations=6, - reinit=False, - ) - assert_fail(test_id, prove_res) diff --git a/kevm-pyk/src/tests/integration/test_kast.py b/kevm-pyk/src/tests/integration/test_kast.py deleted file mode 100644 index 22b43d6e22..0000000000 --- a/kevm-pyk/src/tests/integration/test_kast.py +++ /dev/null @@ -1,23 +0,0 @@ -from pyk.ktool.kprint import KAstInput, KAstOutput, _kast - -from kevm_pyk import config - -from ..utils import REPO_ROOT - - -def test_parse() -> None: - # Given - evm_file = REPO_ROOT / 'tests/interactive/sumTo10.evm' - expected_file = REPO_ROOT / 'tests/interactive/sumTo10.evm.parse-expected' - expected = expected_file.read_text() - - # When - actual = _kast( - file=evm_file, - definition_dir=config.LLVM_DIR, - input=KAstInput.PROGRAM, - output=KAstOutput.KORE, - ).stdout - - # Then - assert actual == expected diff --git a/kevm-pyk/src/tests/integration/test_prove.py b/kevm-pyk/src/tests/integration/test_prove.py deleted file mode 100644 index a6accec4d4..0000000000 --- a/kevm-pyk/src/tests/integration/test_prove.py +++ /dev/null @@ -1,293 +0,0 @@ -from __future__ import annotations - -import logging -import sys -from typing import TYPE_CHECKING, NamedTuple - -import pytest -from pyk.prelude.ml import mlTop - -from kevm_pyk import config -from kevm_pyk.__main__ import exec_prove -from kevm_pyk.kevm import KEVM -from kevm_pyk.kompile import KompileTarget, kevm_kompile - -from ..utils import REPO_ROOT -from .utils import TEST_DATA_DIR, gen_bin_runtime - -if TYPE_CHECKING: - from collections.abc import Callable - from pathlib import Path - from typing import Any, Final - - from pytest import LogCaptureFixture, TempPathFactory - - -sys.setrecursionlimit(10**8) - -TEST_DIR: Final = REPO_ROOT / 'tests' -SPEC_DIR: Final = TEST_DIR / 'specs' - - -# ------------------- -# Test specifications -# ------------------- - - -def spec_files(dir_name: str, glob: str) -> tuple[Path, ...]: - test_dir = SPEC_DIR / dir_name - res = tuple(test_dir.glob(glob)) - assert res - return res - - -BENCHMARK_TESTS: Final = spec_files('benchmarks', '*-spec.k') -FUNCTIONAL_TESTS: Final = spec_files('functional', '*-spec.k') -OPCODES_TESTS: Final = spec_files('opcodes', '*-spec.k') -ERC20_TESTS: Final = spec_files('erc20', '*/*-spec.k') -BIHU_TESTS: Final = spec_files('bihu', '*-spec.k') -EXAMPLES_TESTS: Final = spec_files('examples', '*-spec.k') + spec_files('examples', '*-spec.md') -MCD_TESTS: Final = spec_files('mcd', '*-spec.k') -OPTIMIZATION_TESTS: Final = (SPEC_DIR / 'opcodes/evm-optimizations-spec.md',) - -ALL_TESTS: Final = sum( - [ - BENCHMARK_TESTS, - FUNCTIONAL_TESTS, - OPCODES_TESTS, - ERC20_TESTS, - BIHU_TESTS, - EXAMPLES_TESTS, - MCD_TESTS, - OPTIMIZATION_TESTS, - ], - (), -) - - -def exclude_list(exclude_file: Path) -> list[Path]: - res = [REPO_ROOT / test_path for test_path in exclude_file.read_text().splitlines()] - assert res - return res - - -FAILING_PYK_TESTS: Final = exclude_list(TEST_DIR / 'failing-symbolic.pyk') -SLOW_TESTS: Final = exclude_list(TEST_DIR / 'slow.haskell') -FAILING_TESTS: Final = exclude_list(TEST_DIR / 'failing-symbolic.haskell') - - -# ----------- -# Kompilation -# ----------- - - -KOMPILE_MAIN_FILE: Final = { - 'benchmarks/functional-spec.k': 'functional-spec.k', - 'bihu/functional-spec.k': 'functional-spec.k', - 'examples/solidity-code-spec.md': 'solidity-code-spec.md', - 'examples/erc20-spec.md': 'erc20-spec.md', - 'examples/erc721-spec.md': 'erc721-spec.md', - 'examples/storage-spec.md': 'storage-spec.md', - 'examples/sum-to-n-spec.k': 'sum-to-n-spec.k', - 'examples/sum-to-n-foundry-spec.k': 'sum-to-n-foundry-spec.k', - 'functional/infinite-gas-spec.k': 'infinite-gas-spec.k', - 'functional/evm-int-simplifications-spec.k': 'evm-int-simplifications-spec.k', - 'functional/int-simplifications-spec.k': 'int-simplifications-spec.k', - 'functional/lemmas-no-smt-spec.k': 'lemmas-no-smt-spec.k', - 'functional/lemmas-spec.k': 'lemmas-spec.k', - 'functional/merkle-spec.k': 'merkle-spec.k', - 'functional/storageRoot-spec.k': 'storageRoot-spec.k', - 'mcd/functional-spec.k': 'functional-spec.k', - 'opcodes/evm-optimizations-spec.md': 'evm-optimizations-spec.md', -} - -KOMPILE_MAIN_MODULE: Final = { - 'benchmarks/functional-spec.k': 'FUNCTIONAL-SPEC-SYNTAX', - 'bihu/functional-spec.k': 'FUNCTIONAL-SPEC-SYNTAX', - 'erc20/functional-spec.k': 'FUNCTIONAL-SPEC-SYNTAX', - 'mcd/functional-spec.k': 'FUNCTIONAL-SPEC-SYNTAX', - 'opcodes/evm-optimizations-spec.md': 'EVM-OPTIMIZATIONS-SPEC-LEMMAS', -} - -KOMPILE_CONTRACT: Final = { - 'examples/erc20-spec.md': TEST_DATA_DIR / 'examples/ERC20.sol', - 'examples/erc721-spec.md': TEST_DATA_DIR / 'examples/ERC721.sol', - 'examples/storage-spec.md': TEST_DATA_DIR / 'examples/Storage.sol', -} - - -class Target(NamedTuple): - main_file: Path - main_module_name: str - contract_file: Path | None - - def __call__(self, output_dir: Path) -> KompiledTarget: - definition_dir = output_dir / 'kompiled' - - include_dir: Path | None - if self.contract_file: - include_dir = output_dir / 'include' - include_dir.mkdir() - gen_bin_runtime(self.contract_file, output_dir=include_dir) - else: - include_dir = None - - result = KompiledTarget(definition_dir, include_dir) - - kevm_kompile( - output_dir=output_dir / 'kompiled', - target=KompileTarget.HASKELL, - main_file=self.main_file, - main_module=self.main_module_name, - syntax_module=self.main_module_name, - includes=result.includes, - debug=True, - ) - - return result - - -class KompiledTarget(NamedTuple): - definition_dir: Path - include_dir: Path | None - - @property - def include_dirs(self) -> list[Path]: - if self.include_dir: - return [self.include_dir] - return [] - - @property - def includes(self) -> list[str]: - return [str(include_dir) for include_dir in self.include_dirs] - - -@pytest.fixture(scope='module') -def kompiled_target_for(tmp_path_factory: TempPathFactory) -> Callable[[Path], KompiledTarget]: - cache_dir = tmp_path_factory.mktemp('target') - cache: dict[Target, KompiledTarget] = {} - - def kompile(spec_file: Path) -> KompiledTarget: - target = _target_for_spec(spec_file) - - if target not in cache: - output_dir = cache_dir / f'{target.main_file.stem}-{len(cache)}' - output_dir.mkdir() - cache[target] = target(output_dir) - - return cache[target] - - return kompile - - -def _target_for_spec(spec_file: Path) -> Target: - spec_file = spec_file.resolve() - spec_id = str(spec_file.relative_to(SPEC_DIR)) - spec_root = SPEC_DIR / spec_file.relative_to(SPEC_DIR).parents[-2] - main_file = spec_root / KOMPILE_MAIN_FILE.get(spec_id, 'verification.k') - main_module_name = KOMPILE_MAIN_MODULE.get(spec_id, 'VERIFICATION') - - main_id = str(main_file.relative_to(SPEC_DIR)) - contract_file = KOMPILE_CONTRACT.get(main_id) - - return Target(main_file, main_module_name, contract_file) - - -# --------- -# Pyk tests -# --------- - - -SKIPPED_PYK_TESTS: Final = set().union(SLOW_TESTS, FAILING_TESTS, FAILING_PYK_TESTS) - - -@pytest.mark.parametrize( - 'spec_file', - ALL_TESTS, - ids=[str(spec_file.relative_to(SPEC_DIR)) for spec_file in ALL_TESTS], -) -def test_pyk_prove( - spec_file: Path, - kompiled_target_for: Callable[[Path], KompiledTarget], - tmp_path: Path, - caplog: LogCaptureFixture, -) -> None: - caplog.set_level(logging.INFO) - - if spec_file in SKIPPED_PYK_TESTS: - pytest.skip() - - # Given - log_file = tmp_path / 'log.txt' - use_directory = tmp_path / 'kprove' - use_directory.mkdir() - - # When - try: - target = kompiled_target_for(spec_file) - exec_prove( - spec_file=spec_file, - definition_dir=target.definition_dir, - includes=[str(config.INCLUDE_DIR)] + target.includes, # TODO are target.includes required? - save_directory=use_directory, - smt_timeout=300, - smt_retry_limit=10, - md_selector='foo', # TODO Ignored flag, this is to avoid KeyError - ) - except BaseException: - raise - finally: - log_file.write_text(caplog.text) - - -# ------------ -# Legacy tests -# ------------ - - -SKIPPED_LEGACY_TESTS: Final = set().union(SLOW_TESTS, FAILING_TESTS) - - -PROVE_ARGS: Final[dict[str, Any]] = { - 'functional/lemmas-no-smt-spec.k': { - 'haskell_args': ['--smt=none'], - }, -} - - -@pytest.mark.parametrize( - 'spec_file', - FAILING_PYK_TESTS, - ids=[str(spec_file.relative_to(SPEC_DIR)) for spec_file in FAILING_PYK_TESTS], -) -def test_legacy_prove( - spec_file: Path, - kompiled_target_for: Callable[[Path], KompiledTarget], - tmp_path: Path, - caplog: LogCaptureFixture, -) -> None: - caplog.set_level(logging.INFO) - - if spec_file in SKIPPED_LEGACY_TESTS: - pytest.skip() - - # Given - spec_id = str(spec_file.relative_to(SPEC_DIR)) - args = PROVE_ARGS.get(spec_id, {}) - - log_file = tmp_path / 'log.txt' - use_directory = tmp_path / 'kprove' - use_directory.mkdir() - - # When - try: - target = kompiled_target_for(spec_file) - kevm = KEVM(target.definition_dir, use_directory=use_directory) - actual = kevm.prove(spec_file=spec_file, include_dirs=[config.INCLUDE_DIR] + target.include_dirs, **args) - except BaseException: - raise - finally: - log_file.write_text(caplog.text) - - # Then - assert actual == mlTop('K') diff --git a/kevm-pyk/src/tests/integration/test_run.py b/kevm-pyk/src/tests/integration/test_run.py deleted file mode 100644 index ea8f6cb723..0000000000 --- a/kevm-pyk/src/tests/integration/test_run.py +++ /dev/null @@ -1,38 +0,0 @@ -from __future__ import annotations - -import json -from typing import TYPE_CHECKING - -import pytest -from pyk.kore.tools import PrintOutput, kore_print - -from kevm_pyk import config -from kevm_pyk.interpreter import interpret - -from ..utils import REPO_ROOT - -if TYPE_CHECKING: - from pathlib import Path - from typing import Final - - -FAILING_DIR: Final = REPO_ROOT / 'tests/failing' -TEST_DATA: Final = tuple(FAILING_DIR.glob('*.json')) -assert TEST_DATA - - -@pytest.mark.parametrize('gst_file', TEST_DATA, ids=[str(gst_file.relative_to(FAILING_DIR)) for gst_file in TEST_DATA]) -def test_run(gst_file: Path) -> None: - # Given - expected_file = gst_file.with_suffix('.json.expected') - expected = expected_file.read_text().rstrip() - - with gst_file.open() as f: - gst_data = json.load(f) - - # When - pattern = interpret(gst_data, 'MERGE', 'NORMAL', 1, check=False) - actual = kore_print(pattern, definition_dir=config.LLVM_DIR, output=PrintOutput.PRETTY) - - # Then - assert actual == expected diff --git a/kevm-pyk/src/tests/integration/test_solc_to_k.py b/kevm-pyk/src/tests/integration/test_solc_to_k.py deleted file mode 100644 index 2bfacf8669..0000000000 --- a/kevm-pyk/src/tests/integration/test_solc_to_k.py +++ /dev/null @@ -1,38 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING - -import pytest - -from kevm_pyk.kompile import KompileTarget, kevm_kompile - -from .utils import TEST_DATA_DIR - -if TYPE_CHECKING: - from collections.abc import Callable - from pathlib import Path - from typing import Final - - -EXAMPLES_DIR: Final = TEST_DATA_DIR / 'examples' -TEST_DATA: Final = tuple(EXAMPLES_DIR.glob('*.sol')) - - -@pytest.mark.parametrize( - 'contract_file', - TEST_DATA, - ids=[contract_file.name for contract_file in TEST_DATA], -) -def test_solc_to_k(contract_file: Path, bin_runtime: Callable, tmp_path: Path) -> None: - # Given - definition_dir = tmp_path / 'kompiled' - main_file, main_module_name = bin_runtime(contract_file) - - # When - kevm_kompile( - target=KompileTarget.HASKELL, - output_dir=definition_dir, - main_file=main_file, - main_module=main_module_name, - syntax_module=main_module_name, - ) diff --git a/kevm-pyk/src/tests/integration/utils.py b/kevm-pyk/src/tests/integration/utils.py deleted file mode 100644 index 91010ff812..0000000000 --- a/kevm-pyk/src/tests/integration/utils.py +++ /dev/null @@ -1,33 +0,0 @@ -from __future__ import annotations - -from pathlib import Path -from typing import TYPE_CHECKING - -from pyk.utils import check_dir_path - -from kevm_pyk import config -from kontrol.solc_to_k import solc_to_k - -if TYPE_CHECKING: - from typing import Final - - -TEST_DATA_DIR: Final = (Path(__file__).parent / 'test-data').resolve(strict=True) - - -def gen_bin_runtime(contract_file: Path, output_dir: Path) -> tuple[Path, str]: - check_dir_path(output_dir) - - contract_name = contract_file.stem - main_module_name = f'{contract_name.upper()}-VERIFICATION' - main_file = output_dir / f'{contract_name.lower()}-bin-runtime.k' - - k_text = solc_to_k( - definition_dir=config.HASKELL_DIR, - contract_file=contract_file, - contract_name=contract_name, - main_module=main_module_name, - ) - - main_file.write_text(k_text) - return main_file, main_module_name diff --git a/kevm-pyk/src/tests/profiling/__init__.py b/kevm-pyk/src/tests/profiling/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/kevm-pyk/src/tests/profiling/test-data/foundry/foundry.toml b/kevm-pyk/src/tests/profiling/test-data/foundry/foundry.toml deleted file mode 100644 index 395811cce3..0000000000 --- a/kevm-pyk/src/tests/profiling/test-data/foundry/foundry.toml +++ /dev/null @@ -1,4 +0,0 @@ -[profile.default] -src = 'src' -out = 'out' -extra_output = ['storageLayout', 'abi', 'evm.methodIdentifiers', 'evm.deployedBytecode.object'] diff --git a/kevm-pyk/src/tests/profiling/test-data/foundry/test/Simple.t.sol b/kevm-pyk/src/tests/profiling/test-data/foundry/test/Simple.t.sol deleted file mode 100644 index 548d9e1966..0000000000 --- a/kevm-pyk/src/tests/profiling/test-data/foundry/test/Simple.t.sol +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract AssertTest is Test { - - function test_revert_branch(uint x, uint y) public{ - if (x < y) { - assert(true); - } else { - assert(false); - } - } -} diff --git a/kevm-pyk/src/tests/profiling/test_foundry_prove.py b/kevm-pyk/src/tests/profiling/test_foundry_prove.py deleted file mode 100644 index f85efb6545..0000000000 --- a/kevm-pyk/src/tests/profiling/test_foundry_prove.py +++ /dev/null @@ -1,53 +0,0 @@ -from __future__ import annotations - -import sys -from distutils.dir_util import copy_tree -from typing import TYPE_CHECKING - -from pyk.utils import run_process - -from kontrol.foundry import foundry_kompile, foundry_prove - -from .utils import TEST_DATA_DIR - -if TYPE_CHECKING: - from pathlib import Path - from typing import Final - - from pyk.testing import Profiler - - -sys.setrecursionlimit(10**7) - - -FORGE_STD_REF: Final = '27e14b7' - - -def test_foundy_prove(profile: Profiler, use_booster: bool, tmp_path: Path) -> None: - foundry_root = tmp_path / 'foundry' - - _forge_build(foundry_root) - - with profile('kompile.prof', sort_keys=('cumtime', 'tottime'), limit=15): - foundry_kompile( - foundry_root=foundry_root, - includes=(), - llvm_library=use_booster, - ) - - with profile('prove.prof', sort_keys=('cumtime', 'tottime'), limit=100): - foundry_prove( - foundry_root, - tests=['AssertTest.test_revert_branch'], - simplify_init=False, - smt_timeout=300, - smt_retry_limit=10, - counterexample_info=True, - use_booster=use_booster, - ) - - -def _forge_build(target_dir: Path) -> None: - copy_tree(str(TEST_DATA_DIR / 'foundry'), str(target_dir)) - run_process(['forge', 'install', '--no-git', f'foundry-rs/forge-std@{FORGE_STD_REF}'], cwd=target_dir) - run_process(['forge', 'build'], cwd=target_dir) diff --git a/kevm-pyk/src/tests/profiling/test_gst_to_kore.py b/kevm-pyk/src/tests/profiling/test_gst_to_kore.py deleted file mode 100644 index 1bd3baa1a0..0000000000 --- a/kevm-pyk/src/tests/profiling/test_gst_to_kore.py +++ /dev/null @@ -1,22 +0,0 @@ -from __future__ import annotations - -import json -from typing import TYPE_CHECKING - -from ..utils import REPO_ROOT - -if TYPE_CHECKING: - from pyk.testing import Profiler - - -GST_FILE = REPO_ROOT / 'tests/ethereum-tests/BlockchainTests/GeneralStateTests/stEIP1559/intrinsic.json' - - -def test_gst_to_kore(profile: Profiler) -> None: - with GST_FILE.open() as f: - gst_data = json.load(f) - - with profile(sort_keys=('cumtime', 'tottime'), limit=30): - from kevm_pyk.gst_to_kore import gst_to_kore - - gst_to_kore(gst_data, 'DEFAULT', 'VMTESTS', 1) diff --git a/kevm-pyk/src/tests/profiling/utils.py b/kevm-pyk/src/tests/profiling/utils.py deleted file mode 100644 index c8cc859480..0000000000 --- a/kevm-pyk/src/tests/profiling/utils.py +++ /dev/null @@ -1,10 +0,0 @@ -from __future__ import annotations - -from pathlib import Path -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from typing import Final - - -TEST_DATA_DIR: Final = (Path(__file__).parent / 'test-data').resolve(strict=True) diff --git a/kevm-pyk/src/tests/unit/__init__.py b/kevm-pyk/src/tests/unit/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/kcfg/kcfg.json b/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/kcfg/kcfg.json deleted file mode 100644 index 1ea89c3855..0000000000 --- a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/kcfg/kcfg.json +++ /dev/null @@ -1 +0,0 @@ -{"next": 6, "nodes": [1, 2, 3, 4, 5], "edges": [{"source": 1, "target": 3, "depth": 238}, {"source": 3, "target": 4, "depth": 1}, {"source": 4, "target": 5, "depth": 2}], "covers": [{"source": 5, "target": 2, "csubst": {"subst": {"ACCESSEDACCOUNTS_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}, "ACCESSEDSTORAGE_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}, "ACCOUNTS_FINAL": {"node": "KApply", "label": {"node": "KLabel", "name": ".AccountCellMap", "params": []}, "args": [], "arity": 0, "variable": false}, "ACCT_BALANCE_FINAL": {"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, "ACCT_NONCE_FINAL": {"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}, "ACCT_ORIGSTORAGE_FINAL": {"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}, "ACCT_STORAGE_FINAL": {"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}, "ACTIVE_CELL_5d410f2a": {"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, "ADDRESSSET_FINAL": {"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}, "BASEFEE_CELL": {"node": "KVariable", "name": "BASEFEE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "BLOCKHASHES_CELL": {"node": "KVariable", "name": "BLOCKHASHES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}, "BLOCKNONCE_CELL": {"node": "KVariable", "name": "BLOCKNONCE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "CALLDATA_CELL_5d410f2a": {"node": "KToken", "token": "b\"\\n\\x92T\\xe4\"", "sort": {"node": "KSort", "name": "Bytes"}}, "CALLDEPTH_CELL_5d410f2a": {"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, "CALLER_CELL_5d410f2a": {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "CALLGAS_CELL": {"node": "KVariable", "name": "CALLGAS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}, "CALLSTACK_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}, "CALLVALUE_CELL_5d410f2a": {"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, "CHAINID_CELL": {"node": "KVariable", "name": "CHAINID_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "CHEATCODE_STORAGE_FINAL": {"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}, "CHECKEDDATA_CELL": {"node": "KVariable", "name": "CHECKEDDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}, "CHECKEDTOPICS_CELL": {"node": "KVariable", "name": "CHECKEDTOPICS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}, "COINBASE_CELL": {"node": "KVariable", "name": "COINBASE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "DEPTH_CELL": {"node": "KVariable", "name": "DEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "DIFFICULTY_CELL": {"node": "KVariable", "name": "DIFFICULTY_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "EXIT_CODE_CELL_5d410f2a": {"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "EXPECTEDADDRESS_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}, "EXPECTEDDATA_CELL_5d410f2a": {"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}, "EXPECTEDDEPTH_CELL": {"node": "KVariable", "name": "EXPECTEDDEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "EXPECTEDEVENTADDRESS_CELL": {"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}, "EXPECTEDREASON_CELL": {"node": "KVariable", "name": "EXPECTEDREASON_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}, "EXPECTEDVALUE_CELL_5d410f2a": {"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, "EXTRADATA_CELL": {"node": "KVariable", "name": "EXTRADATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}, "GAS_CELL_5d410f2a": {"node": "KToken", "token": "9223372036854775686", "sort": {"node": "KSort", "name": "Int"}}, "GASLIMIT_CELL": {"node": "KVariable", "name": "GASLIMIT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "GASPRICE_CELL": {"node": "KVariable", "name": "GASPRICE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "GASUSED_CELL": {"node": "KVariable", "name": "GASUSED_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}, "GENERATEDCOUNTER_CELL": {"node": "KVariable", "name": "GENERATEDCOUNTER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "INTERIMSTATES_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}, "ISCALLWHITELISTACTIVE_FINAL": {"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, "ISEVENTEXPECTED_FINAL": {"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, "ISOPCODEEXPECTED_FINAL": {"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, "ISREVERTEXPECTED_FINAL": {"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, "ISSTORAGEWHITELISTACTIVE_FINAL": {"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, "JUMPDESTS_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, "LOCALMEM_CELL_5d410f2a": {"node": "KToken", "token": "b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}, "LOG_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}, "LOGSBLOOM_CELL": {"node": "KVariable", "name": "LOGSBLOOM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}, "MEMORYUSED_CELL_5d410f2a": {"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}, "MESSAGES_CELL": {"node": "KVariable", "name": "MESSAGES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}, "MIXHASH_CELL": {"node": "KVariable", "name": "MIXHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "MODE_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}, "NEWCALLER_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}, "NEWORIGIN_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}, "NUMBER_CELL": {"node": "KVariable", "name": "NUMBER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "OMMERBLOCKHEADERS_CELL": {"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}, "OMMERSHASH_CELL": {"node": "KVariable", "name": "OMMERSHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "OPCODETYPE_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}, "ORIGIN_CELL_5d410f2a": {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "OUTPUT_CELL_5d410f2a": {"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}, "PC_CELL_5d410f2a": {"node": "KToken", "token": "213", "sort": {"node": "KSort", "name": "Int"}}, "PREVCALLER_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}, "PREVIOUSHASH_CELL": {"node": "KVariable", "name": "PREVIOUSHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "PREVORIGIN_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}, "PROGRAM_CELL_5d410f2a": {"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}, "RECEIPTSROOT_CELL": {"node": "KVariable", "name": "RECEIPTSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "RECORDEVENT_FINAL": {"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, "REFUND_CELL": {"node": "KVariable", "name": "REFUND_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "SCHEDULE_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}, "SELFDESTRUCT_CELL": {"node": "KVariable", "name": "SELFDESTRUCT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}, "SINGLECALL_CELL_5d410f2a": {"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, "STATEROOT_CELL": {"node": "KVariable", "name": "STATEROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "STATIC_CELL_5d410f2a": {"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, "STATUSCODE_FINAL": {"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_SUCCESS_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}, "STORAGESLOTSET_FINAL": {"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}, "TIMESTAMP_CELL": {"node": "KVariable", "name": "TIMESTAMP_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "TOUCHEDACCOUNTS_CELL": {"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}, "TRANSACTIONSROOT_CELL": {"node": "KVariable", "name": "TRANSACTIONSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "TXORDER_CELL": {"node": "KVariable", "name": "TXORDER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}, "TXPENDING_CELL": {"node": "KVariable", "name": "TXPENDING_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}, "WORDSTACK_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "177362148", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}}, "constraints": []}}], "splits": [], "ndbranches": [], "stuck": [], "aliases": {}} \ No newline at end of file diff --git a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/kcfg/nodes/1.json b/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/kcfg/nodes/1.json deleted file mode 100644 index b1a7bde789..0000000000 --- a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/kcfg/nodes/1.json +++ /dev/null @@ -1 +0,0 @@ -{"id": 1, "cterm": {"config": {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#execute_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 2}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OUTPUT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\n\\x92T\\xe4\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775807", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#halt_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 2}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXIT_CODE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MODE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Mode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SCHEDULE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Schedule"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OUTPUT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLSTACK_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "INTERIMSTATES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PROGRAM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "JUMPDESTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLVALUE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "WORDSTACK_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "WordStack"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOCALMEM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PC_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GAS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MEMORYUSED_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATIC_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLDEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOG_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCESSEDACCOUNTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCESSEDSTORAGE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_BALANCE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_STORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_ORIGSTORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_NONCE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHEATCODE_STORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KVariable", "name": "ACCOUNTS_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "AccountCellMap"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVCALLER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVORIGIN_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NEWCALLER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NEWORIGIN_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACTIVE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SINGLECALL_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISREVERTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISOPCODEEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDADDRESS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDVALUE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OPCODETYPE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "OpcodeType"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECORDEVENT_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISEVENTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISCALLWHITELISTACTIVE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISSTORAGEWHITELISTACTIVE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ADDRESSSET_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STORAGESLOTSET_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": []}} \ No newline at end of file diff --git a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/kcfg/nodes/3.json b/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/kcfg/nodes/3.json deleted file mode 100644 index 4ef2f76f99..0000000000 --- a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.setUp()/kcfg/nodes/3.json +++ /dev/null @@ -1 +0,0 @@ -{"id": 3, "cterm": {"config": {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#end__EVM_KItem_StatusCode", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_SUCCESS_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#pc[_]_EVM_InternalOp_OpCode", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "STOP_EVM_NullStackOp", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#execute_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 4}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\n\\x92T\\xe4\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "177362148", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "213", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775686", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#halt_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#pc[_]_EVM_InternalOp_OpCode", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "STOP_EVM_NullStackOp", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#execute_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 4}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_SUCCESS_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\n\\x92T\\xe4\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "177362148", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "213", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775686", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#halt_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 2}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_SUCCESS_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\n\\x92T\\xe4\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "177362148", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "213", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775686", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}, "RECEIPTSROOT_CELL": {"node": "KVariable", "name": "RECEIPTSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "RECORDEVENT_FINAL": {"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, "REFUND_CELL": {"node": "KVariable", "name": "REFUND_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "SCHEDULE_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}, "SELFDESTRUCT_CELL": {"node": "KVariable", "name": "SELFDESTRUCT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}, "SINGLECALL_CELL_5d410f2a": {"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, "STATEROOT_CELL": {"node": "KVariable", "name": "STATEROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "STATIC_CELL_5d410f2a": {"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, "STATUSCODE_FINAL": {"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_REVERT_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}, "STORAGESLOTSET_FINAL": {"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}, "TIMESTAMP_CELL": {"node": "KVariable", "name": "TIMESTAMP_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "TOUCHEDACCOUNTS_CELL": {"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}, "TRANSACTIONSROOT_CELL": {"node": "KVariable", "name": "TRANSACTIONSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "TXORDER_CELL": {"node": "KVariable", "name": "TXORDER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}, "TXPENDING_CELL": {"node": "KVariable", "name": "TXPENDING_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}, "WORDSTACK_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "2057948334", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}}, "constraints": []}}], "splits": [], "ndbranches": [], "stuck": [], "aliases": {}} \ No newline at end of file diff --git a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_false()/kcfg/nodes/1.json b/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_false()/kcfg/nodes/1.json deleted file mode 100644 index b8974c6ab2..0000000000 --- a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_false()/kcfg/nodes/1.json +++ /dev/null @@ -1 +0,0 @@ -{"id": 1, "cterm": {"config": {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#execute_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 2}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OUTPUT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"z\\xa9\\xcc\\xae\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775807", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#halt_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 2}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXIT_CODE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MODE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Mode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SCHEDULE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Schedule"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OUTPUT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLSTACK_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "INTERIMSTATES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PROGRAM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "JUMPDESTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLVALUE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "WORDSTACK_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "WordStack"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOCALMEM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PC_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GAS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MEMORYUSED_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATIC_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLDEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOG_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCESSEDACCOUNTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCESSEDSTORAGE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_BALANCE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_STORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_ORIGSTORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_NONCE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHEATCODE_STORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KVariable", "name": "ACCOUNTS_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "AccountCellMap"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVCALLER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVORIGIN_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NEWCALLER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NEWORIGIN_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACTIVE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SINGLECALL_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISREVERTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISOPCODEEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDADDRESS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDVALUE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OPCODETYPE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "OpcodeType"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECORDEVENT_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISEVENTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISCALLWHITELISTACTIVE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISSTORAGEWHITELISTACTIVE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ADDRESSSET_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STORAGESLOTSET_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "foundry_success", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}, {"node": "KApply", "label": {"node": "KLabel", "name": "#lookup(_,_)_EVM-TYPES_Int_Map_Int", "params": []}, "args": [{"node": "KVariable", "name": "CHEATCODE_STORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}, {"node": "KToken", "token": "46308022326495007027972728677917914892729792999299745830475596687180801507328", "sort": {"node": "KSort", "name": "Int"}}], "arity": 2, "variable": false}, {"node": "KVariable", "name": "ISREVERTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}, {"node": "KVariable", "name": "ISOPCODEEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}, {"node": "KVariable", "name": "RECORDEVENT_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}, {"node": "KVariable", "name": "ISEVENTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 6, "variable": false}], "arity": 2, "variable": false}]}} \ No newline at end of file diff --git a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_false()/kcfg/nodes/3.json b/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_false()/kcfg/nodes/3.json deleted file mode 100644 index 9273bbcf1d..0000000000 --- a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_false()/kcfg/nodes/3.json +++ /dev/null @@ -1 +0,0 @@ -{"id": 3, "cterm": {"config": {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#end__EVM_KItem_StatusCode", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_REVERT_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#pc[_]_EVM_InternalOp_OpCode", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "REVERT_EVM_BinStackOp", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#execute_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 4}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"NH{q\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"z\\xa9\\xcc\\xae\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "2057948334", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"NH{q\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "992", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775582", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#halt_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#pc[_]_EVM_InternalOp_OpCode", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "REVERT_EVM_BinStackOp", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#execute_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 4}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"NH{q\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_REVERT_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"z\\xa9\\xcc\\xae\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "2057948334", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"NH{q\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "992", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775582", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#halt_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 2}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"NH{q\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_REVERT_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"z\\xa9\\xcc\\xae\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "2057948334", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"NH{q\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "992", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775582", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#execute_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 2}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OUTPUT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x18g]B\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775807", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#halt_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 2}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXIT_CODE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MODE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Mode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SCHEDULE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Schedule"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OUTPUT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLSTACK_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "INTERIMSTATES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PROGRAM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "JUMPDESTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLVALUE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "WORDSTACK_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "WordStack"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOCALMEM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PC_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GAS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MEMORYUSED_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATIC_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLDEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOG_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCESSEDACCOUNTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCESSEDSTORAGE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_BALANCE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_STORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_ORIGSTORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_NONCE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHEATCODE_STORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KVariable", "name": "ACCOUNTS_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "AccountCellMap"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVCALLER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVORIGIN_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NEWCALLER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NEWORIGIN_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACTIVE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SINGLECALL_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISREVERTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISOPCODEEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDADDRESS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDVALUE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OPCODETYPE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "OpcodeType"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECORDEVENT_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISEVENTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISCALLWHITELISTACTIVE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISSTORAGEWHITELISTACTIVE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ADDRESSSET_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STORAGESLOTSET_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "foundry_success", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}, {"node": "KApply", "label": {"node": "KLabel", "name": "#lookup(_,_)_EVM-TYPES_Int_Map_Int", "params": []}, "args": [{"node": "KVariable", "name": "CHEATCODE_STORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}, {"node": "KToken", "token": "46308022326495007027972728677917914892729792999299745830475596687180801507328", "sort": {"node": "KSort", "name": "Int"}}], "arity": 2, "variable": false}, {"node": "KVariable", "name": "ISREVERTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}, {"node": "KVariable", "name": "ISOPCODEEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}, {"node": "KVariable", "name": "RECORDEVENT_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}, {"node": "KVariable", "name": "ISEVENTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 6, "variable": false}], "arity": 2, "variable": false}]}} \ No newline at end of file diff --git a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_true()/kcfg/nodes/3.json b/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_true()/kcfg/nodes/3.json deleted file mode 100644 index ab85d74a2f..0000000000 --- a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.testFail_assert_true()/kcfg/nodes/3.json +++ /dev/null @@ -1 +0,0 @@ -{"id": 3, "cterm": {"config": {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#end__EVM_KItem_StatusCode", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_SUCCESS_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#pc[_]_EVM_InternalOp_OpCode", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "STOP_EVM_NullStackOp", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#execute_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 4}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x18g]B\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "409427266", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "213", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775664", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#halt_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#pc[_]_EVM_InternalOp_OpCode", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "STOP_EVM_NullStackOp", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#execute_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 4}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_SUCCESS_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x18g]B\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "409427266", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "213", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775664", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#halt_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 2}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_SUCCESS_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x18g]B\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "409427266", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "213", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775664", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#execute_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 2}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OUTPUT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"]\\xde\\xcb\\xfd\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775807", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#halt_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 2}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXIT_CODE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MODE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Mode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SCHEDULE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Schedule"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OUTPUT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLSTACK_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "INTERIMSTATES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PROGRAM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "JUMPDESTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLVALUE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "WORDSTACK_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "WordStack"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOCALMEM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PC_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GAS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MEMORYUSED_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATIC_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLDEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOG_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCESSEDACCOUNTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCESSEDSTORAGE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_BALANCE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_STORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_ORIGSTORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_NONCE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHEATCODE_STORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KVariable", "name": "ACCOUNTS_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "AccountCellMap"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVCALLER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVORIGIN_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NEWCALLER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NEWORIGIN_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACTIVE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SINGLECALL_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISREVERTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISOPCODEEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDADDRESS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDVALUE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OPCODETYPE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "OpcodeType"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECORDEVENT_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISEVENTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISCALLWHITELISTACTIVE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISSTORAGEWHITELISTACTIVE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ADDRESSSET_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STORAGESLOTSET_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "foundry_success", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}, {"node": "KApply", "label": {"node": "KLabel", "name": "#lookup(_,_)_EVM-TYPES_Int_Map_Int", "params": []}, "args": [{"node": "KVariable", "name": "CHEATCODE_STORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}, {"node": "KToken", "token": "46308022326495007027972728677917914892729792999299745830475596687180801507328", "sort": {"node": "KSort", "name": "Int"}}], "arity": 2, "variable": false}, {"node": "KVariable", "name": "ISREVERTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}, {"node": "KVariable", "name": "ISOPCODEEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}, {"node": "KVariable", "name": "RECORDEVENT_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}, {"node": "KVariable", "name": "ISEVENTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 6, "variable": false}], "arity": 2, "variable": false}]}} \ No newline at end of file diff --git a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_false()/kcfg/nodes/3.json b/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_false()/kcfg/nodes/3.json deleted file mode 100644 index 30d83ff020..0000000000 --- a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_false()/kcfg/nodes/3.json +++ /dev/null @@ -1 +0,0 @@ -{"id": 3, "cterm": {"config": {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#end__EVM_KItem_StatusCode", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_REVERT_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#pc[_]_EVM_InternalOp_OpCode", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "REVERT_EVM_BinStackOp", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#execute_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 4}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"NH{q\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"]\\xde\\xcb\\xfd\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "1574882301", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"NH{q\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "992", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775604", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#halt_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#pc[_]_EVM_InternalOp_OpCode", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "REVERT_EVM_BinStackOp", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#execute_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 4}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"NH{q\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_REVERT_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"]\\xde\\xcb\\xfd\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "1574882301", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"NH{q\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "992", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775604", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#halt_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 2}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"NH{q\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_REVERT_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"]\\xde\\xcb\\xfd\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "1574882301", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"NH{q\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "992", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775604", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}, "RECEIPTSROOT_CELL": {"node": "KVariable", "name": "RECEIPTSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "RECORDEVENT_FINAL": {"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, "REFUND_CELL": {"node": "KVariable", "name": "REFUND_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "SCHEDULE_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}, "SELFDESTRUCT_CELL": {"node": "KVariable", "name": "SELFDESTRUCT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}, "SINGLECALL_CELL_5d410f2a": {"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, "STATEROOT_CELL": {"node": "KVariable", "name": "STATEROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "STATIC_CELL_5d410f2a": {"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}, "STATUSCODE_FINAL": {"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_SUCCESS_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}, "STORAGESLOTSET_FINAL": {"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}, "TIMESTAMP_CELL": {"node": "KVariable", "name": "TIMESTAMP_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "TOUCHEDACCOUNTS_CELL": {"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}, "TRANSACTIONSROOT_CELL": {"node": "KVariable", "name": "TRANSACTIONSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}, "TXORDER_CELL": {"node": "KVariable", "name": "TXORDER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}, "TXPENDING_CELL": {"node": "KVariable", "name": "TXPENDING_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}, "WORDSTACK_CELL_5d410f2a": {"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "906863826", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}}, "constraints": []}}], "splits": [], "ndbranches": [], "stuck": [], "aliases": {}} \ No newline at end of file diff --git a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_true()/kcfg/nodes/1.json b/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_true()/kcfg/nodes/1.json deleted file mode 100644 index f72e4e5a0d..0000000000 --- a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_true()/kcfg/nodes/1.json +++ /dev/null @@ -1 +0,0 @@ -{"id": 1, "cterm": {"config": {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#execute_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 2}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OUTPUT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"6\\r\\xa4\\xd2\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775807", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#halt_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 2}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXIT_CODE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MODE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Mode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SCHEDULE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Schedule"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OUTPUT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLSTACK_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "INTERIMSTATES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PROGRAM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "JUMPDESTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLVALUE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "WORDSTACK_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "WordStack"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOCALMEM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PC_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GAS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MEMORYUSED_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATIC_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLDEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOG_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCESSEDACCOUNTS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCESSEDSTORAGE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_BALANCE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_STORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_ORIGSTORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACCT_NONCE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHEATCODE_STORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KVariable", "name": "ACCOUNTS_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "AccountCellMap"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVCALLER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVORIGIN_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NEWCALLER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NEWORIGIN_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ACTIVE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SINGLECALL_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISREVERTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISOPCODEEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDADDRESS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDVALUE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OPCODETYPE_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "OpcodeType"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECORDEVENT_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISEVENTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISCALLWHITELISTACTIVE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ISSTORAGEWHITELISTACTIVE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ADDRESSSET_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STORAGESLOTSET_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL_5d410f2a", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "foundry_success", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}, {"node": "KApply", "label": {"node": "KLabel", "name": "#lookup(_,_)_EVM-TYPES_Int_Map_Int", "params": []}, "args": [{"node": "KVariable", "name": "CHEATCODE_STORAGE_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Map"}}}}, {"node": "KToken", "token": "46308022326495007027972728677917914892729792999299745830475596687180801507328", "sort": {"node": "KSort", "name": "Int"}}], "arity": 2, "variable": false}, {"node": "KVariable", "name": "ISREVERTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}, {"node": "KVariable", "name": "ISOPCODEEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}, {"node": "KVariable", "name": "RECORDEVENT_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}, {"node": "KVariable", "name": "ISEVENTEXPECTED_FINAL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 6, "variable": false}], "arity": 2, "variable": false}]}} \ No newline at end of file diff --git a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_true()/kcfg/nodes/3.json b/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_true()/kcfg/nodes/3.json deleted file mode 100644 index 1efd90f899..0000000000 --- a/kevm-pyk/src/tests/unit/test-data/foundry-list/apr_proofs/AssertTest.test_assert_true()/kcfg/nodes/3.json +++ /dev/null @@ -1 +0,0 @@ -{"id": 3, "cterm": {"config": {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#end__EVM_KItem_StatusCode", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_SUCCESS_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#pc[_]_EVM_InternalOp_OpCode", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "STOP_EVM_NullStackOp", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#execute_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 4}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATUSCODE", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "StatusCode"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"6\\r\\xa4\\xd2\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "906863826", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "213", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775620", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#halt_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#pc[_]_EVM_InternalOp_OpCode", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "STOP_EVM_NullStackOp", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#execute_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 4}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_SUCCESS_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"6\\r\\xa4\\xd2\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "906863826", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "213", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775620", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KSequence", "items": [{"node": "KApply", "label": {"node": "KLabel", "name": "#halt_EVM_KItem", "params": []}, "args": [], "arity": 0, "variable": false}, {"node": "KVariable", "name": "CONTINUATION", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "K"}}}}], "arity": 2}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXITCODE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "NORMAL", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "LONDON_EVM", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "EVMC_SUCCESS_NETWORK_EndStatusCode", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TOUCHEDACCOUNTS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "851", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1107", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "912", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "16", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "561", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "529", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "593", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1041", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "305", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "401", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "497", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "822", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "214", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "278", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "855", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "212", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1141", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1173", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "890", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "827", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1080", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "537", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "761", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "249", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "894", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "222", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "735", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "319", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "860", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "956", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1052", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "348", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "509", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "477", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "930", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1026", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "386", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1088", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "993", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "102", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "292", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "324", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "549", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1125", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "362", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "971", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1000", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "937", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "297", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "526", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "879", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "207", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "367", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "399", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "1100", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "140", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "332", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "_Set_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "557", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "SetItem", "params": []}, "args": [{"node": "KToken", "token": "269", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"6\\r\\xa4\\xd2\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_:__EVM-TYPES_WordStack_Int_WordStack", "params": []}, "args": [{"node": "KToken", "token": "906863826", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KApply", "label": {"node": "KLabel", "name": ".WordStack_EVM-TYPES_WordStack", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "213", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "9223372036854775620", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "3", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CALLGAS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 14, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "SELFDESTRUCT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Set"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".List", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "REFUND_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASPRICE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKHASHES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "PREVIOUSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERSHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "COINBASE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "STATEROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TRANSACTIONSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "RECEIPTSROOT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "LOGSBLOOM_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DIFFICULTY_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASLIMIT_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GASUSED_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Gas"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TIMESTAMP_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXTRADATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MIXHASH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BLOCKNONCE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "BASEFEE_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "OMMERBLOCKHEADERS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "JSON"}}}}], "arity": 1, "variable": false}], "arity": 17, "variable": false}], "arity": 11, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHAINID_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "_AccountCellMap_", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "728815563385977040452943777879061427756277306518", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"`\\x80`@R4\\x80\\x15a\\x00\\x10W`\\x00\\x80\\xfd[P`\\x046\\x10a\\x00\\xcfW`\\x005`\\xe0\\x1c\\x80c]\\xde\\xcb\\xfd\\x11a\\x00\\x8cW\\x80c\\xbaAO\\xa6\\x11a\\x00fW\\x80c\\xbaAO\\xa6\\x14a\\x01DW\\x80c\\xc2\\xc0\\xbc\\xc7\\x14a\\x01\\\\W\\x80c\\xf8\\xcc\\xbfG\\x14a\\x01oW\\x80c\\xfav&\\xd4\\x14a\\x01\\x82W`\\x00\\x80\\xfd[\\x80c]\\xde\\xcb\\xfd\\x14a\\x01)W\\x80cz\\xa9\\xcc\\xae\\x14a\\x01)W\\x80c\\x8c\\x0e\\xdd\\x8b\\x14a\\x011W`\\x00\\x80\\xfd[\\x80c\\n\\x92T\\xe4\\x14a\\x00\\xd4W\\x80c\\x18g]B\\x14a\\x00\\xd4W\\x80c*M\\xe1\\xa1\\x14a\\x00\\xd6W\\x80c6\\r\\xa4\\xd2\\x14a\\x00\\xd4W\\x80c:v\\x84c\\x14a\\x00\\xdeW\\x80cF\\\"\\xb1U\\x14a\\x01\\x16W[`\\x00\\x80\\xfd[\\x00[a\\x00\\xd4a\\x01\\x91V[a\\x00\\xf9sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x81V[`@Q`\\x01`\\x01`\\xa0\\x1b\\x03\\x90\\x91\\x16\\x81R` \\x01[`@Q\\x80\\x91\\x03\\x90\\xf3[a\\x00\\xd4a\\x01$6`\\x04a\\x03\\x90V[a\\x01\\xfdV[a\\x00\\xd4a\\x02\\x11V[a\\x00\\xd4a\\x01?6`\\x04a\\x03\\xa9V[a\\x02\\x19V[a\\x01La\\x021V[`@Q\\x90\\x15\\x15\\x81R` \\x01a\\x01\\rV[a\\x00\\xd4a\\x01j6`\\x04a\\x03\\x90V[a\\x03\\\\V[`\\x00Ta\\x01L\\x90b\\x01\\x00\\x00\\x90\\x04`\\xff\\x16\\x81V[`\\x00Ta\\x01L\\x90`\\xff\\x16\\x81V[V[`@\\x80Qc=!\\x12\\x05`\\xe2\\x1b\\x81R\\x90Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-\\x91c\\xf4\\x84H\\x14\\x91`\\x04\\x80\\x83\\x01\\x92`\\x00\\x92\\x91\\x90\\x82\\x90\\x03\\x01\\x81\\x83\\x87\\x80;\\x15\\x80\\x15a\\x01\\xddW`\\x00\\x80\\xfd[PZ\\xf1\\x15\\x80\\x15a\\x01\\xf1W=`\\x00\\x80>=`\\x00\\xfd[PPPPa\\x01\\x8fa\\x03\\xcbV[`d\\x81\\x10\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[PV[a\\x01\\x8fa\\x03\\xcbV[\\x80\\x82\\x10\\x15a\\x02%WPPV[a\\x02-a\\x03\\xcbV[PPV[`\\x00\\x80Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x15a\\x02QWP`\\x00Ta\\x01\\x00\\x90\\x04`\\xff\\x16\\x90V[`\\x00sq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-;\\x15a\\x03WW`@\\x80Qsq\\tp\\x9e\\xcf\\xa9\\x1a\\x80bo\\xf3\\x98\\x9dh\\xf6\\x7f[\\x1d\\xd1-` \\x82\\x01\\x81\\x90Re\\x19\\x98Z[\\x19Y`\\xd2\\x1b\\x82\\x84\\x01R\\x82Q\\x80\\x83\\x03\\x84\\x01\\x81R``\\x83\\x01\\x90\\x93R`\\x00\\x92\\x90\\x91a\\x02\\xdf\\x91\\x7ff\\x7f\\x9dp\\xcaA\\x1dp\\xea\\xd5\\r\\x8d\\\\\\\"\\x07\\r\\xaf\\xc3j\\xd7_=\\xcf^r7\\xb2*\\xde\\x9a\\xec\\xc4\\x91`\\x80\\x01a\\x04\\x1cV[`@\\x80Q`\\x1f\\x19\\x81\\x84\\x03\\x01\\x81R\\x90\\x82\\x90Ra\\x02\\xf9\\x91a\\x04@V[`\\x00`@Q\\x80\\x83\\x03\\x81`\\x00\\x86Z\\xf1\\x91PP=\\x80`\\x00\\x81\\x14a\\x036W`@Q\\x91P`\\x1f\\x19`?=\\x01\\x16\\x82\\x01`@R=\\x82R=`\\x00` \\x84\\x01>a\\x03;V[``\\x91P[P\\x91PP\\x80\\x80` \\x01\\x90Q\\x81\\x01\\x90a\\x03S\\x91\\x90a\\x04SV[\\x91PP[\\x91\\x90PV[`\\x03\\x81\\x10\\x15a\\x03oW`\\x08\\x81\\x90Ua\\x03~V[a\\x03z`\\x01\\x82a\\x04uV[`\\x08U[\\x80`\\x08T\\x11\\x15a\\x02\\x0eWa\\x02\\x0ea\\x03\\xcbV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x03\\xa2W`\\x00\\x80\\xfd[P5\\x91\\x90PV[`\\x00\\x80`@\\x83\\x85\\x03\\x12\\x15a\\x03\\xbcW`\\x00\\x80\\xfd[PP\\x805\\x92` \\x90\\x91\\x015\\x91PV[cNH{q`\\xe0\\x1b`\\x00R`\\x01`\\x04R`$`\\x00\\xfd[`\\x00\\x81Q`\\x00[\\x81\\x81\\x10\\x15a\\x04\\x02W` \\x81\\x85\\x01\\x81\\x01Q\\x86\\x83\\x01R\\x01a\\x03\\xe8V[\\x81\\x81\\x11\\x15a\\x04\\x11W`\\x00\\x82\\x86\\x01R[P\\x92\\x90\\x92\\x01\\x92\\x91PPV[`\\x01`\\x01`\\xe0\\x1b\\x03\\x19\\x83\\x16\\x81R`\\x00a\\x048`\\x04\\x83\\x01\\x84a\\x03\\xe1V[\\x94\\x93PPPPV[`\\x00a\\x04L\\x82\\x84a\\x03\\xe1V[\\x93\\x92PPPV[`\\x00` \\x82\\x84\\x03\\x12\\x15a\\x04eW`\\x00\\x80\\xfd[\\x81Q\\x80\\x15\\x15\\x81\\x14a\\x04LW`\\x00\\x80\\xfd[`\\x00\\x82\\x82\\x10\\x15a\\x04\\x95WcNH{q`\\xe0\\x1b`\\x00R`\\x11`\\x04R`$`\\x00\\xfd[P\\x03\\x90V\\xfe\\xa2dipfsX\\\"\\x12 \\x99\\x8fF\\xb2\\xef\\x85S\\x91F\\xddt\\x9e\\x85\\xa8\\x17h\\xa6\\x8b@\\xf7D#\\x0b\\x82\\x9b\\x95\\x99HY\\xbeH\\xeadsolcC\\x00\\x08\\r\\x003\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "1", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "645326474426547203313410069153905908525362434349", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\\x00\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Map", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}], "arity": 6, "variable": false}], "arity": 2, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXORDER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "TXPENDING_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "MESSAGES_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "MessageCellMap"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "DEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}], "arity": 7, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDREASON_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bytes"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDDEPTH_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 3, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Account_EVM-TYPES_Account", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "b\"\"", "sort": {"node": "KSort", "name": "Bytes"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".OpcodeType_FOUNDRY-CHEAT-CODES_OpcodeType", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDTOPICS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "List"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "CHECKEDDATA_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Bool"}}}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "EXPECTEDEVENTADDRESS_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Account"}}}}], "arity": 1, "variable": false}], "arity": 5, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KToken", "token": "false", "sort": {"node": "KSort", "name": "Bool"}}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KApply", "label": {"node": "KLabel", "name": ".Set", "params": []}, "args": [], "arity": 0, "variable": false}], "arity": 1, "variable": false}], "arity": 4, "variable": false}], "arity": 5, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "", "params": []}, "args": [{"node": "KVariable", "name": "GENERATEDCOUNTER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 1, "variable": false}], "arity": 2, "variable": false}, "constraints": [{"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "CALLER_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "ORIGIN_ID", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_<=Int_", "params": []}, "args": [{"node": "KToken", "token": "0", "sort": {"node": "KSort", "name": "Int"}}, {"node": "KVariable", "name": "NUMBER_CELL", "att": {"node": "KAtt", "att": {"org.kframework.kore.Sort": {"node": "KSort", "name": "Int"}}}}], "arity": 2, "variable": false}], "arity": 2, "variable": false}, {"node": "KApply", "label": {"node": "KLabel", "name": "#Equals", "params": [{"node": "KSort", "name": "Bool"}, {"node": "KSort", "name": "GeneratedTopCell"}]}, "args": [{"node": "KToken", "token": "true", "sort": {"node": "KSort", "name": "Bool"}}, {"node": "KApply", "label": {"node": "KLabel", "name": "_ None: - self.out = LIST_DATA_DIR - - @cached_property - def contracts(self) -> dict[str, Contract]: - ret: dict[str, Contract] = {} - for full_method in listdir(LIST_APR_PROOF): - contract = Contract.__new__(Contract) - method = Contract.Method.__new__(Contract.Method) - contract.name, method.signature = full_method.split('.') - if not hasattr(contract, 'methods'): - contract.methods = () - contract.methods = contract.methods + (method,) - ret[full_method] = contract - return ret - - def proof_digest(self, contract: str, test: str) -> str: - return f'{contract}.{test}' - - def get_proof(self, test: str) -> Proof: - return Proof.read_proof_data(LIST_APR_PROOF, test) - - -def test_foundry_list(mocker: MockerFixture, update_expected_output: bool) -> None: - foundry_mock = mocker.patch('kontrol.foundry.Foundry') - foundry_mock.return_value = FoundryMock() - - with LIST_EXPECTED.open() as f: - foundry_list_expected = f.read().rstrip() - assert foundry_list_expected - - list_out = '\n'.join(foundry_list(LIST_DATA_DIR)) - - assert foundry_mock.called_once_with(LIST_DATA_DIR) - - if update_expected_output: - LIST_EXPECTED.write_text(list_out) - else: - assert list_out == foundry_list_expected diff --git a/kevm-pyk/src/tests/unit/test_gst_to_kore.py b/kevm-pyk/src/tests/unit/test_gst_to_kore.py deleted file mode 100644 index 06193a920f..0000000000 --- a/kevm-pyk/src/tests/unit/test_gst_to_kore.py +++ /dev/null @@ -1,46 +0,0 @@ -from __future__ import annotations - -import json -from typing import TYPE_CHECKING - -import pytest -from pyk.kore.parser import KoreParser - -from kevm_pyk.gst_to_kore import gst_to_kore - -from ..utils import REPO_ROOT - -if TYPE_CHECKING: - from typing import Final - - -TEST_DATA: Final = ( - ( - 'tests/ethereum-tests/GeneralStateTests/VMTests/vmLogTest/log3.json', - 'tests/interactive/vmLogTest/log3.gst-to-kore.expected', - ), - ( - 'tests/interactive/log3_MaxTopic_d0g0v0.json', - 'tests/interactive/log3_MaxTopic_d0g0v0.json.parse-expected', - ), - ( - 'tests/interactive/CallRecursiveContract_d0g0v0.json', - 'tests/interactive/CallRecursiveContract_d0g0v0.json.parse-expected', - ), -) - - -@pytest.mark.parametrize('gst_path,expected_path', TEST_DATA, ids=[gst_path for gst_path, _ in TEST_DATA]) -def test_gst_to_kore(gst_path: str, expected_path: str) -> None: - # Given - gst_file = REPO_ROOT / gst_path - gst_data = json.loads(gst_file.read_text()) - - expected_file = REPO_ROOT / expected_path - expected = KoreParser(expected_file.read_text()).pattern() - - # When - actual = gst_to_kore(gst_data, 'MERGE', 'NORMAL', 1) - - # Then - assert actual == expected diff --git a/kevm-pyk/src/tests/unit/test_solc_to_k.py b/kevm-pyk/src/tests/unit/test_solc_to_k.py deleted file mode 100644 index dbc5cd78e0..0000000000 --- a/kevm-pyk/src/tests/unit/test_solc_to_k.py +++ /dev/null @@ -1,67 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING - -import pytest -from pyk.kast.inner import KToken, KVariable - -from kevm_pyk.kevm import KEVM -from kontrol.solc_to_k import _range_predicate - -from .utils import TEST_DATA_DIR - -if TYPE_CHECKING: - from typing import Final - - from pyk.kast.inner import KInner - - -EXAMPLES_DIR: Final = TEST_DATA_DIR / 'examples' - -PREDICATE_DATA: list[tuple[str, KInner, str, KInner | None]] = [ - ('bytes4', KVariable('V0_x'), 'bytes4', KEVM.range_bytes(KToken('4', 'Int'), KVariable('V0_x'))), - ('int128', KVariable('V0_x'), 'int128', KEVM.range_sint(128, KVariable('V0_x'))), - ('int24', KVariable('V0_x'), 'int24', KEVM.range_sint(24, KVariable('V0_x'))), - ('uint24', KVariable('V0_x'), 'uint24', KEVM.range_uint(24, KVariable('V0_x'))), -] - - -@pytest.mark.parametrize( - 'test_id,term,type,expected', - PREDICATE_DATA, - ids=[test_id for test_id, *_ in PREDICATE_DATA], -) -def test_range_predicate(test_id: str, term: KInner, type: str, expected: KInner | None) -> None: - # When - ret = _range_predicate(term, type) - - # Then - assert ret == expected - - -from kontrol.solc_to_k import Contract - -ESCAPE_DATA: list[tuple[str, str, str, str]] = [ - ('has_underscore', 'S2K', 'My_contract', 'S2KMyZUndcontract'), - ('no_change', '', 'mycontract', 'mycontract'), - ('starts_underscore', 'S2K', '_method', 'S2KZUndmethod'), - ('with_escape', '', 'Z_', 'ZZZUnd'), - ('lower_z', '', 'z_', 'zZUnd'), - ('with_escape_no_prefix', 'S2K', 'zS2K_', 'S2KzS2KZUnd'), - ('doll', 'S2K', '$name', 'S2KZDlrname'), -] - - -@pytest.mark.parametrize('test_id,prefix,input,output', ESCAPE_DATA, ids=[test_id for test_id, *_ in ESCAPE_DATA]) -def test_escaping(test_id: str, prefix: str, input: str, output: str) -> None: - # When - escaped = Contract.escaped(input, prefix) - - # Then - assert escaped == output - - # And When - unescaped = Contract.unescaped(output, prefix) - - # Then - assert unescaped == input diff --git a/kevm-pyk/src/tests/unit/utils.py b/kevm-pyk/src/tests/unit/utils.py deleted file mode 100644 index c8cc859480..0000000000 --- a/kevm-pyk/src/tests/unit/utils.py +++ /dev/null @@ -1,10 +0,0 @@ -from __future__ import annotations - -from pathlib import Path -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from typing import Final - - -TEST_DATA_DIR: Final = (Path(__file__).parent / 'test-data').resolve(strict=True) diff --git a/kevm-pyk/src/tests/utils.py b/kevm-pyk/src/tests/utils.py deleted file mode 100644 index 542cf63ddb..0000000000 --- a/kevm-pyk/src/tests/utils.py +++ /dev/null @@ -1,10 +0,0 @@ -from __future__ import annotations - -from pathlib import Path -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from typing import Final - - -REPO_ROOT: Final = Path(__file__).parents[3].resolve(strict=True) diff --git a/macos-envrc b/macos-envrc deleted file mode 100644 index 46d215d1f9..0000000000 --- a/macos-envrc +++ /dev/null @@ -1,7 +0,0 @@ -# Copy this file to .envrc, then run `direnv allow` to automatically set -# relevant environment variables when entering this directory. - -PATH_add `brew --prefix bison`/bin -PATH_add `brew --prefix flex`/bin -PATH_add `brew --prefix llvm@14`/bin -PATH_add `brew --prefix openjdk`/bin diff --git a/media/201710-presentation-devcon3.md b/media/201710-presentation-devcon3.md deleted file mode 100644 index d4353c2ea9..0000000000 --- a/media/201710-presentation-devcon3.md +++ /dev/null @@ -1,550 +0,0 @@ ---- -title: 'KEVM: Overview and Progress Report' -subtitle: 'K by Example' -author: -- Everett Hildenbrandt -- Manasvi Saxena -- Nishant Rodrigues -- Lucas Peña -institute: -- University of Illinois, Urbana-Champaign -date: '\today' -theme: metropolis -fontsize: 8pt ---- - -EVM Words -========= - -Utilities ---------- - -. . . - -### Modulo Arithmetic - -``` {.k .uiuck .rvk} - syntax Int ::= chop ( Int ) [function] - // -------------------------------------- - rule chop ( I:Int ) => I %Int pow256 - requires I =Int pow256 - - rule chop ( I:Int ) => I - requires I >=Int 0 andBool I Word` operations incorporate the behavior for EVM arithmetic: - -``` {.k .uiuck .rvk} - syntax Int ::= Int "+Word" Int [function] - | Int "/Word" Int [function] - // ----------------------------------------- - rule W0 +Word W1 => chop( W0 +Int W1 ) - rule W0 /Word 0 => 0 - rule W0 /Word W1 => chop( W0 /Int W1 ) requires W1 =/=K 0 -``` - -Data-Structures over `Word` -=========================== - -A WordStack for EVM -------------------- - -. . . - -### As a cons-list - -A cons-list is used for the EVM wordstack. - -- `.WordStack` serves as the empty worstack, and -- `_:_` serves as the "cons" operator. - -``` {.k .uiuck .rvk} - syntax WordStack [flatPredicate] - syntax WordStack ::= ".WordStack" | Int ":" WordStack - // ----------------------------------------------------- -``` - -This can be thought of as a singly linked-list. - -. . . - -### WordStack Append - -``` {.k .uiuck .rvk} - syntax WordStack ::= WordStack "++" WordStack [function] - // -------------------------------------------------------- - rule .WordStack ++ WS' => WS' - rule (W : WS) ++ WS' => W : (WS ++ WS') -``` - -EVM Configuration -================= - -Keeping Track of World and VM state ------------------------------------ - -The actual configuration contains $60+$ cells. - -### VM Execution State - -Subconfiguration `` contains the execution state of a single VM. - -``` -configuration - $PGM:EthereumSimulation - - .Map // I_b - .WordStack // \mu_s - .Map // \mu_m - 0 // \mu_g - ... - - ... -``` - -Keeping Track of World and VM state ------------------------------------ - -### Network/World State - -Subconfiguration `` contains the network/world state. - -- `multiplicity="*"` allows for multiple co-existing `` cells. - -``` -configuration - ... - - .Map - - - 0 - 0 - .WordStack - .Map - 0 - - - ... - -``` - -EVM Execution -============= - -OpCode Execution ----------------- - -. . . - -### Single Step - -The `#next` operator executes a single step by: - -1. performing some quick checks for exceptional opcodes, -2. executes the opcode if it is not immediately exceptional, -3. increments the program counter, and finally -4. reverts state if any of the above steps threw an exception. - -. . . - -``` {.k .uiuck .rvk} - rule EXECMODE - #next - => #pushCallStack ~> #exceptional? [ OP ] - ~> #exec [ OP ] - ~> #pc [ OP ] - ~> #? #dropCallStack : #popCallStack ~> #exception ?# - ... - - PCOUNT - ... PCOUNT |-> OP ... - requires EXECMODE in (SetItem(NORMAL) SetItem(VMTESTS)) -``` - -EVM Programs -============ - -EVM OpCodes ------------ - -. . . - -### Expressions - -Expression opcodes call the corresponding `Word` operators, then `#push` the -result: - -``` {.k .uiuck .rvk} - syntax BinStackOp ::= "SUB" | "DIV" - // ----------------------------------- - rule SUB W0 W1 => W0 -Word W1 ~> #push ... - rule DIV W0 W1 => W0 /Word W1 ~> #push ... -``` - -. . . - -### Local Memory - -``` {.k .uiuck .rvk} - syntax UnStackOp ::= "MLOAD" - // ---------------------------- - rule MLOAD INDEX => #asWord(#range(LM, INDEX, 32)) ~> #push ... - LM - - syntax BinStackOp ::= "MSTORE" - // ------------------------------ - rule MSTORE I V => . ... - LM => LM [ I := #padToWidth(32, #asByteStack(V)) ] - -``` - -Ethereum Network OpCodes ------------------------- - -. . . - -### Account Storage Operations - -These rules reach into the network state and load/store from account storage: - -``` {.k .uiuck .rvk} - syntax UnStackOp ::= "SLOAD" - // ---------------------------- - rule SLOAD INDEX => VALUE ~> #push ... ACCT - - ACCT - ... INDEX |-> VALUE ... - ... - -``` - -. . . - -``` {.k .uiuck .rvk} - syntax BinStackOp ::= "SSTORE" - // ------------------------------ - rule SSTORE INDEX VALUE => . ... ACCT - - ACCT - STORAGE => STORAGE [ INDEX <- VALUE ] - ... - - requires notBool (INDEX in_keys(STORAGE)) -``` - -Ethereum Network OpCodes ------------------------- - -. . . - -### Call Operations - -For each `CALL*` operation, we make a corresponding call to `#call` and a -state-change to setup the custom parts of the calling environment. - -``` {.k .uiuck .rvk} - syntax CallOp ::= "CALL" - // ------------------------ - rule CALL GCAP ACCTTO VALUE ARGSTART ARGWIDTH RETSTART RETWIDTH - => #checkCall ACCTFROM VALUE - ~> #call ACCTFROM ACCTTO ACCTTO Ccallgas(SCHED, ACCTTO, ACCTS, GCAP, GAVAIL, VALUE) VALUE VALUE #range(LM, ARGSTART, ARGWIDTH) - ~> #return RETSTART RETWIDTH - ... - - SCHED - ACCTFROM - LM - ACCTS - GAVAIL -``` - -Ethereum Gas Calculation -======================== - -Execution Gas -------------- - -The intrinsic gas calculation mirrors the style of the YellowPaper (appendix H). - -. . . - -### SSTORE Gas - -``` {.k .uiuck .rvk} - syntax InternalOp ::= #gasExec ( Schedule , OpCode ) - // ---------------------------------------------------- - rule #gasExec(SCHED, SSTORE INDEX VALUE) - => Csstore(SCHED, VALUE, #lookup(STORAGE, INDEX)) - ... - - ACCT - - ACCT - STORAGE - ... - -``` - -Gas Calculation Functions -------------------------- - -The following functions are defined in the YellowPaper. - -### Csstore - -``` {.k .uiuck .rvk} - syntax Int ::= Csstore ( Schedule , Int , Int ) [function] - // ---------------------------------------------------------- - rule Csstore(SCHED, VALUE, OLD) - => #ifInt VALUE =/=Int 0 andBool OLD ==Int 0 - #then Gsstoreset < SCHED > - #else Gsstorereset < SCHED > - #fi -``` - -. . . - -### Others - -``` {.k .uiuck .rvk} - syntax Int ::= Ccall (Schedule, Int, Map, Int, Int, Int) [function] - | Ccallgas (Schedule, Int, Map, Int, Int, Int) [function] - | Cgascap (Schedule, Int, Int, Int) [function] - | Cextra (Schedule, Int, Map, Int) [function] - | Cxfer (Schedule, Int) [function] - | Cnew (Schedule, Int, Map, Int) [function] - // ---------------------------------------------------------------------- -``` - -Fee Schedule from C++ Implementation ------------------------------------- - -. . . - -### Schedule Constants - -A `ScheduleConst` is a constant determined by the fee schedule. - -``` {.k .uiuck .rvk} - syntax Int ::= ScheduleConst "<" Schedule ">" [function] - - syntax ScheduleConst ::= "Gzero" | "Gbase" | "Gverylow" - // ------------------------------------------------------- -``` - -. . . - -### Default Schedule - -``` {.k .uiuck .rvk} - syntax Schedule ::= "DEFAULT" - // ----------------------------- - rule Gzero < DEFAULT > => 0 - rule Gbase < DEFAULT > => 2 -``` - -. . . - -### EIP150 Schedule - -``` {.k .uiuck .rvk} - syntax Schedule ::= "EIP150" - // ---------------------------- - rule Gbalance < EIP150 > => 400 - rule Gsload < EIP150 > => 200 -``` - -The Sum To N Specification -========================== - -Sum To N Program and Claim --------------------------- - -. . . - -### High Level - -Canonical "hello world" verification example, in no particular language: - - s = 0; - n = N; - while (n > 0) { - s = s + n; - n = n - 1; - } - return s; - -. . . - -### Claim - -$$s = \sum_{i = 1}^N i = \frac{N * (N + 1)}{2}$$ - -Proof Claims ------------- - -. . . - -### Main Claim - -- We start at program counter 0 and end at 53. -- The `` starts small enough and ends with the correct sum. -- The gas consumed is no more than `(52 * N) + 27`. -- `N` is sufficiently low that overflow will not occur in execution. - -. . . - -``` {.k .sum-to-n} - 0 => 53 - WS => 0 : N *Int (N +Int 1) /Int 2 : WS - G => G -Int (52 *Int N +Int 27) - - requires N >=Int 0 - andBool N <=Int 340282366920938463463374607431768211455 - andBool #sizeWordStack(WS) =Int 52 *Int N +Int 27 -``` - -Proof Claims ------------- - -. . . - -### Circularity (Loop Invariant) - -We specify the behaviour of the rest of the program any time it reaches the loop -head: - -- We start at program counter 35 (beginning of loop) and end at 53. -- `` starts with the counter `I` and the partial sum `S`, and -- `` ends with the correct sum. -- The gas consumed for this fragment is no more than `(52 * I) + 21`. -- `S` and `I` are sufficiently low that overflow will not occur - during execution. - -. . . - -``` {.k .sum-to-n} - 35 => 53 - G => G -Int (52 *Int I +Int 21) - - I : S : WS - => 0 : S +Int I *Int (I +Int 1) /Int 2 : WS - - requires I >=Int 0 - andBool S >=Int 0 - andBool S +Int I *Int (I +Int 1) /Int 2 =Int 52 *Int I +Int 21 -``` - -Verifing ABI compliant contracts --------------------------------- - -. . . - -`#abiCallData` generates ABI compliant `callData`: - -``` - syntax WordStack ::= #abiCallData ( String , TypedArgs ) [function] - // ------------------------------------------------------------------- - rule #abiCallData( FNAME , ARGS ) => - #parseByteStack(substrString( - Keccak256(#generateSignature(FNAME +String "(", ARGS)), 0, 8)) - ++ #encodeArgs(.WordStack | ARGS) -``` - -. . . - -Here, we generate `callData` for call the `transfer` function: - -``` - - #abiCallData("transfer",#address(%ACCOUNT_TO),#uint256(TRANSFER)) - -``` - -Note that `TRANSFER` is a symbolic word, - -ERC20: Specifying `transfer` ----------------------------- - -. . . - -- Execution reaches a `RETURN` op code -- Account balances are updated correctly if balances are sufficient. - -``` - #execute => (RETURN _ _ ~> _) - #abiCallData("transfer", ...) - - - (%ACCT_1_BALANCE |-> (B1 => B1 -Int TRANSFER)) - (%ACCT_2_BALANCE |-> (B2 => B2 +Int TRANSFER)) - - ... - - - - requires TRANSFER >Int 0 andBool TRANSFER =Int 0 andBool B1 =Int 0 andBool B2 =Int 0 - andBool #sizeWordStack(WS) -- Runtime Verification, Inc. for K support: -- IOHK for funding and ideas: -- Ethereum Foundation/Devcon3 Teams for hosting: diff --git a/media/201710-presentation-devcon3/index.html b/media/201710-presentation-devcon3/index.html new file mode 100644 index 0000000000..9880cb51aa --- /dev/null +++ b/media/201710-presentation-devcon3/index.html @@ -0,0 +1,961 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

EVM Words

+

Utilities

+

. . .

+

Modulo Arithmetic

+
    syntax Int ::= chop ( Int ) [function]
+ // --------------------------------------
+    rule chop ( I:Int ) => I %Int pow256
+      requires I <Int 0  orBool I >=Int pow256
+
+    rule chop ( I:Int ) => I
+      requires I >=Int 0 andBool I <Int pow256
+
+

. . .

+

Word Arithmetic

+

<op>Word operations incorporate the behavior for EVM arithmetic:

+
    syntax Int ::= Int "+Word" Int [function]
+                 | Int "/Word" Int [function]
+ // -----------------------------------------
+    rule W0 +Word W1 => chop( W0 +Int W1 )
+    rule W0 /Word 0  => 0
+    rule W0 /Word W1 => chop( W0 /Int W1 ) requires W1 =/=K 0
+
+

Data-Structures over Word

+

A WordStack for EVM

+

. . .

+

As a cons-list

+

A cons-list is used for the EVM wordstack.

+
    +
  • .WordStack serves as the empty worstack, and
  • +
  • _:_ serves as the "cons" operator.
  • +
+
    syntax WordStack [flatPredicate]
+    syntax WordStack ::= ".WordStack" | Int ":" WordStack
+ // -----------------------------------------------------
+
+

This can be thought of as a singly linked-list.

+

. . .

+

WordStack Append

+
    syntax WordStack ::= WordStack "++" WordStack [function]
+ // --------------------------------------------------------
+    rule .WordStack ++ WS' => WS'
+    rule (W : WS)   ++ WS' => W : (WS ++ WS')
+
+

EVM Configuration

+

Keeping Track of World and VM state

+

The actual configuration contains 60+60+ cells.

+

VM Execution State

+

Subconfiguration <evm> contains the execution state of a single VM.

+
configuration
+  <k> $PGM:EthereumSimulation </k>
+  <evm>
+    <program>   .Map       </program>   // I_b
+    <wordStack> .WordStack </wordStack> // \mu_s
+    <localMem>  .Map       </localMem>  // \mu_m
+    <gas>       0          </gas>       // \mu_g
+    ...
+  </evm>
+  ...
+
+

Keeping Track of World and VM state

+

Network/World State

+

Subconfiguration <network> contains the network/world state.

+
    +
  • multiplicity="*" allows for multiple co-existing <account> cells.
  • +
+
configuration
+  ...
+  <network>
+    <activeAccounts> .Map </activeAccounts>
+    <accounts>
+      <account multiplicity="*" type="Bag">
+        <acctID>  0          </acctID>
+        <balance> 0          </balance>
+        <code>    .WordStack </code>
+        <storage> .Map       </storage>
+        <nonce>   0          </nonce>
+      </account>
+    </accounts>
+    ...
+  </network>
+
+

EVM Execution

+

OpCode Execution

+

. . .

+

Single Step

+

The #next operator executes a single step by:

+
    +
  1. performing some quick checks for exceptional opcodes,
  2. +
  3. executes the opcode if it is not immediately exceptional,
  4. +
  5. increments the program counter, and finally
  6. +
  7. reverts state if any of the above steps threw an exception.
  8. +
+

. . .

+
    rule <mode> EXECMODE </mode>
+         <k> #next
+          => #pushCallStack ~> #exceptional? [ OP ]
+                            ~> #exec         [ OP ]
+                            ~> #pc           [ OP ]
+          ~> #? #dropCallStack : #popCallStack ~> #exception ?#
+         ...
+         </k>
+         <pc> PCOUNT </pc>
+         <program> ... PCOUNT |-> OP ... </program>
+      requires EXECMODE in (SetItem(NORMAL) SetItem(VMTESTS))
+
+

EVM Programs

+

EVM OpCodes

+

. . .

+

Expressions

+

Expression opcodes call the corresponding <op>Word operators, then #push the +result:

+
    syntax BinStackOp ::= "SUB" | "DIV"
+ // -----------------------------------
+    rule <k> SUB W0 W1 => W0 -Word W1 ~> #push ... </k>
+    rule <k> DIV W0 W1 => W0 /Word W1 ~> #push ... </k>
+
+

. . .

+

Local Memory

+
    syntax UnStackOp ::= "MLOAD"
+ // ----------------------------
+    rule <k> MLOAD INDEX => #asWord(#range(LM, INDEX, 32)) ~> #push ... </k>
+         <localMem> LM </localMem>
+
+    syntax BinStackOp ::= "MSTORE"
+ // ------------------------------
+    rule <k> MSTORE I V => . ... </k>
+         <localMem> LM => LM [ I := #padToWidth(32, #asByteStack(V)) ]
+         </localMem>
+
+

Ethereum Network OpCodes

+

. . .

+

Account Storage Operations

+

These rules reach into the network state and load/store from account storage:

+
    syntax UnStackOp ::= "SLOAD"
+ // ----------------------------
+    rule <k> SLOAD INDEX => VALUE ~> #push ... </k> <id> ACCT </id>
+         <account>
+           <acctID> ACCT </acctID>
+           <storage> ... INDEX |-> VALUE ... </storage>
+           ...
+         </account>
+
+

. . .

+
    syntax BinStackOp ::= "SSTORE"
+ // ------------------------------
+    rule <k> SSTORE INDEX VALUE => . ... </k> <id> ACCT </id>
+         <account>
+           <acctID> ACCT </acctID>
+           <storage> STORAGE => STORAGE [ INDEX <- VALUE ] </storage>
+           ...
+         </account>
+      requires notBool (INDEX in_keys(STORAGE))
+
+

Ethereum Network OpCodes

+

. . .

+

Call Operations

+

For each CALL* operation, we make a corresponding call to #call and a +state-change to setup the custom parts of the calling environment.

+
    syntax CallOp ::= "CALL"
+ // ------------------------
+    rule <k> CALL GCAP ACCTTO VALUE ARGSTART ARGWIDTH RETSTART RETWIDTH
+          => #checkCall ACCTFROM VALUE
+          ~> #call ACCTFROM ACCTTO ACCTTO Ccallgas(SCHED, ACCTTO, ACCTS, GCAP, GAVAIL, VALUE) VALUE VALUE #range(LM, ARGSTART, ARGWIDTH)
+          ~> #return RETSTART RETWIDTH
+         ...
+         </k>
+         <schedule> SCHED </schedule>
+         <id> ACCTFROM </id>
+         <localMem> LM </localMem>
+         <activeAccounts> ACCTS </activeAccounts>
+         <previousGas> GAVAIL </previousGas>
+
+

Ethereum Gas Calculation

+

Execution Gas

+

The intrinsic gas calculation mirrors the style of the YellowPaper (appendix H).

+

. . .

+

SSTORE Gas

+
    syntax InternalOp ::= #gasExec ( Schedule , OpCode )
+ // ----------------------------------------------------
+    rule <k> #gasExec(SCHED, SSTORE INDEX VALUE)
+          => Csstore(SCHED, VALUE, #lookup(STORAGE, INDEX))
+         ...
+         </k>
+         <id> ACCT </id>
+         <account>
+           <acctID> ACCT </acctID>
+           <storage> STORAGE </storage>
+           ...
+         </account>
+
+

Gas Calculation Functions

+

The following functions are defined in the YellowPaper.

+

Csstore

+
    syntax Int ::= Csstore ( Schedule , Int , Int ) [function]
+ // ----------------------------------------------------------
+    rule Csstore(SCHED, VALUE, OLD)
+      => #ifInt VALUE =/=Int 0 andBool OLD ==Int 0
+            #then Gsstoreset   < SCHED >
+            #else Gsstorereset < SCHED >
+         #fi
+
+

. . .

+

Others

+
    syntax Int ::= Ccall    (Schedule, Int, Map, Int, Int, Int) [function]
+                 | Ccallgas (Schedule, Int, Map, Int, Int, Int) [function]
+                 | Cgascap  (Schedule, Int, Int, Int)           [function]
+                 | Cextra   (Schedule, Int, Map, Int)           [function]
+                 | Cxfer    (Schedule, Int)                     [function]
+                 | Cnew     (Schedule, Int, Map, Int)           [function]
+ // ----------------------------------------------------------------------
+
+

Fee Schedule from C++ Implementation

+

. . .

+

Schedule Constants

+

A ScheduleConst is a constant determined by the fee schedule.

+
    syntax Int ::= ScheduleConst "<" Schedule ">" [function]
+
+    syntax ScheduleConst ::= "Gzero" | "Gbase" | "Gverylow"
+ // -------------------------------------------------------
+
+

. . .

+

Default Schedule

+
    syntax Schedule ::= "DEFAULT"
+ // -----------------------------
+    rule Gzero < DEFAULT > => 0
+    rule Gbase < DEFAULT > => 2
+
+

. . .

+

EIP150 Schedule

+
    syntax Schedule ::= "EIP150"
+ // ----------------------------
+    rule Gbalance < EIP150 > => 400
+    rule Gsload   < EIP150 > => 200
+
+

The Sum To N Specification

+

Sum To N Program and Claim

+

. . .

+

High Level

+

Canonical "hello world" verification example, in no particular language:

+
s = 0;
+n = N;
+while (n > 0) {
+    s = s + n;
+    n = n - 1;
+}
+return s;
+
+

. . .

+

Claim

+

ParseError: KaTeX parse error: Unexpected end of input in a macro argument, expected '}' at end of input: …ac{N * (N + 1)}

+

Proof Claims

+

. . .

+

Main Claim

+
    +
  • We start at program counter 0 and end at 53.
  • +
  • The <wordStack> starts small enough and ends with the correct sum.
  • +
  • The gas consumed is no more than (52 * N) + 27.
  • +
  • N is sufficiently low that overflow will not occur in execution.
  • +
+

. . .

+
     <pc>        0  => 53                                </pc>
+     <wordStack> WS => 0 : N *Int (N +Int 1) /Int 2 : WS </wordStack>
+     <gas>       G  => G -Int (52 *Int N +Int 27)        </gas>
+
+  requires N >=Int 0
+   andBool N <=Int 340282366920938463463374607431768211455
+   andBool #sizeWordStack(WS) <Int 1021
+   andBool G >=Int 52 *Int N +Int 27
+
+

Proof Claims

+

. . .

+

Circularity (Loop Invariant)

+

We specify the behaviour of the rest of the program any time it reaches the loop +head:

+
    +
  • We start at program counter 35 (beginning of loop) and end at 53.
  • +
  • <wordStack> starts with the counter I and the partial sum S, and
  • +
  • <wordStack> ends with the correct sum.
  • +
  • The gas consumed for this fragment is no more than (52 * I) + 21.
  • +
  • S and I are sufficiently low that overflow will not occur +during execution.
  • +
+

. . .

+
     <pc> 35 => 53                         </pc>
+     <gas> G => G -Int (52 *Int I +Int 21) </gas>
+
+     <wordStack> I : S                               : WS
+              => 0 : S +Int I *Int (I +Int 1) /Int 2 : WS </wordStack>
+
+  requires I >=Int 0
+   andBool S >=Int 0
+   andBool S +Int I *Int (I +Int 1) /Int 2 <Int pow256
+   andBool #sizeWordStack(WS) <Int 1021
+   andBool G >=Int 52 *Int I +Int 21
+
+

Verifing ABI compliant contracts

+

. . .

+

#abiCallData generates ABI compliant callData:

+
    syntax WordStack ::= #abiCallData ( String , TypedArgs ) [function]
+ // -------------------------------------------------------------------
+    rule #abiCallData( FNAME , ARGS ) =>
+        #parseByteStack(substrString(
+            Keccak256(#generateSignature(FNAME +String "(", ARGS)), 0, 8))
+            ++ #encodeArgs(.WordStack | ARGS)
+
+

. . .

+

Here, we generate callData for call the transfer function:

+
<callData>
+    #abiCallData("transfer",#address(%ACCOUNT_TO),#uint256(TRANSFER))
+</callData>
+
+

Note that TRANSFER is a symbolic word,

+

ERC20: Specifying transfer

+

. . .

+
    +
  • Execution reaches a RETURN op code
  • +
  • Account balances are updated correctly if balances are sufficient.
  • +
+
   <k> #execute => (RETURN _ _ ~> _) </k>
+   <callData>  #abiCallData("transfer", ...) </callData>
+   <accounts>
+     <account>
+       <storage> (%ACCT_1_BALANCE |-> (B1 => B1 -Int TRANSFER))
+                 (%ACCT_2_BALANCE |-> (B2 => B2 +Int TRANSFER))
+       </storage>
+       ...
+     </account>
+   </accounts>
+
+  requires TRANSFER >Int 0 andBool TRANSFER <Int pow256
+   andBool B1 >=Int 0      andBool B1 <Int pow256
+   andBool B2 >=Int 0      andBool B2 <Int pow256
+   andBool B2 +Int TRANSFER <Int pow256
+   andBool B1 -Int TRANSFER >=Int 0
+   andBool #sizeWordStack(WS) <Int 1017
+
+

Other Work

+

KEVM

+

Too much to present here (ask offline).

+

Tests

+
    +
  • Pass all of VMTests (deprecated) and GeneralStateTests.
  • +
  • Almost passing BlockchainTests.
  • +
  • Within an order of magnitude the performance of cpp-ethereum.
  • +
+

Verification

+
    +
  • Verified ERC20 specification over (fixed) HKG Token (see Github repository).
  • +
  • Added ABI-level abstractions for easier specification of proofs (in progress).
  • +
+

High Level Languages (not discussed here)

+
    +
  • EVM-PRIME from IC3 Bootcamp.
  • +
  • Extending with more primitives to give semantics to Viper.
  • +
+

K Framework

+

Language Independent PL/FM Toolkit

+
    +
  • Parser/interpreter/debugger/model-checker/verification tools all exist.
  • +
  • Work towards semantics-based compiler (for even better performance).
  • +
+

Future Directions

+
    +
  • More analysis tools built on KEVM.
  • +
  • Other blockchain language semantics in progress.
  • +
  • Other (non-blockchain) language/systems/network semantics in progress.
  • +
+

The End

+

Acknowledgments

+ +
+
+ + +
+ +
+
+ + EVM Words + + +
+
+ + Data-Structures over Word + + +
+
+ + EVM Configuration + + +
+
+ + EVM Execution + +
+
+ + OpCode Execution + + +
+ +
+
+
+ + EVM Programs + + +
+
+ + Ethereum Gas Calculation + + +
+
+ + The Sum To N Specification + + +
+
+ + Other Work + + +
+
+ + The End + + +
+ +
+ +
+
+ +
+
+ + + + + + + + + + + diff --git a/media/201801-presentation-csf.md b/media/201801-presentation-csf.md deleted file mode 100644 index d0c27f29af..0000000000 --- a/media/201801-presentation-csf.md +++ /dev/null @@ -1,518 +0,0 @@ ---- -title: 'KEVM: A Complete Formal Semantics of the Ethereum Virtual Machine [@hildenbrandt-saxena-zhu-rodrigues-daian-guth-moore-zhang-park-rosu-2018-csf]' -subtitle: 'K, EVM, and KEVM' -author: -- Everett Hildenbrandt -- Manasvi Saxena -- Nishant Rodrigues -- Xiaoran Zhu -- Philip Daian -- Dwight Guth -- Brandon Moore -- Daejun Park -- Yi Zhang -- Andrei \c{S}tef\u{a}nescu -- Grigore Ro\c{s}u -institute: -- University of Illinois, Urbana-Champaign -- Runtime Verification, Inc. -- Cornell Tech, IC3 -- East China Normal University -date: '\today' -theme: metropolis -fontsize: 10pt -header-includes: -- \newcommand{\K}{\ensuremath{\mathbb{K}}} ---- - -Overview --------- - -1. \K{} Framework -2. Ethereum Virtual Machine -3. KEVM Uses - -### Links - -- KEVM Repository: -- K Repository: -- Runtime Verification: -- Verified smart contracts: - -\K{} Framework -============== - -The Vision: Language Independence ---------------------------------- - -Separate development of PL software into two tasks: - -. . . - -### The Programming Language - -PL expert builds rigorous and formal spec of the language in a high-level human-readable semantic framework. - -. . . - -### The Tooling - -Build each tool *once*, and apply it to every language, eg.: - -- Parser -- Interpreter -- Debugger -- Compiler -- Model Checker -- Program Verifier - -The Vision: Language Independence ---------------------------------- - -![K Tooling Overview](media/images/k-overview.png) - -Current Semantics ------------------ - -Many languages have full or partial \K{} semantics, this lists some notable ones (and their primary usage). - -- [C](https://github.com/kframework/c-semantics): detecting undefined behavior -- [Java](https://github.com/kframework/java-semantics): detecting racy code -- [EVM](https://github.com/kframework/evm-semantics): verifying smart contracts -- [LLVM](https://github.com/kframework/llvm-semantics): compiler validation (to x86) -- [JavaScript](https://github.com/kframework/javascript-semantics): finding disagreements between JS engines -- [P4](https://github.com/kframework/p4-semantics): SDN data-layer verification -- many others ... - -\K{} Specifications: Syntax ---------------------------- - -Concrete syntax built using EBNF style: - -```k - syntax Exp ::= Int | Id | "(" Exp ")" [bracket] - | Exp "*" Exp - > Exp "+" Exp // looser binding - - syntax Stmt ::= Id ":=" Exp - | Stmt ";" Stmt - | "return" Exp -``` - -. . . - -This would allow correctly parsing programs like: - -```imp - a := 3 * 2; - b := 2 * a + 5; - return b -``` - -\K{} Specifications: Configuration ----------------------------------- - -Tell \K{} about the structure of your execution state. -For example, a simple imperative language might have: - -```k - configuration $PGM:Program - .Map - .Map -``` - -. . . - -- `` will contain the initial parsed program -- `` contains bindings of variable names to store locations -- `` contains bindings of store locations to integers - -\K{} Specifications: Transition Rules -------------------------------------- - -Using the above grammar and configuration: - -. . . - -### Variable lookup - -```k - rule X:Id => V ... - ... X |-> SX ... - ... SX |-> V ... -``` - -. . . - -### Variable assignment - -```k - rule X := I:Int => . ... - ... X |-> SX ... - ... SX |-> (V => I) ... -``` - -Example Execution ------------------ - -### Program - -```imp - a := 3 * 2; - b := 2 * a + 5; - return b -``` - -### Initial Configuration - -```k - a := 3 * 2 ; b := 2 * a + 5 ; return b - a |-> 0 b |-> 1 - 0 |-> 0 1 |-> 0 -``` - -Example Execution (cont.) -------------------------- - -### Variable assignment - -```k - rule X := I:Int => . ... - ... X |-> SX ... - ... SX |-> (V => I) ... -``` - -### Next Configuration - -```k - a := 6 ~> b := 2 * a + 5 ; return b - a |-> 0 b |-> 1 - 0 |-> 0 1 |-> 0 -``` - -Example Execution (cont.) -------------------------- - -### Variable assignment - -```k - rule X := I:Int => . ... - ... X |-> SX ... - ... SX |-> (V => I) ... -``` - -### Next Configuration - -```k - b := 2 * a + 5 ; return b - a |-> 0 b |-> 1 - 0 |-> 6 1 |-> 0 -``` - -Example Execution (cont.) -------------------------- - -### Variable lookup - -```k - rule X:Id => V ... - ... X |-> SX ... - ... SX |-> V ... -``` - -### Next Configuration - -```k - a ~> b := 2 * [] + 5 ; return b - a |-> 0 b |-> 1 - 0 |-> 6 1 |-> 0 -``` - -Example Execution (cont.) -------------------------- - -### Variable lookup - -```k - rule X:Id => V ... - ... X |-> SX ... - ... SX |-> V ... -``` - -### Next Configuration - -```k - 6 ~> b := 2 * [] + 5 ; return b - a |-> 0 b |-> 1 - 0 |-> 6 1 |-> 0 -``` - -Example Execution (cont.) -------------------------- - -### Variable lookup - -```k - rule X:Id => V ... - ... X |-> SX ... - ... SX |-> V ... -``` - -### Next Configuration - -```k - b := 2 * 6 + 5 ; return b - a |-> 0 b |-> 1 - 0 |-> 6 1 |-> 0 -``` - -Example Execution (cont.) -------------------------- - -### Variable assignment - -```k - rule X := I:Int => . ... - ... X |-> SX ... - ... SX |-> (V => I) ... -``` - -### Next Configuration - -```k - b := 17 ~> return b - a |-> 0 b |-> 1 - 0 |-> 6 1 |-> 0 -``` - -Example Execution (cont.) -------------------------- - -### Variable assignment - -```k - rule X := I:Int => . ... - ... X |-> SX ... - ... SX |-> (V => I) ... -``` - -### Next Configuration - -```k - return b - a |-> 0 b |-> 1 - 0 |-> 6 1 |-> 17 -``` - -Ethereum Virtual Machine -======================== - -Blockchain ----------- - -- Append-only ledger of user-submitted transactions. -- Mostly simple transfers of value. -- Miners select next block of transactions using consensus algorithm.[^notThisTalk] -- Ethereum adds: - - New currency! (Ether) - - Accounts have an associated *storage* and *code* which only transactions by that account can read/modify (onchain). - - Transactions can have associated *programs* written in EVM (Ethereum Virtual Machine).[^smartContracts] - - Miners execute transaction code to calculate the new world state (new account balances, storage, code, etc...). - -[^notThisTalk]: This talk is not about the consensus algorithms. -[^smartContracts]: Cool kids call these programs *smart contracts*, or *contracts*. - -EVM (Ethereum Virtual Machine) ------------------------------- - -Is a stack-based bytecode over 256-bit words. - -Example program (sum 0 - 10): - -\footnotesize - -```evm - PUSH(1, 0) ; PUSH(1, 0) ; MSTORE -; PUSH(1, 10) ; PUSH(1, 32) ; MSTORE -; JUMPDEST -; PUSH(1, 0) ; PUSH(1, 32) ; MLOAD ; GT -; ISZERO ; PUSH(1, 43) ; JUMPI -; PUSH(1, 32) ; MLOAD ; PUSH(1, 0) ; MLOAD ; ADD ; PUSH(1, 0) ; MSTORE -; PUSH(1, 1) ; PUSH(1, 32) ; MLOAD ; SUB ; PUSH(1, 32) ; MSTORE -; PUSH(1, 10) ; JUMP -; JUMPDEST -; PUSH(1, 0) ; MLOAD ; PUSH(1, 0) ; SSTORE -; .OpCodes -``` - -\normalsize - -Enforcing Termination (Gas) ---------------------------- - -- User submitted transactions could have infinite loops (DoS attacks!). -- Solution: - - Each opcode costs some *gas*, paid for in Ether. - - Spent gas awarded to miner, remaining refunded to account. - -Notes: - -- It's important to charge according to actual used compute resources. -- Tuning gas costs is an *ongoing* challenge. - - New hardware available $\rightarrow$ new gas model. -- Hardforks update the gas constants/rules. - -Intercontract Executions (and the ABI) --------------------------------------- - -- Contracts can call other contracts (re-entrancy!). -- Payload to other contract is a raw string of bytes called `callData`. -- *External* to the EVM, the Ethereum ABI has been developed: -- Specifies: - - Calling conventions (how to interpret `callData` correctly). - - Some high-level types (and their mapping to EVM words). - -EVM Nuisances -------------- - -- Unstructured controlflow: dynamically calculable jump destinations. -- 256-bit words: useful for crypto, pain for hardware. -- 8-bit word-array local memory: complicates symbolic reasoning. -- No built-in calling conventions: ABI is declared external to EVM. -- `eval` capability: copying bytes as code and running is bad for analysis. - -KEVM: Status and Current Uses -============================= - -Correctness and Performance ---------------------------- - -- Pass the VMTests and GeneralStateTests of the [Ethereum Test Suite](https://github.com/ethereum/tests). - -. . . - -- Roughly an order of magnitude slower than cpp-ethereum (reference implementation in C++). - - **Test Set** (no. tests) **KEVM** **cpp-ethereum** - ------------------------- --------- ----------------- - VMAll (40683) 99:41 4:42 - GSNormal (22705) 35:00 1:30 - -. . . - -- (Non-empty) lines of code comparison: - - KEVM: 2644 - - cpp-ethereum: 4588 - -Assertion Violation Checker ---------------------------- - -- EVM has designated `INVALID` opcode, halts and discards gas. -- Has been used to specify "assertion failure" in HLLs.[^hlls] -- Symbolically execute and look for paths ending in `INVALID`. - -. . . - -- Co-invariant checking - "`INVALID` never happens". -- Very little tooling effort needed after building semantics. -- Similar techniques used to find undefined behaviour in C programs. - -[^hlls]: High-level languages (which compile to EVM). - -Reachibility Logic Prover [@stefanescu-ciobaca-mereuta-moore-serbanuta-rosu-2014-rta] -------------------------------------------------------------------------------------- - -- Takes operational semantics as input (no axiomatic semantics).[^inthiscaseK] -- Generalization of Hoare Logic: - - Hoare triple: $\{\textit{Pre}\} \textit{Code} \{\textit{Post}\}$ - - Reachability claim: $\widehat{\textit{Code}} \land \widehat{\textit{Pre}} \Rightarrow \epsilon \land \widehat{\textit{Post}}$ - - "Any instance of $\widehat{\textit{Code}}$ which satisfies $\widehat{Pre}$ either does not terminate or reaches an instance of $\epsilon$ (empty program) which satisfies $\widehat{Post}$". - No need for end state in RL to be $\epsilon$ though. -- See paper for example claims. - -. . . - -- Reachability claims are fed to \K{} prover as normal \K{} rules. -- Functional correctness directly specifiable as set reachability claims. -- Correctness bugs often lead to security bugs. - -[^inthiscaseK]: In this case, we use \K{} to specify the operational semantics. - -Reachability Logic Inference System [@stefanescu-ciobaca-mereuta-moore-serbanuta-rosu-2014-rta] ------------------------------------------------------------------------------------------------ - -![RL Inference System](media/images/proof-system.png) - -Case Study: ERC20 ------------------ - -- "Hello world" of Ethereum smart contracts. -- First full contract we verified. -- Key-value store of addresses to token balances. -- Simple methods for purchasing/transferring/selling tokens. - -. . . - -### ERC20 Uses - -- Codify ownership distribution of a company (tokenizing equity). -- Tokenize pink-slips/deeds (eg. tokenizing houses, cars). -- Ponzi schemes. - -Case Study: ERC20 - Scaling Verification ----------------------------------------- - -- First ERC20 verification took several person-months. - -. . . - -- Define state abstractions directly in \K{} itself. - - `nthbyteof` for storing symbolic word (256-bits) as 32 bytes (when written to `localMem`). - - `#abiCallData` allows using actual function name/signature in call instead of packed bytes representation. - -. . . - -- Modular specifications - - Re-use same specs for different implementations, only need delta. - - Have 5 verified implementations of ERC20, all different behaviors.[^verifiedSmartContracts] - -. . . - -- Now, can verify a (reasonable) ERC20 in about a day. - -[^verifiedSmartContracts]: See our audited ERC20s (and other contracts) at . - -Tool-Assisted Security Audits ------------------------------ - -- Runtime Verification, Inc. offers audits as a service, typical process: - 1. Specify high-level business logic in English, confirm with customer.[^usuallyNotDone] - 2. Refine to a mathematical definition, confirm with customer. - 3. Refine to a set of K Reachability Claims, confirm with customer. - 4. Fix bugs in contract and specification until the K prover is satisfied. - 5. Send all documents generated and list of issues found to customer. - -- Independent groups also using KEVM to verify contract stack (eg. [DappHub](https://github.com/kframework/dapphub)). - -[^usuallyNotDone]: Surprisingly, many smart contract developers don't have a high-level specification of their contracts. - -Thanks! -======= - -Conclusion ----------- - -- \K{} used to specify semantics of Ethereum Virtual Machine (EVM). -- Commercial verification efforts carried out with \K{} prover. - -Sponsors --------- - -The work presented in this paper was supported in part by -the Boeing grant on "Formal Analysis Tools for Cyber Security" 2016-2017, -the NSF grants CCF-1318191, CCF-1421575, CNS-1330599, CNS-1514163, and IIP-1660186, -the NSF Graduate Fellowship under Grant No. DGE-1650441, -an IOHK gift, -and a grant from the Ethereum Foundation. diff --git a/media/201801-presentation-csf/index.html b/media/201801-presentation-csf/index.html new file mode 100644 index 0000000000..85adc93313 --- /dev/null +++ b/media/201801-presentation-csf/index.html @@ -0,0 +1,963 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Overview

+
    +
  1. \K{} Framework
  2. +
  3. Ethereum Virtual Machine
  4. +
  5. KEVM Uses
  6. +
+ + +

\K{} Framework

+

The Vision: Language Independence

+

Separate development of PL software into two tasks:

+

. . .

+

The Programming Language

+

PL expert builds rigorous and formal spec of the language in a high-level human-readable semantic framework.

+

. . .

+

The Tooling

+

Build each tool once, and apply it to every language, eg.:

+
    +
  • Parser
  • +
  • Interpreter
  • +
  • Debugger
  • +
  • Compiler
  • +
  • Model Checker
  • +
  • Program Verifier
  • +
+

The Vision: Language Independence

+

K Tooling Overview

+

Current Semantics

+

Many languages have full or partial \K{} semantics, this lists some notable ones (and their primary usage).

+
    +
  • C: detecting undefined behavior
  • +
  • Java: detecting racy code
  • +
  • EVM: verifying smart contracts
  • +
  • LLVM: compiler validation (to x86)
  • +
  • JavaScript: finding disagreements between JS engines
  • +
  • P4: SDN data-layer verification
  • +
  • many others ...
  • +
+

\K{} Specifications: Syntax

+

Concrete syntax built using EBNF style:

+
    syntax Exp ::= Int | Id | "(" Exp ")" [bracket]
+                 | Exp "*" Exp
+                 > Exp "+" Exp // looser binding
+
+    syntax Stmt ::= Id ":=" Exp
+                  | Stmt ";" Stmt
+                  | "return" Exp
+
+

. . .

+

This would allow correctly parsing programs like:

+
    a := 3 * 2;
+    b := 2 * a + 5;
+    return b
+
+

\K{} Specifications: Configuration

+

Tell \K{} about the structure of your execution state. +For example, a simple imperative language might have:

+
    configuration <k>     $PGM:Program </k>
+                  <env>   .Map         </env>
+                  <store> .Map         </store>
+
+

. . .

+
    +
  • <k> will contain the initial parsed program
  • +
  • <env> contains bindings of variable names to store locations
  • +
  • <store> contains bindings of store locations to integers
  • +
+

\K{} Specifications: Transition Rules

+

Using the above grammar and configuration:

+

. . .

+

Variable lookup

+
    rule <k> X:Id => V ... </k>
+         <env>   ...  X |-> SX ... </env>
+         <store> ... SX |-> V  ... </store>
+
+

. . .

+

Variable assignment

+
    rule <k> X := I:Int => . ... </k>
+         <env>   ...  X |-> SX       ... </env>
+         <store> ... SX |-> (V => I) ... </store>
+
+

Example Execution

+

Program

+
    a := 3 * 2;
+    b := 2 * a + 5;
+    return b
+
+

Initial Configuration

+
    <k>     a := 3 * 2 ; b := 2 * a + 5 ; return b </k>
+    <env>   a |-> 0    b |-> 1 </env>
+    <store> 0 |-> 0    1 |-> 0 </store>
+
+

Example Execution (cont.)

+

Variable assignment

+
    rule <k> X := I:Int => . ... </k>
+         <env>   ...  X |-> SX       ... </env>
+         <store> ... SX |-> (V => I) ... </store>
+
+

Next Configuration

+
    <k>     a := 6 ~> b := 2 * a + 5 ; return b </k>
+    <env>   a |-> 0    b |-> 1 </env>
+    <store> 0 |-> 0    1 |-> 0 </store>
+
+

Example Execution (cont.)

+

Variable assignment

+
    rule <k> X := I:Int => . ... </k>
+         <env>   ...  X |-> SX       ... </env>
+         <store> ... SX |-> (V => I) ... </store>
+
+

Next Configuration

+
    <k>               b := 2 * a + 5 ; return b </k>
+    <env>   a |-> 0    b |-> 1 </env>
+    <store> 0 |-> 6    1 |-> 0 </store>
+
+

Example Execution (cont.)

+

Variable lookup

+
    rule <k> X:Id => V ... </k>
+         <env>   ...  X |-> SX ... </env>
+         <store> ... SX |-> V  ... </store>
+
+

Next Configuration

+
    <k>     a ~> b := 2 * [] + 5 ; return b </k>
+    <env>   a |-> 0    b |-> 1 </env>
+    <store> 0 |-> 6    1 |-> 0 </store>
+
+

Example Execution (cont.)

+

Variable lookup

+
    rule <k> X:Id => V ... </k>
+         <env>   ...  X |-> SX ... </env>
+         <store> ... SX |-> V  ... </store>
+
+

Next Configuration

+
    <k>     6 ~> b := 2 * [] + 5 ; return b </k>
+    <env>   a |-> 0    b |-> 1 </env>
+    <store> 0 |-> 6    1 |-> 0 </store>
+
+

Example Execution (cont.)

+

Variable lookup

+
    rule <k> X:Id => V ... </k>
+         <env>   ...  X |-> SX ... </env>
+         <store> ... SX |-> V  ... </store>
+
+

Next Configuration

+
    <k>          b := 2 * 6 + 5 ; return b </k>
+    <env>   a |-> 0    b |-> 1 </env>
+    <store> 0 |-> 6    1 |-> 0 </store>
+
+

Example Execution (cont.)

+

Variable assignment

+
    rule <k> X := I:Int => . ... </k>
+         <env>   ...  X |-> SX       ... </env>
+         <store> ... SX |-> (V => I) ... </store>
+
+

Next Configuration

+
    <k>     b := 17 ~> return b </k>
+    <env>   a |-> 0    b |-> 1 </env>
+    <store> 0 |-> 6    1 |-> 0 </store>
+
+

Example Execution (cont.)

+

Variable assignment

+
    rule <k> X := I:Int => . ... </k>
+         <env>   ...  X |-> SX       ... </env>
+         <store> ... SX |-> (V => I) ... </store>
+
+

Next Configuration

+
    <k>                return b </k>
+    <env>   a |-> 0    b |-> 1  </env>
+    <store> 0 |-> 6    1 |-> 17 </store>
+
+

Ethereum Virtual Machine

+

Blockchain

+
    +
  • Append-only ledger of user-submitted transactions.
  • +
  • Mostly simple transfers of value.
  • +
  • Miners select next block of transactions using consensus algorithm.[1]
  • +
  • Ethereum adds: +
      +
    • New currency! (Ether)
    • +
    • Accounts have an associated storage and code which only transactions by that account can read/modify (onchain).
    • +
    • Transactions can have associated programs written in EVM (Ethereum Virtual Machine).[2]
    • +
    • Miners execute transaction code to calculate the new world state (new account balances, storage, code, etc...).
    • +
    +
  • +
+

EVM (Ethereum Virtual Machine)

+

Is a stack-based bytecode over 256-bit words.

+

Example program (sum 0 - 10):

+

\footnotesize

+
  PUSH(1, 0)  ; PUSH(1, 0)  ; MSTORE
+; PUSH(1, 10) ; PUSH(1, 32) ; MSTORE
+; JUMPDEST
+; PUSH(1, 0) ; PUSH(1, 32) ; MLOAD ; GT
+; ISZERO ; PUSH(1, 43) ; JUMPI
+; PUSH(1, 32) ; MLOAD ; PUSH(1, 0)  ; MLOAD ; ADD ; PUSH(1, 0)  ; MSTORE
+; PUSH(1, 1)          ; PUSH(1, 32) ; MLOAD ; SUB ; PUSH(1, 32) ; MSTORE
+; PUSH(1, 10) ; JUMP
+; JUMPDEST
+; PUSH(1, 0) ; MLOAD ; PUSH(1, 0) ; SSTORE
+; .OpCodes
+
+

\normalsize

+

Enforcing Termination (Gas)

+
    +
  • User submitted transactions could have infinite loops (DoS attacks!).
  • +
  • Solution: +
      +
    • Each opcode costs some gas, paid for in Ether.
    • +
    • Spent gas awarded to miner, remaining refunded to account.
    • +
    +
  • +
+

Notes:

+
    +
  • It's important to charge according to actual used compute resources.
  • +
  • Tuning gas costs is an ongoing challenge. +
      +
    • New hardware available \rightarrow new gas model.
    • +
    +
  • +
  • Hardforks update the gas constants/rules.
  • +
+

Intercontract Executions (and the ABI)

+
    +
  • Contracts can call other contracts (re-entrancy!).
  • +
  • Payload to other contract is a raw string of bytes called callData.
  • +
  • External to the EVM, the Ethereum ABI has been developed:
  • +
  • Specifies: +
      +
    • Calling conventions (how to interpret callData correctly).
    • +
    • Some high-level types (and their mapping to EVM words).
    • +
    +
  • +
+

EVM Nuisances

+
    +
  • Unstructured controlflow: dynamically calculable jump destinations.
  • +
  • 256-bit words: useful for crypto, pain for hardware.
  • +
  • 8-bit word-array local memory: complicates symbolic reasoning.
  • +
  • No built-in calling conventions: ABI is declared external to EVM.
  • +
  • eval capability: copying bytes as code and running is bad for analysis.
  • +
+

KEVM: Status and Current Uses

+

Correctness and Performance

+ +

. . .

+
    +
  • +

    Roughly an order of magnitude slower than cpp-ethereum (reference implementation in C++).

    +

    Test Set (no. tests) KEVM cpp-ethereum

    +
    +

    VMAll (40683) 99:41 4:42 +GSNormal (22705) 35:00 1:30

    +
  • +
+

. . .

+
    +
  • +

    (Non-empty) lines of code comparison:

    +

    KEVM: 2644

    +

    cpp-ethereum: 4588

    +
  • +
+

Assertion Violation Checker

+
    +
  • EVM has designated INVALID opcode, halts and discards gas.
  • +
  • Has been used to specify "assertion failure" in HLLs.[3]
  • +
  • Symbolically execute and look for paths ending in INVALID.
  • +
+

. . .

+
    +
  • Co-invariant checking - "INVALID never happens".
  • +
  • Very little tooling effort needed after building semantics.
  • +
  • Similar techniques used to find undefined behaviour in C programs.
  • +
+

Reachibility Logic Prover [@stefanescu-ciobaca-mereuta-moore-serbanuta-rosu-2014-rta]

+
    +
  • Takes operational semantics as input (no axiomatic semantics).[4]
  • +
  • Generalization of Hoare Logic: +
      +
    • Hoare triple: {Pre}Code{Post}\{\textit{Pre}\} \textit{Code} \{\textit{Post}\}
    • +
    • Reachability claim: Code^Pre^ϵPost^\widehat{\textit{Code}} \land \widehat{\textit{Pre}} \Rightarrow \epsilon \land \widehat{\textit{Post}}
    • +
    • "Any instance of Code^\widehat{\textit{Code}} which satisfies Pre^\widehat{Pre} either does not terminate or reaches an instance of ϵ\epsilon (empty program) which satisfies Post^\widehat{Post}". +No need for end state in RL to be ϵ\epsilon though.
    • +
    +
  • +
  • See paper for example claims.
  • +
+

. . .

+
    +
  • Reachability claims are fed to \K{} prover as normal \K{} rules.
  • +
  • Functional correctness directly specifiable as set reachability claims.
  • +
  • Correctness bugs often lead to security bugs.
  • +
+

Reachability Logic Inference System [@stefanescu-ciobaca-mereuta-moore-serbanuta-rosu-2014-rta]

+

RL Inference System

+

Case Study: ERC20

+
    +
  • "Hello world" of Ethereum smart contracts.
  • +
  • First full contract we verified.
  • +
  • Key-value store of addresses to token balances.
  • +
  • Simple methods for purchasing/transferring/selling tokens.
  • +
+

. . .

+

ERC20 Uses

+
    +
  • Codify ownership distribution of a company (tokenizing equity).
  • +
  • Tokenize pink-slips/deeds (eg. tokenizing houses, cars).
  • +
  • Ponzi schemes.
  • +
+

Case Study: ERC20 - Scaling Verification

+
    +
  • First ERC20 verification took several person-months.
  • +
+

. . .

+
    +
  • Define state abstractions directly in \K{} itself. +
      +
    • nthbyteof for storing symbolic word (256-bits) as 32 bytes (when written to localMem).
    • +
    • #abiCallData allows using actual function name/signature in call instead of packed bytes representation.
    • +
    +
  • +
+

. . .

+
    +
  • Modular specifications +
      +
    • Re-use same specs for different implementations, only need delta.
    • +
    • Have 5 verified implementations of ERC20, all different behaviors.[5]
    • +
    +
  • +
+

. . .

+
    +
  • Now, can verify a (reasonable) ERC20 in about a day.
  • +
+

Tool-Assisted Security Audits

+
    +
  • +

    Runtime Verification, Inc. offers audits as a service, typical process:

    +
      +
    1. Specify high-level business logic in English, confirm with customer.[6]
    2. +
    3. Refine to a mathematical definition, confirm with customer.
    4. +
    5. Refine to a set of K Reachability Claims, confirm with customer.
    6. +
    7. Fix bugs in contract and specification until the K prover is satisfied.
    8. +
    9. Send all documents generated and list of issues found to customer.
    10. +
    +
  • +
  • +

    Independent groups also using KEVM to verify contract stack (eg. DappHub).

    +
  • +
+

Thanks!

+

Conclusion

+
    +
  • \K{} used to specify semantics of Ethereum Virtual Machine (EVM).
  • +
  • Commercial verification efforts carried out with \K{} prover.
  • +
+

Sponsors

+

The work presented in this paper was supported in part by +the Boeing grant on "Formal Analysis Tools for Cyber Security" 2016-2017, +the NSF grants CCF-1318191, CCF-1421575, CNS-1330599, CNS-1514163, and IIP-1660186, +the NSF Graduate Fellowship under Grant No. DGE-1650441, +an IOHK gift, +and a grant from the Ethereum Foundation.

+
+
+
    +
  1. This talk is not about the consensus algorithms. ↩︎

    +
  2. +
  3. Cool kids call these programs smart contracts, or contracts. ↩︎

    +
  4. +
  5. High-level languages (which compile to EVM). ↩︎

    +
  6. +
  7. In this case, we use \K{} to specify the operational semantics. ↩︎

    +
  8. +
  9. See our audited ERC20s (and other contracts) at https://github.com/runtimeverification/verified-smart-contracts. ↩︎

    +
  10. +
  11. Surprisingly, many smart contract developers don't have a high-level specification of their contracts. ↩︎

    +
  12. +
+
+
+
+ + +
+ +
+
+ + \K{} Framework + +
+
+ + The Vision: Language Independence + + +
+
+ + \K{} Specifications: Transition Rules + + +
+
+ + Example Execution + + +
+
+ + Example Execution (cont.) + + +
+
+ + Example Execution (cont.) + + +
+
+ + Example Execution (cont.) + + +
+
+ + Example Execution (cont.) + + +
+
+ + Example Execution (cont.) + + +
+
+ + Example Execution (cont.) + + +
+
+ + Example Execution (cont.) + + +
+ +
+
+
+ + Ethereum Virtual Machine + + +
+
+ + KEVM: Status and Current Uses + + +
+
+ + Thanks! + + +
+ +
+ +
+
+ +
+
+ + + + + + + + + + + diff --git a/media/201905-exercise-k-workshop.md b/media/201905-exercise-k-workshop.md deleted file mode 100644 index 7976f95eab..0000000000 --- a/media/201905-exercise-k-workshop.md +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: 'K Workshop' -subtitle: 'Understanding the K Prover' -author: -- Everett Hildenbrandt -institute: -- Runtime Verification -- ConsenSys -date: '\today' -theme: metropolis -fontsize: 8pt ---- - -Overview --------- - -- Install KEVM and KLab on your machine -- Simple uses of the `./kevm` script -- (Brief) introduction to KEVM -- Verification examples: KEVM lemma proofs, ERC20 `transfer` function -- Open verification challenge - -Install KEVM ------------- - -### KEVM - -- Branch `kevm-lemmas` of KEVM: -- Build instructions in README. - - ```sh - make deps - make build-java - make build-ocaml - ``` - -- Should be able to run: - - ```sh - make test-prove-verified - make test-prove-gen -j3 - ``` - -. . . - -### KLab - -- Branch `master` of KLab: -- Build instructions in README. - - ```sh - make deps-npm - ``` - -- Should be able to run (in KEVM repo with `klab/bin` on your `PATH`): - - ```sh - make tests/specs/verified/kevm-lemmas-spec.k - ./kevm klab-prove tests/specs/verified/kevm-lemmas-spec.k --boundary-cells k,pc - ``` - -`./kevm help` -------------- - -```sh -$ ./kevm help - -usage: ./kevm (run|kast) [--backend (ocaml|java|llvm|haskell)] * - ./kevm interpret [--backend (ocaml|llvm)] - ./kevm prove [--backend (java|haskell)] * - ./kevm klab-(run|prove) * - - ./kevm run : Run a single EVM program - ./kevm interpret : Run JSON EVM programs without K Frontend (external parser) - ./kevm prove : Run an EVM K proof - ./kevm klab-(run|prove) : Run or prove a spec and launch KLab on the execution graph. - - Note: is a path to a file containing an EVM program/test. - is a K specification to be proved. - are any arguments you want to pass to K when executing/proving. - - KLab: Make sure that the 'klab/bin' directory is on your PATH to use this option. -``` - -`./kevm` examples ------------------ - -> - Run a test: `MODE=... SCHEDULE=... ./kevm run tests/etheremu-tests/...` -> - Interpret a test (fast): `MODE=... SCHEDULE=... ./kevm interpret tests/etheremu-tests/...` -> - Run a proof: `./kevm prove tests/specs/*-spec.k` -> - Run a test under KLab: `MODE=... SCHEDULE=... ./kevm klab-run tests/ethereum-tests/...` -> - Run a proof under KLab: `./kevm klab-prove tests/ethereum-tests/...` - -Introduction to KEVM --------------------- - -- File [data.md](../data.md) defines data-structures of EVM. -- File [evm.md](../evm.md) defines the semantics itself. -- File [driver.md](../driver.md) defines the testing harness. -- File [edsl.md](../edsl.md) defines a DSL for aiding specification for proofs. - -Verification Examples ---------------------- - -### KEVM Lemmas - -- File [kevm-lemmas-spec.md](../kevm-lemmas-spec.k) -- Summaries of the "positive" cases of arithmetic opcodes and push -- Work through how to use KLab to discover preconditions -- Complete the push, push, add specification - -```sh -make test-prove-verified -``` - -. . . - -### ERC20 `transfer` functions - -- Run proof. - - ```sh - make test-prove-gen - ``` - -- Explain ini file format of [ds-token-erc20-spec.ini](../tests/specs/ds-token-erc20/ds-token-erc20-spec.ini) -- Delete all except the `transfer` blocks -- Remove `requires` clauses to explore result in KLab - -Open Verification Challenge ---------------------------- - -Rest of time. - -- Work on `transferFrom` function? -- Try to setup your own contract? - -Thanks! -------- - -- ConsenSys for hosting us! -- You all for attending! diff --git a/media/201905-exercise-k-workshop/index.html b/media/201905-exercise-k-workshop/index.html new file mode 100644 index 0000000000..20e7a20fce --- /dev/null +++ b/media/201905-exercise-k-workshop/index.html @@ -0,0 +1,390 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Overview

+
    +
  • Install KEVM and KLab on your machine
  • +
  • Simple uses of the ./kevm script
  • +
  • (Brief) introduction to KEVM
  • +
  • Verification examples: KEVM lemma proofs, ERC20 transfer function
  • +
  • Open verification challenge
  • +
+

Install KEVM

+

KEVM

+
    +
  • +

    Branch kevm-lemmas of KEVM: https://github.com/kframework/evm-semantics

    +
  • +
  • +

    Build instructions in README.

    +
    make deps
    +make build-java
    +make build-ocaml
    +
    +
  • +
  • +

    Should be able to run:

    +
    make test-prove-verified
    +make test-prove-gen -j3
    +
    +
  • +
+

. . .

+

KLab

+
    +
  • +

    Branch master of KLab: https://github.com/dapphub/klab

    +
  • +
  • +

    Build instructions in README.

    +
    make deps-npm
    +
    +
  • +
  • +

    Should be able to run (in KEVM repo with klab/bin on your PATH):

    +
    make tests/specs/verified/kevm-lemmas-spec.k
    +./kevm klab-prove tests/specs/verified/kevm-lemmas-spec.k --boundary-cells k,pc
    +
    +
  • +
+

./kevm help

+
$ ./kevm help
+
+usage: ./kevm (run|kast)       [--backend (ocaml|java|llvm|haskell)] <pgm>  <K args>*
+       ./kevm interpret        [--backend (ocaml|llvm)]              <pgm>
+       ./kevm prove            [--backend (java|haskell)]            <spec> <K args>*
+       ./kevm klab-(run|prove)                                       <spec> <K args>*
+
+   ./kevm run       : Run a single EVM program
+   ./kevm interpret : Run JSON EVM programs without K Frontend (external parser)
+   ./kevm prove     : Run an EVM K proof
+   ./kevm klab-(run|prove) : Run or prove a spec and launch KLab on the execution graph.
+
+   Note: <pgm> is a path to a file containing an EVM program/test.
+         <spec> is a K specification to be proved.
+         <K args> are any arguments you want to pass to K when executing/proving.
+
+   KLab: Make sure that the 'klab/bin' directory is on your PATH to use this option.
+
+

./kevm examples

+
+
    +
  • Run a test: MODE=... SCHEDULE=... ./kevm run tests/etheremu-tests/...
  • +
  • Interpret a test (fast): MODE=... SCHEDULE=... ./kevm interpret tests/etheremu-tests/...
  • +
  • Run a proof: ./kevm prove tests/specs/*-spec.k
  • +
  • Run a test under KLab: MODE=... SCHEDULE=... ./kevm klab-run tests/ethereum-tests/...
  • +
  • Run a proof under KLab: ./kevm klab-prove tests/ethereum-tests/...
  • +
+
+

Introduction to KEVM

+
    +
  • File data.md defines data-structures of EVM.
  • +
  • File evm.md defines the semantics itself.
  • +
  • File driver.md defines the testing harness.
  • +
  • File edsl.md defines a DSL for aiding specification for proofs.
  • +
+

Verification Examples

+

KEVM Lemmas

+
    +
  • File kevm-lemmas-spec.md
  • +
  • Summaries of the "positive" cases of arithmetic opcodes and push
  • +
  • Work through how to use KLab to discover preconditions
  • +
  • Complete the push, push, add specification
  • +
+
make test-prove-verified
+
+

. . .

+

ERC20 transfer functions

+
    +
  • +

    Run proof.

    +
    make test-prove-gen
    +
    +
  • +
  • +

    Explain ini file format of ds-token-erc20-spec.ini

    +
  • +
  • +

    Delete all except the transfer blocks

    +
  • +
  • +

    Remove requires clauses to explore result in KLab

    +
  • +
+

Open Verification Challenge

+

Rest of time.

+
    +
  • Work on transferFrom function?
  • +
  • Try to setup your own contract?
  • +
+

Thanks!

+
    +
  • ConsenSys for hosting us!
  • +
  • You all for attending!
  • +
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/media/201908-trufflecon-firefly.md b/media/201908-trufflecon-firefly.md deleted file mode 100644 index 20768ded3b..0000000000 --- a/media/201908-trufflecon-firefly.md +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: 'Firefly' -subtitle: 'Solidity testing using KEVM' -author: -- Everett Hildenbrandt -- Grigore Rosu -institute: -- Runtime Verification -date: '\today' -theme: metropolis -fontsize: 8pt ---- - -Overview --------- - -- (Brief) Introduction to KEVM -- Introduction to Firefly -- Firefly Demo -- Future Directions - -(Brief) Introduction to KEVM ----------------------------- - -- Repository: -- Considered the canonical spec of EVM: -- All K tooling is derived automatically: - - Reference EVM interpreter - - Symbolic execution engine - - EVM bytecode formal verification engine - - Several EVM bytecode debugger options - -Introduction to Firefly ------------------------ - -- `npm` package here: . -- Drop-in replacement for `ganache-cli`, can be used directly by Truffle. - - Instead of: - - ```sh - npx ganache-cli - ``` - - run: - - ```sh - npx kevm-ganache-cli - ``` - -. . . - -### Why?? - -- Higher confidence in results (run tests with both!). -- More features to come: - - Test coverage metrics. - - Automated property verification. - - Test generation. - - Contract symbolic execution. - - ... your ideas?? - -Firefly Demo - Setup --------------------- - -Instructions from : - -. . . - -### Install KEVM (once) - -**TODO**: Update release URL. - -```sh -sudo apt install nodejs npm curl git -curl --location 'https://github.com/kframework/evm-semantics/releases/download/v1.0.0-a47e4b2/kevm_1.0.0_amd64.deb' \ - --output kevm_1.0.0_amd64.deb -sudo apt install ./kevm_1.0.0_amd64.deb -``` - -. . . - -### Install `npx` (once) - -```sh -sudo npm install -g npx -``` - -Firefly Demo - Run OpenZeppelin Tests -------------------------------------- - -### Start `kevm-ganache-cli` - -```sh -npx kevm-ganache-cli \ - --gasLimit 0xfffffffffff \ - --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501200,1000000000000000000000000" \ - --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501201,1000000000000000000000000" \ - --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501202,1000000000000000000000000" \ - --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501203,1000000000000000000000000" \ - --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501204,1000000000000000000000000" \ - --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501205,1000000000000000000000000" \ - --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501206,1000000000000000000000000" \ - --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501207,1000000000000000000000000" \ - --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501208,1000000000000000000000000" \ - --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501209,1000000000000000000000000" -``` - -. . . - -### Run OpenZeppelin tests - -```sh -git clone 'https://github.com/OpenZeppelin/openzeppelin-contracts.git' -cd openzeppelin-contracts -git checkout b8c8308 -npm install -npx truffle test test/token/ERC20/ERC20.test.js -``` - -KEVM Extensions - Event Monitoring ----------------------------------- - -Compile semantics with additional file `media/201908-trufflecon/kevm-ltl.md`. - -```k - syntax LTLEvent ::= "overflow" - // ------------------------------ - rule ADD W0 W1 ... - EVENTS (.Set => SetItem(overflow)) - requires notBool overflow in EVENTS - andBool W0 +Word W1 =/=Int W0 +Int W1 - [priority(24)] - - syntax LTLEvent ::= "revert" - // ---------------------------- - rule REVERT _ _ ... - EVENTS (.Set => SetItem(revert)) - requires notBool revert in EVENTS - [priority(24)] -``` - -- Monitors built-in to the KEVM semantics as an extension. -- Can build arbitrary LTL formula over the monitors. - -KEVM Extensions - LTL Model Checking ------------------------------------- - -### Input file `addition.evm` - -```evm -load { "gas" : 10000000 - // Query: always ((~ overflow) \/ eventually revert) - // , "code" : UNSAFEADD(100 , 100) // True - // , "code" : UNSAFEADD(maxUInt256 , 100) // False - // , "code" : SAFEADD(100 , 100) // True - , "code" : SAFEADD(maxUInt256 , 100) // True - } - -start -``` - -. . . - -### Query - -```sh -./kevm run --backend llvm media/201908-trufflecon/addition.evm -cLTLFORMULA='always (overflow -> eventually revert)' -``` - -Truffle Firefly Plugin ----------------------- - -- Developed with help from Truffle devs today as plugin! -- Modified OpenZeppelin test-suite which links to `truffle-plugin-firefly`. - -```sh -npx truffle run firefly SafeMath 'always (overflow -> eventually revert)' -``` - diff --git a/media/201908-trufflecon-firefly/index.html b/media/201908-trufflecon-firefly/index.html new file mode 100644 index 0000000000..6df7208590 --- /dev/null +++ b/media/201908-trufflecon-firefly/index.html @@ -0,0 +1,422 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Overview

+
    +
  • (Brief) Introduction to KEVM
  • +
  • Introduction to Firefly
  • +
  • Firefly Demo
  • +
  • Future Directions
  • +
+

(Brief) Introduction to KEVM

+ +

Introduction to Firefly

+ +

. . .

+

Why??

+
    +
  • Higher confidence in results (run tests with both!).
  • +
  • More features to come: +
      +
    • Test coverage metrics.
    • +
    • Automated property verification.
    • +
    • Test generation.
    • +
    • Contract symbolic execution.
    • +
    • ... your ideas??
    • +
    +
  • +
+

Firefly Demo - Setup

+

Instructions from https://www.npmjs.com/package/kevm-ganache-cli:

+

. . .

+

Install KEVM (once)

+

TODO: Update release URL.

+
sudo apt install nodejs npm curl git
+curl --location 'https://github.com/kframework/evm-semantics/releases/download/v1.0.0-a47e4b2/kevm_1.0.0_amd64.deb' \
+     --output kevm_1.0.0_amd64.deb
+sudo apt install ./kevm_1.0.0_amd64.deb
+
+

. . .

+

Install npx (once)

+
sudo npm install -g npx
+
+

Firefly Demo - Run OpenZeppelin Tests

+

Start kevm-ganache-cli

+
npx kevm-ganache-cli                                                                                         \
+    --gasLimit 0xfffffffffff                                                                                 \
+    --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501200,1000000000000000000000000" \
+    --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501201,1000000000000000000000000" \
+    --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501202,1000000000000000000000000" \
+    --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501203,1000000000000000000000000" \
+    --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501204,1000000000000000000000000" \
+    --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501205,1000000000000000000000000" \
+    --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501206,1000000000000000000000000" \
+    --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501207,1000000000000000000000000" \
+    --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501208,1000000000000000000000000" \
+    --account="0x2bdd21761a483f71054e14f5b827213567971c676928d9a1808cbfa4b7501209,1000000000000000000000000"
+
+

. . .

+

Run OpenZeppelin tests

+
git clone 'https://github.com/OpenZeppelin/openzeppelin-contracts.git'
+cd openzeppelin-contracts
+git checkout b8c8308
+npm install
+npx truffle test test/token/ERC20/ERC20.test.js
+
+

KEVM Extensions - Event Monitoring

+

Compile semantics with additional file media/201908-trufflecon/kevm-ltl.md.

+
    syntax LTLEvent ::= "overflow"
+ // ------------------------------
+    rule <k> ADD W0 W1 ... </k>
+         <events> EVENTS (.Set => SetItem(overflow)) </events>
+      requires notBool overflow in EVENTS
+       andBool W0 +Word W1 =/=Int W0 +Int W1
+      [priority(24)]
+
+    syntax LTLEvent ::= "revert"
+ // ----------------------------
+    rule <k> REVERT _ _ ... </k>
+         <events> EVENTS (.Set => SetItem(revert)) </events>
+      requires notBool revert in EVENTS
+      [priority(24)]
+
+
    +
  • Monitors built-in to the KEVM semantics as an extension.
  • +
  • Can build arbitrary LTL formula over the monitors.
  • +
+

KEVM Extensions - LTL Model Checking

+

Input file addition.evm

+
load { "gas"  : 10000000
+  // Query: always ((~ overflow) \/ eventually revert)
+  // , "code" : UNSAFEADD(100        , 100) // True
+  // , "code" : UNSAFEADD(maxUInt256 , 100) // False
+  // , "code" :   SAFEADD(100        , 100) // True
+     , "code" :   SAFEADD(maxUInt256 , 100) // True
+     }
+
+start
+
+

. . .

+

Query

+
./kevm run --backend llvm media/201908-trufflecon/addition.evm -cLTLFORMULA='always (overflow -> eventually revert)'
+
+

Truffle Firefly Plugin

+
    +
  • Developed with help from Truffle devs today as plugin!
  • +
  • Modified OpenZeppelin test-suite which links to truffle-plugin-firefly.
  • +
+
npx truffle run firefly SafeMath 'always (overflow -> eventually revert)'
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/media/201908-trufflecon-workshop.md b/media/201908-trufflecon-workshop.md deleted file mode 100644 index 0e65694486..0000000000 --- a/media/201908-trufflecon-workshop.md +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: 'K/KEVM Formal Verification Workshop' -subtitle: 'Understanding the K Prover and Runtime Verification' -author: -- Everett Hildenbrandt -- Grigore Rosu -institute: -- Runtime Verification -date: '\today' -theme: metropolis -fontsize: 8pt ---- - -Overview --------- - -- Install KEVM and KLab on your machine -- Simple uses of the `./kevm` script -- (Brief) introduction to KEVM -- Verification examples: Single opcode (`ADD`), ERC20 `transfer` function -- LTL runtime verification example - -Install KEVM: Docker Way ------------------------- - -### Get Docker Container - -```sh -docker login -# it will ask for username and password -# email will NOT work, they need their dockerhub USERNAME -# Proxy user: ehildenbproxy -# Proxy pass: ehildenb-proxy - -docker run -it -u user -w /home/user/evm-semantics \ - runtimeverificationinc/evm-semantics:trufflecon -``` - -### Setup Environment - -```sh -cd ../ -eval $(cat env) -cd evm-semantics -which klab -``` - -Install KEVM: From Source -------------------------- - -### KEVM - -- Branch `trufflecon` of KEVM: -- Build instructions in README. - - ```sh - make llvm-deps - make build-java - ``` - -. . . - -### KLab - -- Branch `master` of KLab: -- Build instructions in README. - - ```sh - make deps-npm - ``` - -- Patch KLab (comment lines 90 - 94 of `lib/behavior.js`). -- Should be able to run (in KEVM repo with `klab/bin` on your `PATH`): - - ```sh - ./kevm klab-prove add-spec.k - ./kevm klab-view add-spec.k - ``` - -`./kevm help` -------------- - -```sh -usage: ./kevm run [--backend (ocaml|java|llvm|haskell)] * - ./kevm interpret [--backend (ocaml|llvm)] * - ./kevm kast [--backend (ocaml|java)] * - ./kevm prove [--backend (java|haskell)] * -m - ./kevm search [--backend (java|haskell)] * - ./kevm klab-run * - ./kevm klab-prove * -m - ./kevm klab-view - - ./kevm run : Run a single EVM program - ./kevm interpret : Run JSON EVM programs without K Frontend (external parser) - ./kevm kast : Parse an EVM program and output it in a supported format - ./kevm prove : Run an EVM K proof - ./kevm search : Search for a K pattern in an EVM program execution - ./kevm klab-(run|prove) : Run program or prove spec and dump StateLogs which KLab can read - ./kevm klab-view : View the statelog associated with a given program or spec - - Note: is a path to a file containing an EVM program/test. - is a K specification to be proved. - is an argument you want to pass to K. - is an argument you want to pass to the derived interpreter. - is the format for Kast to output the term in. - is the configuration pattern to search for. - is the module to take as axioms when doing verification. - - klab-view: Make sure that the 'klab/bin' directory is on your PATH to use this option. -``` - -`./kevm` examples ------------------ - -- Run a test: `./kevm run tests/etheremu-tests/...` -- Interpret a test (fast): `./kevm interpret tests/etheremu-tests/...` -- Run a proof: `./kevm prove tests/specs/*-spec.k` -- Run a test under KLab: `./kevm klab-run tests/ethereum-tests/...` -- Run a proof under KLab: `./kevm klab-prove tests/ethereum-tests/...` - -- Environment variables `MODE` and `SCHEDULE` control how KEVM executes. -- `MODE` can be `NORMAL` or `VMTESTS`. -- `SCHEDULE` can be `DEFAULT`, `FRONTIER`, `HOMESTEAD`, `TANGERINE_WHISTLE`, `SPURIOUS_DRAGON`, `BYZANTIUM`, `CONSTANTINOPLE`, or `PETERSBURG`. - -Introduction to KEVM --------------------- - -- [data.md](../data.md) defines data-structures of EVM. -- [network.md](../network.md) defines the EVMC status codes. -- [evm.md](../evm.md) defines the semantics itself. -- [driver.md](../driver.md) defines the testing harness. -- [edsl.md](../edsl.md) defines a DSL for aiding specification for proofs. -- [evm-node.md](../evm-node.md) defines the protobuf interface to use KEVM over RPC. - -Understanding the K Prover: Single Opcode ------------------------------------------ - -File `add-spec.k`: - -```k -requires "evm.k" - -module ADD-SPEC - imports EVM - - rule #next [ ADD ] => . ... - SCHEDULE - W0 : W1 : WS => chop(W0 +Int W1) : WS - PCOUNT => PCOUNT +Int 1 - G => G -Int Gverylow < SCHEDULE > - requires G >=Int Gverylow < SCHEDULE > - andBool notBool ( #stackUnderflow ( W0 : W1 : WS , ADD ) - orBool #stackOverflow ( W0 : W1 : WS , ADD ) - ) -endmodule -``` - -. . . - -- `./kevm prove add-spec.k --def-module EVM` -- `./kevm klab-prove add-spec.k --def-module EVM` -- `./kevm klab-view add-spec.k --def-module EVM` - -. . . - -- Try with side-conditions removed. - -LTL Runtime Verification ------------------------- - -- Compile semantics with `media/201908-trufflecon/kevm-ltl.md`, which instruments semantics (*without* modifying it). -- Build definition: - - ```sh - cp media/201908-trufflecon/kevm-ltl.md kevm-ltl.md - make MAIN_MODULE=KEVM-LTL MAIN_DEFN_FILE=kevm-ltl build-llvm - ``` - -- Try verifying a property: - - ```sh - ./kevm run --backend llvm media/201908-trufflecon/addition.evm -cLTLFORMULA='eventually revert' - ./kevm run --backend llvm media/201908-trufflecon/addition.evm -cLTLFORMULA='always ((~ overflow) \/ eventually revert)' - ``` - -Thanks! -------- - -- TruffleCon for hosting us! -- You all for attending! diff --git a/media/201908-trufflecon-workshop/index.html b/media/201908-trufflecon-workshop/index.html new file mode 100644 index 0000000000..39f531c2a8 --- /dev/null +++ b/media/201908-trufflecon-workshop/index.html @@ -0,0 +1,450 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Overview

+
    +
  • Install KEVM and KLab on your machine
  • +
  • Simple uses of the ./kevm script
  • +
  • (Brief) introduction to KEVM
  • +
  • Verification examples: Single opcode (ADD), ERC20 transfer function
  • +
  • LTL runtime verification example
  • +
+

Install KEVM: Docker Way

+

Get Docker Container

+
docker login
+# it will ask for username and password
+# email will NOT work, they need their dockerhub USERNAME
+# Proxy user: ehildenbproxy
+# Proxy pass: ehildenb-proxy
+
+docker run -it -u user -w /home/user/evm-semantics  \
+    runtimeverificationinc/evm-semantics:trufflecon
+
+

Setup Environment

+
cd ../
+eval $(cat env)
+cd evm-semantics
+which klab
+
+

Install KEVM: From Source

+

KEVM

+ +

. . .

+

KLab

+
    +
  • +

    Branch master of KLab: https://github.com/dapphub/klab

    +
  • +
  • +

    Build instructions in README.

    +
    make deps-npm
    +
    +
  • +
  • +

    Patch KLab (comment lines 90 - 94 of lib/behavior.js).

    +
  • +
  • +

    Should be able to run (in KEVM repo with klab/bin on your PATH):

    +
    ./kevm klab-prove add-spec.k
    +./kevm klab-view  add-spec.k
    +
    +
  • +
+

./kevm help

+
usage: ./kevm run        [--backend (ocaml|java|llvm|haskell)] <pgm>  <K arg>*
+       ./kevm interpret  [--backend (ocaml|llvm)]              <pgm>  <interpreter arg>*
+       ./kevm kast       [--backend (ocaml|java)]              <pgm>  <output format> <K arg>*
+       ./kevm prove      [--backend (java|haskell)]            <spec> <K arg>* -m <def_module>
+       ./kevm search     [--backend (java|haskell)]            <pgm>  <pattern> <K arg>*
+       ./kevm klab-run                                         <pgm>  <K arg>*
+       ./kevm klab-prove                                       <spec> <K arg>* -m <def_module>
+       ./kevm klab-view                                        <spec>
+
+   ./kevm run       : Run a single EVM program
+   ./kevm interpret : Run JSON EVM programs without K Frontend (external parser)
+   ./kevm kast      : Parse an EVM program and output it in a supported format
+   ./kevm prove     : Run an EVM K proof
+   ./kevm search    : Search for a K pattern in an EVM program execution
+   ./kevm klab-(run|prove) : Run program or prove spec and dump StateLogs which KLab can read
+   ./kevm klab-view : View the statelog associated with a given program or spec
+
+   Note: <pgm> is a path to a file containing an EVM program/test.
+         <spec> is a K specification to be proved.
+         <K arg> is an argument you want to pass to K.
+         <interpreter arg> is an argument you want to pass to the derived interpreter.
+         <output format> is the format for Kast to output the term in.
+         <pattern> is the configuration pattern to search for.
+         <def_module> is the module to take as axioms when doing verification.
+
+   klab-view: Make sure that the 'klab/bin' directory is on your PATH to use this option.
+
+

./kevm examples

+
    +
  • +

    Run a test: ./kevm run tests/etheremu-tests/...

    +
  • +
  • +

    Interpret a test (fast): ./kevm interpret tests/etheremu-tests/...

    +
  • +
  • +

    Run a proof: ./kevm prove tests/specs/*-spec.k

    +
  • +
  • +

    Run a test under KLab: ./kevm klab-run tests/ethereum-tests/...

    +
  • +
  • +

    Run a proof under KLab: ./kevm klab-prove tests/ethereum-tests/...

    +
  • +
  • +

    Environment variables MODE and SCHEDULE control how KEVM executes.

    +
  • +
  • +

    MODE can be NORMAL or VMTESTS.

    +
  • +
  • +

    SCHEDULE can be DEFAULT, FRONTIER, HOMESTEAD, TANGERINE_WHISTLE, SPURIOUS_DRAGON, BYZANTIUM, CONSTANTINOPLE, or PETERSBURG.

    +
  • +
+

Introduction to KEVM

+
    +
  • data.md defines data-structures of EVM.
  • +
  • network.md defines the EVMC status codes.
  • +
  • evm.md defines the semantics itself.
  • +
  • driver.md defines the testing harness.
  • +
  • edsl.md defines a DSL for aiding specification for proofs.
  • +
  • evm-node.md defines the protobuf interface to use KEVM over RPC.
  • +
+

Understanding the K Prover: Single Opcode

+

File add-spec.k:

+
requires "evm.k"
+
+module ADD-SPEC
+    imports EVM
+
+    rule <k> #next [ ADD ] => . ... </k>
+         <schedule> SCHEDULE </schedule>
+         <wordStack> W0 : W1 : WS => chop(W0 +Int W1) : WS </wordStack>
+         <pc> PCOUNT => PCOUNT +Int 1 </pc>
+         <gas> G => G -Int Gverylow < SCHEDULE > </gas>
+      requires G >=Int Gverylow < SCHEDULE >
+       andBool notBool ( #stackUnderflow ( W0 : W1 : WS , ADD )
+                  orBool #stackOverflow  ( W0 : W1 : WS , ADD )
+                       )
+endmodule
+
+

. . .

+
    +
  • ./kevm prove add-spec.k --def-module EVM
  • +
  • ./kevm klab-prove add-spec.k --def-module EVM
  • +
  • ./kevm klab-view add-spec.k --def-module EVM
  • +
+

. . .

+
    +
  • Try with side-conditions removed.
  • +
+

LTL Runtime Verification

+
    +
  • +

    Compile semantics with media/201908-trufflecon/kevm-ltl.md, which instruments semantics (without modifying it).

    +
  • +
  • +

    Build definition:

    +
    cp media/201908-trufflecon/kevm-ltl.md kevm-ltl.md
    +make MAIN_MODULE=KEVM-LTL MAIN_DEFN_FILE=kevm-ltl build-llvm
    +
    +
  • +
  • +

    Try verifying a property:

    +
    ./kevm run --backend llvm media/201908-trufflecon/addition.evm -cLTLFORMULA='eventually revert'
    +./kevm run --backend llvm media/201908-trufflecon/addition.evm -cLTLFORMULA='always ((~ overflow) \/ eventually revert)'
    +
    +
  • +
+

Thanks!

+
    +
  • TruffleCon for hosting us!
  • +
  • You all for attending!
  • +
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/media/201908-trufflecon/add-gas-spec.k b/media/201908-trufflecon/add-gas-spec.k deleted file mode 100644 index f72dcaebf9..0000000000 --- a/media/201908-trufflecon/add-gas-spec.k +++ /dev/null @@ -1,14 +0,0 @@ -requires "evm.k" - -module ADD-GAS-SPEC - imports EVM - - rule #next [ ADD ] => . ... - SCHEDULE - W0 : W1 : WS => chop(W0 +Int W1) : WS - PCOUNT => PCOUNT +Int 1 - G => G -Int Gverylow < SCHEDULE > - requires notBool ( #stackUnderflow ( W0 : W1 : WS , ADD ) - orBool #stackOverflow ( W0 : W1 : WS , ADD ) - ) -endmodule diff --git a/media/201908-trufflecon/add-overflow-spec.k b/media/201908-trufflecon/add-overflow-spec.k deleted file mode 100644 index 86c28ead47..0000000000 --- a/media/201908-trufflecon/add-overflow-spec.k +++ /dev/null @@ -1,14 +0,0 @@ -requires "evm.k" - -module ADD-OVERFLOW-SPEC - imports EVM - - rule #next [ ADD ] => . ... - SCHEDULE - W0 : W1 : WS => chop(W0 +Int W1) : WS - PCOUNT => PCOUNT +Int 1 - G => G -Int Gverylow < SCHEDULE > - requires G >=Int Gverylow < SCHEDULE > - andBool notBool ( #stackUnderflow ( W0 : W1 : WS , ADD ) - ) -endmodule diff --git a/media/201908-trufflecon/add-spec.k b/media/201908-trufflecon/add-spec.k deleted file mode 100644 index 4d01e97045..0000000000 --- a/media/201908-trufflecon/add-spec.k +++ /dev/null @@ -1,15 +0,0 @@ -requires "evm.k" - -module ADD-SPEC - imports EVM - - rule #next [ ADD ] => . ... - SCHEDULE - W0 : W1 : WS => chop(W0 +Int W1) : WS - PCOUNT => PCOUNT +Int 1 - G => G -Int Gverylow < SCHEDULE > - requires G >=Int Gverylow < SCHEDULE > - andBool notBool ( #stackUnderflow ( W0 : W1 : WS , ADD ) - orBool #stackOverflow ( W0 : W1 : WS , ADD ) - ) -endmodule diff --git a/media/201908-trufflecon/addition.evm b/media/201908-trufflecon/addition.evm deleted file mode 100644 index ee44b00f30..0000000000 --- a/media/201908-trufflecon/addition.evm +++ /dev/null @@ -1,9 +0,0 @@ -load { "gas" : 10000000 - // Query: always ((~ overflow) \/ eventually revert) - // , "code" : UNSAFEADD(100 , 100) // True - // , "code" : UNSAFEADD(maxUInt256 , 100) // False - // , "code" : SAFEADD(100 , 100) // True - , "code" : SAFEADD(maxUInt256 , 100) // True - } - -start diff --git a/media/201908-trufflecon/kevm-ltl.md b/media/201908-trufflecon/kevm-ltl.md deleted file mode 100644 index 62a5c4f22b..0000000000 --- a/media/201908-trufflecon/kevm-ltl.md +++ /dev/null @@ -1,169 +0,0 @@ -```k -requires "evm.k" - -module LTL - imports BOOL - imports SET - imports LIST - - configuration - - $LTLFORMULA:LTLFormula - .EventId - .Set - .List - - - syntax EventId ::= ".EventId" - // ----------------------------- - - syntax KItem ::= EventId "{" Set "}" - // ------------------------------------ - - syntax KItem ::= LTLFormula - // --------------------------- - - syntax LTLFormula ::= LTLderive ( LTLFormula , Set ) [function] - // --------------------------------------------------------------- - - syntax LTLEvent - // --------------- - - syntax LTLAtom ::= "True" - | "False" - // -------------------------- - rule LTLderive(LTLA:LTLAtom, _) => LTLA - - syntax LTLFormula ::= "(" LTLFormula ")" [bracket] - | LTLAtom - | LTLEvent - // ------------------------------ - rule LTLderive(E:LTLEvent, ES) => True requires E in ES - rule LTLderive(E:LTLEvent, ES) => False requires notBool E in ES - - syntax LTLFormula ::= "~" LTLFormula - | LTLFormula "\\/" LTLFormula - | LTLFormula "/\\" LTLFormula - // ------------------------------------------------- - rule ~ True => False [anywhere] - rule ~ False => True [anywhere] - - rule True \/ FORM2 => True [anywhere] - rule FORM1 \/ True => True [anywhere] - - rule False \/ FORM2 => FORM2 [anywhere] - rule FORM1 \/ False => FORM1 [anywhere] - - rule True /\ FORM2 => FORM2 [anywhere] - rule FORM1 /\ True => FORM1 [anywhere] - - rule False /\ FORM2 => False [anywhere] - rule FORM1 /\ False => False [anywhere] - - rule LTLderive(~ FORM , ES) => ~ LTLderive(FORM, ES) - rule LTLderive(FORM1 \/ FORM2 , ES) => LTLderive(FORM1, ES) \/ LTLderive(FORM2, ES) - rule LTLderive(FORM1 /\ FORM2 , ES) => LTLderive(FORM1, ES) /\ LTLderive(FORM2, ES) - - syntax LTLFormula ::= LTLFormula "->" LTLFormula [macro] - // -------------------------------------------------------- - rule FORM1 -> FORM2 => (~ FORM1) \/ FORM2 - - syntax LTLFormula ::= "always" LTLFormula - | "eventually" LTLFormula - // --------------------------------------------- - rule LTLderive(always FORM, ES) => LTLderive(FORM, ES) /\ always FORM - rule LTLderive(eventually FORM, ES) => LTLderive(FORM, ES) \/ eventually FORM - - syntax LTLFormula ::= LTLterminate ( LTLFormula ) [function] - // ------------------------------------------------------------ - rule LTLterminate(~ FORM1) => ~ LTLterminate(FORM1) - rule LTLterminate(FORM1 /\ FORM2) => LTLterminate(FORM1) /\ LTLterminate(FORM2) - rule LTLterminate(FORM1 \/ FORM2) => LTLterminate(FORM1) \/ LTLterminate(FORM2) - - rule LTLterminate(always _) => True - rule LTLterminate(eventually _) => False -endmodule - -module KEVM-LTL - imports EVM - imports LTL - - configuration - - - - - - syntax EthereumSimulation ::= EthereumCommand | EthereumCommand EthereumSimulation - // ---------------------------------------------------------------------------------- - rule ETC:EthereumCommand ETS:EthereumSimulation => ETC ~> ETS ... - - syntax JSON ::= OpCodes | Int - // ----------------------------- - - syntax EthereumCommand ::= "load" JSON | "start" - // ------------------------------------------------ - rule load { "gas" : GAVAIL , "code" : OPS:OpCodes , .JSONList } => . ... - _ => GAVAIL - _ => #asMapOpCodes(OPS) - _ => 0 - - rule start => #execute ... - - syntax OpCodes ::= UNSAFEADD ( Int , Int ) [function] - | SAFEADD ( Int , Int ) [function] - // ----------------------------------------------------- - rule UNSAFEADD(X, Y) => PUSH(32, X) ; PUSH(32, Y) ; ADD ; .OpCodes - rule SAFEADD(X, Y) => PUSH(32, X) ; PUSH(32, Y) ; ADD ; PUSH(32, 0) ; MSTORE // add - ; PUSH(32, X) ; PUSH(32, 0) ; MLOAD ; GT ; PUSH(32, 372) ; JUMPI // check overflow - ; PUSH(32, Y) ; PUSH(32, 0) ; MLOAD ; GT ; PUSH(32, 372) ; JUMPI // check overflow - ; PUSH(32, 0) ; PUSH(32, 0) ; REVERT // revert - ; JUMPDEST ; PUSH(32, 0) ; MLOAD ; .OpCodes // no revert - - syntax EventId ::= Int - // ---------------------- - rule #execute ... - PCOUNT - FORM => LTLderive(FORM, EVENTS) - EID => PCOUNT - EVENTS => .Set - TRACE:List (.List => ListItem(EID { EVENTS })) - requires EID =/=K PCOUNT - [priority(24)] - - rule #halt - FORM => LTLderive(FORM, EVENTS) - EID => .EventId - EVENTS => .Set - TRACE:List (.List => ListItem(EID { EVENTS })) - requires EID =/=K .EventId - [priority(24)] - - rule #halt - FORM => LTLterminate(FORM) - .EventId - requires notBool isLTLAtom(FORM) - - syntax LTLEvent ::= "overflow" - // ------------------------------ - rule ADD W0 W1 ... - EVENTS (.Set => SetItem(overflow)) - requires notBool overflow in EVENTS - andBool W0 +Word W1 =/=Int W0 +Int W1 - [priority(24)] - - syntax LTLEvent ::= "revert" - // ---------------------------- - rule REVERT _ _ ... - EVENTS (.Set => SetItem(revert)) - requires notBool revert in EVENTS - [priority(24)] - - syntax LTLEvent ::= "invalid" - // ----------------------------- - rule INVALID ... - EVENTS (.Set => SetItem(invalid)) - requires notBool invalid in EVENTS - [priority(24)] -endmodule -``` diff --git a/media/201908-trufflecon/kevm-ltl/index.html b/media/201908-trufflecon/kevm-ltl/index.html new file mode 100644 index 0000000000..cea1e644a2 --- /dev/null +++ b/media/201908-trufflecon/kevm-ltl/index.html @@ -0,0 +1,347 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+
requires "evm.k"
+
+module LTL
+    imports BOOL
+    imports SET
+    imports LIST
+
+    configuration
+      <ltl>
+        <formula> $LTLFORMULA:LTLFormula </formula>
+        <eventsId> .EventId </eventsId>
+        <events> .Set </events>
+        <trace> .List </trace>
+      </ltl>
+
+    syntax EventId ::= ".EventId"
+ // -----------------------------
+
+    syntax KItem ::= EventId "{" Set "}"
+ // ------------------------------------
+
+    syntax KItem ::= LTLFormula
+ // ---------------------------
+
+    syntax LTLFormula ::= LTLderive ( LTLFormula , Set ) [function]
+ // ---------------------------------------------------------------
+
+    syntax LTLEvent
+ // ---------------
+
+    syntax LTLAtom ::= "True"
+                     | "False"
+ // --------------------------
+    rule LTLderive(LTLA:LTLAtom, _) => LTLA
+
+    syntax LTLFormula ::= "(" LTLFormula ")" [bracket]
+                        | LTLAtom
+                        | LTLEvent
+ // ------------------------------
+    rule LTLderive(E:LTLEvent, ES) => True  requires         E in ES
+    rule LTLderive(E:LTLEvent, ES) => False requires notBool E in ES
+
+    syntax LTLFormula ::= "~" LTLFormula
+                        | LTLFormula "\\/" LTLFormula
+                        | LTLFormula "/\\" LTLFormula
+ // -------------------------------------------------
+    rule ~ True  => False [anywhere]
+    rule ~ False => True  [anywhere]
+
+    rule True  \/ FORM2 => True [anywhere]
+    rule FORM1 \/ True  => True [anywhere]
+
+    rule False \/ FORM2 => FORM2 [anywhere]
+    rule FORM1 \/ False => FORM1 [anywhere]
+
+    rule True  /\ FORM2 => FORM2 [anywhere]
+    rule FORM1 /\ True  => FORM1 [anywhere]
+
+    rule False /\ FORM2 => False [anywhere]
+    rule FORM1 /\ False => False [anywhere]
+
+    rule LTLderive(~ FORM         , ES) => ~ LTLderive(FORM, ES)
+    rule LTLderive(FORM1 \/ FORM2 , ES) => LTLderive(FORM1, ES) \/ LTLderive(FORM2, ES)
+    rule LTLderive(FORM1 /\ FORM2 , ES) => LTLderive(FORM1, ES) /\ LTLderive(FORM2, ES)
+
+    syntax LTLFormula ::= LTLFormula "->" LTLFormula [macro]
+ // --------------------------------------------------------
+    rule FORM1 -> FORM2 => (~ FORM1) \/ FORM2
+
+    syntax LTLFormula ::= "always"     LTLFormula
+                        | "eventually" LTLFormula
+ // ---------------------------------------------
+    rule LTLderive(always     FORM, ES) => LTLderive(FORM, ES) /\ always     FORM
+    rule LTLderive(eventually FORM, ES) => LTLderive(FORM, ES) \/ eventually FORM
+
+    syntax LTLFormula ::= LTLterminate ( LTLFormula ) [function]
+ // ------------------------------------------------------------
+    rule LTLterminate(~ FORM1)        => ~ LTLterminate(FORM1)
+    rule LTLterminate(FORM1 /\ FORM2) => LTLterminate(FORM1) /\ LTLterminate(FORM2)
+    rule LTLterminate(FORM1 \/ FORM2) => LTLterminate(FORM1) \/ LTLterminate(FORM2)
+
+    rule LTLterminate(always _)     => True
+    rule LTLterminate(eventually _) => False
+endmodule
+
+module KEVM-LTL
+    imports EVM
+    imports LTL
+
+    configuration
+      <kevm-ltl>
+        <kevm/>
+        <ltl/>
+      </kevm-ltl>
+
+    syntax EthereumSimulation ::= EthereumCommand | EthereumCommand EthereumSimulation
+ // ----------------------------------------------------------------------------------
+    rule <k> ETC:EthereumCommand ETS:EthereumSimulation => ETC ~> ETS ... </k>
+
+    syntax JSON ::= OpCodes | Int
+ // -----------------------------
+
+    syntax EthereumCommand ::= "load" JSON | "start"
+ // ------------------------------------------------
+    rule <k> load { "gas" : GAVAIL , "code" : OPS:OpCodes , .JSONList } => . ... </k>
+         <gas> _ => GAVAIL </gas>
+         <program> _ => #asMapOpCodes(OPS) </program>
+         <exit-code> _ => 0 </exit-code>
+
+    rule <k> start => #execute ... </k>
+
+    syntax OpCodes ::= UNSAFEADD ( Int , Int ) [function]
+                     |   SAFEADD ( Int , Int ) [function]
+ // -----------------------------------------------------
+    rule UNSAFEADD(X, Y) => PUSH(32, X) ; PUSH(32, Y) ; ADD ; .OpCodes
+    rule   SAFEADD(X, Y) => PUSH(32, X) ; PUSH(32, Y) ; ADD ; PUSH(32, 0) ; MSTORE         // add
+                          ; PUSH(32, X) ; PUSH(32, 0) ; MLOAD ; GT ; PUSH(32, 372) ; JUMPI // check overflow
+                          ; PUSH(32, Y) ; PUSH(32, 0) ; MLOAD ; GT ; PUSH(32, 372) ; JUMPI // check overflow
+                          ; PUSH(32, 0) ; PUSH(32, 0) ; REVERT                             // revert
+                          ; JUMPDEST ; PUSH(32, 0) ; MLOAD ; .OpCodes                      // no revert
+
+    syntax EventId ::= Int
+ // ----------------------
+    rule <k> #execute ... </k>
+         <pc> PCOUNT </pc>
+         <formula> FORM => LTLderive(FORM, EVENTS) </formula>
+         <eventsId> EID => PCOUNT </eventsId>
+         <events> EVENTS => .Set </events>
+         <trace> TRACE:List (.List => ListItem(EID { EVENTS })) </trace>
+      requires EID =/=K PCOUNT
+      [priority(24)]
+
+    rule <k> #halt </k>
+         <formula> FORM => LTLderive(FORM, EVENTS) </formula>
+         <eventsId> EID => .EventId </eventsId>
+         <events> EVENTS => .Set </events>
+         <trace> TRACE:List (.List => ListItem(EID { EVENTS })) </trace>
+      requires EID =/=K .EventId
+      [priority(24)]
+
+    rule <k> #halt </k>
+         <formula> FORM => LTLterminate(FORM) </formula>
+         <eventsId> .EventId </eventsId>
+      requires notBool isLTLAtom(FORM)
+
+    syntax LTLEvent ::= "overflow"
+ // ------------------------------
+    rule <k> ADD W0 W1 ... </k>
+         <events> EVENTS (.Set => SetItem(overflow)) </events>
+      requires notBool overflow in EVENTS
+       andBool W0 +Word W1 =/=Int W0 +Int W1
+      [priority(24)]
+
+    syntax LTLEvent ::= "revert"
+ // ----------------------------
+    rule <k> REVERT _ _ ... </k>
+         <events> EVENTS (.Set => SetItem(revert)) </events>
+      requires notBool revert in EVENTS
+      [priority(24)]
+
+    syntax LTLEvent ::= "invalid"
+ // -----------------------------
+    rule <k> INVALID ... </k>
+         <events> EVENTS (.Set => SetItem(invalid)) </events>
+      requires notBool invalid in EVENTS
+      [priority(24)]
+endmodule
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + diff --git a/media/citations.md b/media/citations.md deleted file mode 100644 index 36c9ee09c8..0000000000 --- a/media/citations.md +++ /dev/null @@ -1,1151 +0,0 @@ - -References ----------- - ---- -references: -- id: luumaking - type: no-type - author: - - family: Luu - given: Loi - - family: Chu - given: Duc-Hiep - - family: Olickel - given: Hrishi - - family: Saxena - given: Prateek - - family: Hobor - given: Aquinas - issued: - - year: '2016' - title: Making smart contracts smarter - publisher: Cryptology ePrint Archive, Report 2016/633 - note: - -- id: hiraidefining - type: no-type - author: - - family: Hirai - given: Yoichi - issued: - - year: '2017' - title: Defining the ethereum virtual machine for interactive theorem provers - publisher: WSTC17, International Conference on Financial Cryptography and Data Security - -- id: guth2013formal - type: article-journal - author: - - family: Guth - given: Dwight - issued: - - year: '2013' - title: A formal semantics of Python 3.3 - note: - -- id: mulligan2014lem - type: paper-conference - author: - - family: Mulligan - given: Dominic P - - family: Owens - given: Scott - - family: Gray - given: Kathryn E - - family: Ridge - given: Tom - - family: Sewell - given: Peter - issued: - - year: '2014' - title: 'Lem: Reusable engineering of real-world semantics' - title-short: Lem - container-title: ACM sigplan notices - collection-number: '9' - publisher: ACM - page: '175-188' - volume: '49' - -- id: chen2003towards - type: article-journal - author: - - family: Chen - given: Feng - - family: Roşu - given: Grigore - issued: - - year: '2003' - title: 'Towards monitoring-oriented programming: A paradigm combining specification - and implementation' - title-short: Towards monitoring-oriented programming - container-title: Electronic Notes in Theoretical Computer Science - publisher: Elsevier - page: '108-127' - volume: '89' - issue: '2' - -- id: kapproach - type: no-type - author: - - family: Rosu - given: Grigore - - literal: others - issued: - - year: '2017' - title: Programming language design and semantics - publisher: Formal Systems Lab, University of Illinois - note: - -- id: szabo1994smart - type: article-journal - author: - - family: Szabo - given: Nick - issued: - - year: '1994' - title: Smart contracts - container-title: Unpublished manuscript - note: - -- id: peters2016understanding - type: chapter - author: - - family: Peters - given: Gareth W - - family: Panayi - given: Efstathios - issued: - - year: '2016' - title: 'Understanding modern banking ledgers through blockchain technologies: - Future of transaction processing and smart contracts on the internet of money' - title-short: Understanding modern banking ledgers through blockchain technologies - container-title: Banking beyond banks and money - publisher: Springer - page: '239-278' - -- id: atzei2016survey - type: article-journal - author: - - family: Atzei - given: Nicola - - family: Bartoletti - given: Massimo - - family: Cimoli - given: Tiziana - issued: - - year: '2016' - title: A survey of attacks on Ethereum smart contracts. - container-title: IACR Cryptology ePrint Archive - page: '1007' - volume: '2016' - -- id: narayanan2016bitcoin - type: book - author: - - family: Narayanan - given: Arvind - - family: Bonneau - given: Joseph - - family: Felten - given: Edward - - family: Miller - given: Andrew - - family: Goldfeder - given: Steven - issued: - - year: '2016' - title: 'Bitcoin and cryptocurrency technologies: A comprehensive introduction' - title-short: Bitcoin and cryptocurrency technologies - publisher: Princeton University Press - -- id: sasson2014zerocash - type: paper-conference - author: - - family: Sasson - given: Eli Ben - - family: Chiesa - given: Alessandro - - family: Garman - given: Christina - - family: Green - given: Matthew - - family: Miers - given: Ian - - family: Tromer - given: Eran - - family: Virza - given: Madars - issued: - - year: '2014' - title: 'Zerocash: Decentralized anonymous payments from bitcoin' - title-short: Zerocash - container-title: Security and privacy (sp), 2014 ieee symposium on - publisher: IEEE - page: '459-474' - -- id: ethereum - type: no-type - author: - - family: Buterin - given: Vitalik - - literal: Ethereum Foundation - issued: - - year: '2013' - title: Ethereum White Paper - publisher: Ethereum - note: - -- id: barras1997coq - type: thesis - author: - - family: Barras - given: Bruno - - family: Boutin - given: Samuel - - family: Cornes - given: Cristina - - family: Courant - given: Judicaël - - family: Filliatre - given: Jean-Christophe - - family: Gimenez - given: Eduardo - - family: Herbelin - given: Hugo - - family: Huet - given: Gerard - - family: Munoz - given: Cesar - - family: Murthy - given: Chetan - - literal: others - issued: - - year: '1997' - title: 'The coq proof assistant reference manual: Version 6.1' - title-short: The coq proof assistant reference manual - publisher: Inria - genre: PhD thesis - -- id: ethsplit - type: article-journal - author: - - family: Quenston - given: Andrew - issued: - - year: '2016' - title: Ethereum’s blockchain accidentally splits - publisher: CryptoCoinsNews - note: - -- id: daofork - type: article-journal - author: - - family: Castillo - given: Michael - dropping-particle: del - issued: - - year: '2016' - title: Ethereum executes blockchain hard fork to return DAO funds - publisher: Coindesk - note: - -- id: icorush - type: article-journal - author: - - family: Melendez - given: Steven - issued: - - year: '2017' - title: 'Inside the ico bubble: Why initial coin offerings have raised more than - \$1 billion since January' - title-short: Inside the ico bubble - publisher: Fast Company - note: - -- id: hkg - type: article-journal - author: - - family: Manning - given: Jim - issued: - - year: '2017' - title: Ether.Camp’s hkg token has a bug and needs to be reissued - publisher: ETHNews - note: - -- id: paritymultisig - type: article-journal - author: - - family: Breidenbach - given: Lorenz - - family: Daian - given: Phil - - family: Juels - given: Ari - - family: Sirer - given: Emin Gün - issued: - - year: '2017' - title: An in-depth look at the parity multisig bug - publisher: Hacking Distributed - note: - -- id: paritymultisig2 - type: no-type - author: - - family: Steiner - given: Jutta - issued: - - year: '2017' - title: 'Security is a process: A postmortem on the parity multi-sig library self-destruct' - title-short: Security is a process - publisher: Ethcore - note: - -- id: smartbillions - type: no-type - author: - - family: Solana - given: Jasmine - issued: - - year: '2017' - title: \$500K hack challenge backfires on blockchain lottery SmartBillions - publisher: CalvinAyre - note: - -- id: mkr - type: article-journal - author: - - family: jupiter0 - issued: - - year: '2016' - title: 'From the MAKER DAO slack: “Today we discovered a vulnerability in the - ETH token wrapper which would let anyone drain it.”' - title-short: From the MAKER DAO slack - publisher: Reddit - note: - -- id: eea - type: article-journal - author: - - family: Ainger - given: Neil - issued: - - year: '2017' - title: Bigger than bitcoin? Enterprise Ethereum Alliance grows in size - publisher: CNBC - note: - -- id: moser2013inquiry - type: paper-conference - author: - - family: Moser - given: Malte - - family: Bohme - given: Rainer - - family: Breuker - given: Dominic - issued: - - year: '2013' - title: An inquiry into money laundering tools in the bitcoin ecosystem - container-title: ECrime researchers summit (eCRS), 2013 - publisher: IEEE - page: '1-14' - -- id: coindeskformal - type: article-journal - author: - - family: Rizzo - given: Pete - issued: - - year: '2016' - title: In formal verification push, Ethereum seeks smart contract certainty - publisher: Coindesk - note: - -- id: daian2016runtime - type: paper-conference - author: - - family: Daian - given: Philip - - family: Guth - given: Dwight - - family: Hathhorn - given: Chris - - family: Li - given: Yilong - - family: Pek - given: Edgar - - family: Saxena - given: Manasvi - - family: Serbanuta - given: Traian Florin - - family: Rosu - given: Grigore - issued: - - year: '2016' - month: '09' - title: 'Runtime verification at work: A tutorial' - title-short: Runtime verification at work - container-title: Runtime verification - 16th international conference, RV 2016 madrid, - spain, september 23-30, 2016, proceedings - collection-title: Lecture notes in computer science - publisher: Springer - page: '46-67' - volume: '10012' - DOI: http://dx.doi.org/10.1007/978-3-319-46982-9_5 - -- id: ellison2012executable - type: paper-conference - author: - - family: Ellison - given: Chucky - - family: Rosu - given: Grigore - issued: - - year: '2012' - month: 01 - title: An executable formal semantics of c with applications - container-title: Proceedings of the 39th acm sigplan-sigact symposium on principles - of programming languages (popl’12) - publisher: ACM - page: '533-544' - DOI: http://doi.acm.org/10.1145/2103656.2103719 - -- id: thinkingsecurity - type: article-journal - author: - - family: Buterin - given: Vitalik - issued: - - year: '2016' - title: Thinking about smart contract security - publisher: Ethereum Blog - note: - -- id: ethfoundationformal - type: article-journal - author: - - family: Reitwiessner - given: Christian - issued: - - year: '2016' - title: 'Dev update: Formal methods' - title-short: Dev update - publisher: Ethereum Blog - note: - -- id: ong2015evaluating - type: article-journal - author: - - family: Ong - given: Bobby - - family: Lee - given: Teik Ming - - family: Li - given: Guo - - family: Chuen - given: DLK - issued: - - year: '2015' - title: Evaluating the potential of alternative cryptocurrencies - container-title: 'Handbook of digital currency. Amsterdam: Elsevier' - page: '81-135' - -- id: wilkinson2014storj - type: article-journal - author: - - family: Wilkinson - given: Shawn - - family: Boshevski - given: Tome - - family: Brandoff - given: Josh - - family: Buterin - given: Vitalik - issued: - - year: '2014' - title: Storj a peer-to-peer cloud storage network - publisher: Citeseer - note: - -- id: delmolino2016step - type: paper-conference - author: - - family: Delmolino - given: Kevin - - family: Arnett - given: Mitchell - - family: Kosba - given: Ahmed - - family: Miller - given: Andrew - - family: Shi - given: Elaine - issued: - - year: '2016' - title: 'Step by step towards creating a safe smart contract: Lessons and insights - from a cryptocurrency lab' - title-short: Step by step towards creating a safe smart contract - container-title: International conference on financial cryptography and data security - publisher: Springer - page: '79-94' - -- id: kogias2016enhancing - type: paper-conference - author: - - family: Kogias - given: Eleftherios Kokoris - - family: Jovanovic - given: Philipp - - family: Gailly - given: Nicolas - - family: Khoffi - given: Ismail - - family: Gasser - given: Linus - - family: Ford - given: Bryan - issued: - - year: '2016' - title: Enhancing bitcoin security and performance with strong consistency via collective - signing - container-title: 25th USENIX security symposium (USENIX security 16) - publisher: USENIX Association - publisher-place: Austin, TX - page: '279-296' - URL: https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/kogias - ISBN: '978-1-931971-32-4' - -- id: stefanescu-park-yuwen-li-rosu-2016-oopsla - type: paper-conference - author: - - family: Ştefănescu - given: Andrei - - family: Park - given: Daejun - - family: Yuwen - given: Shijiao - - family: Li - given: Yilong - - family: Roşu - given: Grigore - issued: - - year: '2016' - month: '11' - title: Semantics-based program verifiers for all languages - container-title: Proceedings of the 31th conference on object-oriented programming, - systems, languages, and applications (oopsla’16) - publisher: ACM - -- id: rosu-serbanuta-2010-jlap - type: article-journal - author: - - family: Roşu - given: Grigore - - family: Şerbănuţă - given: Traian Florin - issued: - - year: '2010' - title: An overview of the K semantic framework - container-title: Journal of Logic and Algebraic Programming - page: '397-434' - volume: '79' - issue: '6' - note: - DOI: 10.1016/j.jlap.2010.03.012 - -- id: serbanuta-rosu-2010-wrla - type: paper-conference - author: - - family: Şerbanuţă - given: Traian Florin - - family: Roşu - given: Grigore - issued: - - year: '2010' - month: 03 - title: 'K-Maude: A rewriting based tool for semantics of programming languages' - title-short: K-Maude - container-title: Proceedings of the 8th international workshop on rewriting logic - and its applications (wrla’10) - publisher: Springer - page: '104-122' - DOI: http://dx.doi.org/10.1007/978-3-642-16310-4_8 - -- id: nakamoto2008bitcoin - type: no-type - author: - - family: Nakamoto - given: Satoshi - issued: - - year: '2008' - title: 'Bitcoin: A peer-to-peer electronic cash system' - title-short: Bitcoin - note: - -- id: dao-attack - type: no-type - author: - - family: Daian - given: Phil - issued: - - year: '2016' - title: DAO attack - note: - -- id: hathhorn-ellison-rosu-2015-pldi - type: paper-conference - author: - - family: Hathhorn - given: Chris - - family: Ellison - given: Chucky - - family: Roşu - given: Grigore - issued: - - year: '2015' - month: 06 - title: Defining the undefinedness of c - container-title: Proceedings of the 36th acm sigplan conference on programming language - design and implementation (pldi’15) - publisher: ACM - page: '336-345' - DOI: http://dx.doi.org/10.1145/2813885.2737979 - -- id: bogdanas-rosu-2015-popl - type: paper-conference - author: - - family: Bogdănaş - given: Denis - - family: Roşu - given: Grigore - issued: - - year: '2015' - month: 01 - title: '[K-Java: A Complete Semantics of Java]{.nocase}' - container-title: Proceedings of the 42nd symposium on principles of programming - languages (popl’15) - publisher: ACM - page: '445-456' - DOI: http://dx.doi.org/10.1145/2676726.2676982 - -- id: park-stefanescu-rosu-2015-pldi - type: paper-conference - author: - - family: Park - given: Daejun - - family: Ştefănescu - given: Andrei - - family: Roşu - given: Grigore - issued: - - year: '2015' - month: 06 - title: 'KJS: A complete formal semantics of JavaScript' - title-short: KJS - container-title: Proceedings of the 36th acm sigplan conference on programming language - design and implementation (pldi’15) - publisher: ACM - page: '346-356' - DOI: http://dx.doi.org/10.1145/2737924.2737991 - -- id: ellison-2012-thesis - type: thesis - author: - - family: Ellison - given: Chucky - issued: - - year: '2012' - month: 07 - title: A formal semantics of C with applications - publisher: University of Illinois - genre: PhD thesis - -- id: stefanescu-ciobaca-mereuta-moore-serbanuta-rosu-2014-rta - type: paper-conference - author: - - family: Ştefănescu - given: Andrei - - family: Ciobâcă - given: Ştefan - - family: Mereuţă - given: Radu - - family: Moore - given: Brandon M. - - family: Şerbănuţă - given: Traian Florin - - family: Roşu - given: Grigore - issued: - - year: '2014' - month: 07 - title: All-path reachability logic - container-title: Proceedings of the joint 25th international conference on rewriting - techniques and applications and 12th international conference on typed lambda - calculi and applications (rta-tlca’14) - collection-title: LNCS - publisher: Springer - page: '425-440' - volume: '8560' - DOI: http://dx.doi.org/10.1007/978-3-319-08918-8_29 - -- id: de2008z3 - type: paper-conference - author: - - family: De Moura - given: Leonardo - - family: Bjørner - given: Nikolaj - issued: - - year: '2008' - title: 'Z3: An efficient smt solver' - title-short: Z3 - container-title: International conference on tools and algorithms for the construction - and analysis of systems - publisher: Springer Berlin Heidelberg - page: '337-340' - -- id: guth-hathhorn-saxena-rosu-2016-cav - type: paper-conference - author: - - family: Guth - given: Dwight - - family: Hathhorn - given: Chris - - family: Saxena - given: Manasvi - - family: Rosu - given: Grigore - issued: - - year: '2016' - month: 07 - title: 'RV-Match: Practical semantics-based program analysis' - title-short: RV-Match - container-title: Computer aided verification - 28th international conference (CAV - 2016), toronto, on, canada, july 17-23, 2016, proceedings, part I - collection-title: LNCS - publisher: Springer - page: '447-453' - volume: '9779' - DOI: http://dx.doi.org/10.1007/978-3-319-41528-4_24 - -- id: fstar-etaps - type: paper-conference - author: - - family: Grishchenko - given: Ilya - - family: Maffei - given: Matteo - - family: Schneidewind - given: Clara - editor: - - family: Bauer - given: Lujo - - family: Küsters - given: Ralf - issued: - - year: '2018' - title: A semantic framework for the security analysis of ethereum smart contracts - container-title: Principles of security and trust - publisher: Springer International Publishing - publisher-place: Cham - page: '243-269' - abstract: 'Smart contracts are programs running on cryptocurrency (e.g., Ethereum) - blockchains, whose popularity stem from the possibility to perform financial transactions, - such as payments and auctions, in a distributed environment without need for any - trusted third party. Given their financial nature, bugs or vulnerabilities in - these programs may lead to catastrophic consequences, as witnessed by recent attacks. - Unfortunately, programming smart contracts is a delicate task that requires strong - expertise: Ethereum smart contracts are written in Solidity, a dedicated language - resembling JavaScript, and shipped over the blockchain in the EVM bytecode format. - In order to rigorously verify the security of smart contracts, it is of paramount - importance to formalize their semantics as well as the security properties of - interest, in particular at the level of the bytecode being executed.' - ISBN: '978-3-319-89722-6' - -- id: fstar-tr - type: article-journal - author: - - family: Grishchenko - given: Ilya - - family: Maffei - given: Matteo - - family: Schneidewind - given: Clara - issued: - - year: '2018' - title: A semantic framework for the security analysis of ethereum smart contracts. - technical report. - note: - -- id: wood2014ethereum - type: article-journal - author: - - family: Wood - given: Gavin - issued: - - year: '2014' - title: 'Ethereum: A secure decentralised generalised transaction ledger' - title-short: Ethereum - note: (Updated for EIP-150 in 2017) - -- id: solidity - type: no-type - author: - - literal: Ethereum - issued: - - year: '2017' - title: Ethereum solidity documentation - note: - -- id: serpent - type: no-type - author: - - literal: Ethereum - issued: - - year: '2017' - title: Ethereum serpent documentation - note: - -- id: ktoisabelle - type: no-type - author: - - family: Li - given: Liyi - issued: - - year: '2015' - title: K Framework to Isabelle - note: - -- id: why3 - type: chapter - author: - - family: Filliâtre - given: Jean-Christophe - - family: Paskevich - given: Andrei - editor: - - family: Felleisen - given: Matthias - - family: Gardner - given: Philippa - issued: - - year: '2013' - title: Why3 — where programs meet provers - container-title: 'Programming languages and systems: 22nd european symposium on - programming, esop 2013, held as part of the european joint conferences on theory - and practice of software, etaps 2013, rome, italy, march 16-24, 2013. proceedings' - publisher: Springer Berlin Heidelberg - publisher-place: Berlin, Heidelberg - page: '125-128' - URL: https://doi.org/10.1007/978-3-642-37036-6_8 - DOI: 10.1007/978-3-642-37036-6_8 - ISBN: '978-3-642-37036-6' - -- id: rosu-2015-rta - type: article-journal - author: - - family: Roşu - given: Grigore - issued: - - year: '2017' - title: Matching logic - container-title: Logical Methods in Computer Science - volume: to appear - DOI: http://arxiv.org/abs/1705.06312 - -- id: meseguer-20-years-rewriting - type: article-journal - author: - - family: Meseguer - given: José - issued: - - year: '2012' - title: Twenty years of rewriting logic - container-title: The Journal of Logic and Algebraic Programming - page: 721 - 781 - volume: '81' - issue: '7' - note: Rewriting Logic and its Applications - URL: http://www.sciencedirect.com/science/article/pii/S1567832612000707 - DOI: http://dx.doi.org/10.1016/j.jlap.2012.06.003 - ISSN: '1567-8326' - -- id: rosu-stefanescu-2012-fm - type: paper-conference - author: - - family: Roşu - given: Grigore - - family: Ştefănescu - given: Andrei - issued: - - year: '2012' - month: '8' - title: From Hoare Logic to Matching Logic Reachability - container-title: Proceedings of the 18th international symposium on formal methods - (fm’12) - collection-title: LNCS - publisher: Springer - page: '387-402' - volume: '7436' - abstract: 'Matching logic reachability has been recently proposed as an alternative - program verification approach. Unlike Hoare logic, where one defines a language-specific - proof system that needs to be proved sound for each language separately, matching - logic reachability provides a \*language-independent\* and \*sound\* proof system - that directly uses the trusted operational semantics of the language as axioms. - Matching logic reachability thus has a clear practical advantage: it eliminates - the need for an additional semantics of the same language in order to reason about - programs, and implicitly eliminates the need for tedious soundness proofs. What - is not clear, however, is whether matching logic reachability is as powerful as - Hoare logic. This paper introduces a technique to mechanically translate Hoare - logic proof derivations into equivalent matching logic reachability proof derivations. - The presented technique has two consequences: first, it suggests that matching - logic reachability has no theoretical limitation over Hoare logic; and second, - it provides a new approach to prove Hoare logics sound.' - DOI: http://dx.doi.org/10.1007/978-3-642-32759-9_32 - -- id: ethereum-abi - type: no-type - author: - - literal: Ethereum - issued: - - year: '2017' - title: Ethereum application binary support - note: - -- id: viper-url - type: no-type - author: - - literal: Ethereum - issued: - - year: '2017' - title: Viper - new experimental programming language - note: - -- id: viper-snapshot - type: no-type - author: - - literal: Ethereum - issued: - - year: '2017' - title: Viper compiler snapshot (commit a886850c1d) - note: - -- id: k-url - type: no-type - author: - - literal: Formal Systems Lab, UIUC - issued: - - year: '2006' - title: The K framework - note: - -- id: evm-repo - type: no-type - author: - - literal: KEVM Team - issued: - - year: '2017' - title: 'KEVM: Semantics of evm in k' - title-short: KEVM - publisher: - -- id: verified-smart-contracts - type: no-type - author: - - literal: KEVM - - literal: Runtime Verification - issued: - - year: '2018' - title: 'Github: Verified Smart Contracts' - title-short: Github - publisher: - -- id: yellowpaper-bug-136 - type: no-type - author: - - literal: KEVM Team - issued: - - year: '2017' - title: Yellowpaper Issue 136 - publisher: Link to issues removed for double blind review - -- id: yellowpaper-bug-160 - type: no-type - author: - - literal: KEVM Team - issued: - - year: '2017' - title: Yellowpaper Issue 160 - publisher: Link to issues removed for double blind review - -- id: yellowpaper-bug-216 - type: no-type - author: - - literal: KEVM Team - issued: - - year: '2017' - title: Yellowpaper Issue 216 - publisher: Link to issues removed for double blind review - -- id: ViperBugsReported - type: no-type - author: - - literal: KEVM Team - issued: - - year: '2017' - title: Viper Issue 410, 411, 448, 449, 450, 451, 453, 469 - publisher: , , - , , - , , - , - note: 'Accessed:' - -- id: semantics-based-verifiers - type: paper-conference - author: - - family: Ştefănescu - given: Andrei - - family: Park - given: Daejun - - family: Yuwen - given: Shijao - - family: Li - given: Yilong - - family: Roşu - given: Grigore - issued: - - year: '2016' - title: Semantics-based program verifiers for all languages - container-title: OOPSLA - publisher: ACM - page: '74-91' - DOI: 10.1145/2983990.2984027 - -- id: k-tutorial-url - type: no-type - author: - - literal: FSL, UIUC - issued: - - year: '2012' - title: K tutorial - publisher: - -- id: trailofbits-manticore - type: no-type - author: - - family: Bits - given: Trail - dropping-particle: of - issued: - - year: '2017' - title: 'Manticore: Symbolic execution for humans' - title-short: Manticore - publisher: - -- id: rosu-2017-lmcs - type: article-journal - author: - - family: Roşu - given: Grigore - issued: - - year: '2017' - title: Matching logic - container-title: Logical Methods in Computer Science - DOI: http://arxiv.org/abs/1705.06312 - -- id: erc-20-url - type: no-type - author: - - literal: The Ethereum Foundation - issued: - - year: '2017' - title: ERC20 token standard - publisher: - -- id: ethereum-tests-url - type: no-type - author: - - literal: The Ethereum Foundation - issued: - - year: '2015' - title: Ethereum tests - publisher: - -- id: viper-docs-url - type: no-type - author: - - literal: The Ethereum Foundation - issued: - - year: '2017' - title: Viper - publisher: - -- id: jellopaper - type: no-type - author: - - literal: KEVM Team - issued: - - year: '2017' - title: The evm semantic “jello paper" - publisher: - -- id: securify - type: no-type - author: - - literal: Software Reliability Lab, ETH Zurich - issued: - - year: '2017' - title: Securify formal verification of ethereum smart contracts - note: https://securify.ch/ - -- id: hildenbrandt-saxena-zhu-rodrigues-daian-guth-moore-zhang-park-rosu-2018-csf - type: paper-conference - author: - - family: Hildenbrandt - given: Everett - - family: Saxena - given: Manasvi - - family: Zhu - given: Xiaoran - - family: Rodrigues - given: Nishant - - family: Daian - given: Philip - - family: Guth - given: Dwight - - family: Moore - given: Brandon - - family: Zhang - given: Yi - - family: Park - given: Daejun - - family: Ştefănescu - given: Andrei - - family: Roşu - given: Grigore - issued: - - year: '2018' - title: 'KEVM: A complete semantics of the ethereum virtual machine' - title-short: KEVM - container-title: Computer security foundations symposium - abstract: 'A developing field of interest for the distributed systems and applied - cryptography communities is that of smart contracts: self-executing financial - instruments that synchronize their state, often through a blockchain. One such - smart contract system that has seen widespread practical adoption is Ethereum, - which has grown to a market capacity of 100 billion USD and clears an excess of - 500,000 daily transactions.Unfortunately, the rise of these technologies has been - marred by a series of costly bugs and exploits. Increasingly, the Ethereum community - has turned to formal methods and rigorous program analysis tools. This trend holds - great promise due to the relative simplicity of smart contracts and bounded-time - deterministic execution inherent to the Ethereum Virtual Machine (EVM).Here we - present KEVM, an executable formal specification of the EVM’s bytecode stack-based - language built with the Framework, designed to serve as a solid foundation for - further formal analyses. We empirically evaluate the correctness and performance - of KEVM using the official Ethereum test suite [@ethereum-tests-url]ethereum-tests-url. - To demonstrate the usability, several extensions of the semantics are presented - and two different-language implementations of the ERC20 Standard Token are verified - against the ERC20 specification. These results are encouraging for the executable - semantics approach to language prototyping and specification.' ---- diff --git a/media/citations/index.html b/media/citations/index.html new file mode 100644 index 0000000000..c311e51da7 --- /dev/null +++ b/media/citations/index.html @@ -0,0 +1,1563 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

References

+
+

references:

+
    +
  • +

    id: luumaking +type: no-type +author:

    +
      +
    • family: Luu +given: Loi
    • +
    • family: Chu +given: Duc-Hiep
    • +
    • family: Olickel +given: Hrishi
    • +
    • family: Saxena +given: Prateek
    • +
    • family: Hobor +given: Aquinas +issued:
    • +
    • year: '2016' +title: Making smart contracts smarter +publisher: Cryptology ePrint Archive, Report 2016/633 +note: http://eprint.iacr.org/2016/633
    • +
    +
  • +
  • +

    id: hiraidefining +type: no-type +author:

    +
      +
    • family: Hirai +given: Yoichi +issued:
    • +
    • year: '2017' +title: Defining the ethereum virtual machine for interactive theorem provers +publisher: WSTC17, International Conference on Financial Cryptography and Data Security
    • +
    +
  • +
  • +

    id: guth2013formal +type: article-journal +author:

    + +
  • +
  • +

    id: mulligan2014lem +type: paper-conference +author:

    +
      +
    • family: Mulligan +given: Dominic P
    • +
    • family: Owens +given: Scott
    • +
    • family: Gray +given: Kathryn E
    • +
    • family: Ridge +given: Tom
    • +
    • family: Sewell +given: Peter +issued:
    • +
    • year: '2014' +title: 'Lem: Reusable engineering of real-world semantics' +title-short: Lem +container-title: ACM sigplan notices +collection-number: '9' +publisher: ACM +page: '175-188' +volume: '49'
    • +
    +
  • +
  • +

    id: chen2003towards +type: article-journal +author:

    +
      +
    • family: Chen +given: Feng
    • +
    • family: Roşu +given: Grigore +issued:
    • +
    • year: '2003' +title: 'Towards monitoring-oriented programming: A paradigm combining specification +and implementation' +title-short: Towards monitoring-oriented programming +container-title: Electronic Notes in Theoretical Computer Science +publisher: Elsevier +page: '108-127' +volume: '89' +issue: '2'
    • +
    +
  • +
  • +

    id: kapproach +type: no-type +author:

    + +
  • +
  • +

    id: szabo1994smart +type: article-journal +author:

    + +
  • +
  • +

    id: peters2016understanding +type: chapter +author:

    +
      +
    • family: Peters +given: Gareth W
    • +
    • family: Panayi +given: Efstathios +issued:
    • +
    • year: '2016' +title: 'Understanding modern banking ledgers through blockchain technologies: +Future of transaction processing and smart contracts on the internet of money' +title-short: Understanding modern banking ledgers through blockchain technologies +container-title: Banking beyond banks and money +publisher: Springer +page: '239-278'
    • +
    +
  • +
  • +

    id: atzei2016survey +type: article-journal +author:

    +
      +
    • family: Atzei +given: Nicola
    • +
    • family: Bartoletti +given: Massimo
    • +
    • family: Cimoli +given: Tiziana +issued:
    • +
    • year: '2016' +title: A survey of attacks on Ethereum smart contracts. +container-title: IACR Cryptology ePrint Archive +page: '1007' +volume: '2016'
    • +
    +
  • +
  • +

    id: narayanan2016bitcoin +type: book +author:

    +
      +
    • family: Narayanan +given: Arvind
    • +
    • family: Bonneau +given: Joseph
    • +
    • family: Felten +given: Edward
    • +
    • family: Miller +given: Andrew
    • +
    • family: Goldfeder +given: Steven +issued:
    • +
    • year: '2016' +title: 'Bitcoin and cryptocurrency technologies: A comprehensive introduction' +title-short: Bitcoin and cryptocurrency technologies +publisher: Princeton University Press
    • +
    +
  • +
  • +

    id: sasson2014zerocash +type: paper-conference +author:

    +
      +
    • family: Sasson +given: Eli Ben
    • +
    • family: Chiesa +given: Alessandro
    • +
    • family: Garman +given: Christina
    • +
    • family: Green +given: Matthew
    • +
    • family: Miers +given: Ian
    • +
    • family: Tromer +given: Eran
    • +
    • family: Virza +given: Madars +issued:
    • +
    • year: '2014' +title: 'Zerocash: Decentralized anonymous payments from bitcoin' +title-short: Zerocash +container-title: Security and privacy (sp), 2014 ieee symposium on +publisher: IEEE +page: '459-474'
    • +
    +
  • +
  • +

    id: ethereum +type: no-type +author:

    + +
  • +
  • +

    id: barras1997coq +type: thesis +author:

    +
      +
    • family: Barras +given: Bruno
    • +
    • family: Boutin +given: Samuel
    • +
    • family: Cornes +given: Cristina
    • +
    • family: Courant +given: Judicaël
    • +
    • family: Filliatre +given: Jean-Christophe
    • +
    • family: Gimenez +given: Eduardo
    • +
    • family: Herbelin +given: Hugo
    • +
    • family: Huet +given: Gerard
    • +
    • family: Munoz +given: Cesar
    • +
    • family: Murthy +given: Chetan
    • +
    • literal: others +issued:
    • +
    • year: '1997' +title: 'The coq proof assistant reference manual: Version 6.1' +title-short: The coq proof assistant reference manual +publisher: Inria +genre: PhD thesis
    • +
    +
  • +
  • +

    id: ethsplit +type: article-journal +author:

    + +
  • +
  • +

    id: daofork +type: article-journal +author:

    +
      +
    • family: Castillo +given: Michael +dropping-particle: del +issued:
    • +
    • year: '2016' +title: Ethereum executes blockchain hard fork to return DAO funds +publisher: Coindesk +note: http://goo.gl/MpwrhS
    • +
    +
  • +
  • +

    id: icorush +type: article-journal +author:

    +
      +
    • family: Melendez +given: Steven +issued:
    • +
    • year: '2017' +title: 'Inside the ico bubble: Why initial coin offerings have raised more than +$1 billion since January' +title-short: Inside the ico bubble +publisher: Fast Company +note: http://goo.gl/7b5nCd
    • +
    +
  • +
  • +

    id: hkg +type: article-journal +author:

    + +
  • +
  • +

    id: paritymultisig +type: article-journal +author:

    + +
  • +
  • +

    id: paritymultisig2 +type: no-type +author:

    +
      +
    • family: Steiner +given: Jutta +issued:
    • +
    • year: '2017' +title: 'Security is a process: A postmortem on the parity multi-sig library self-destruct' +title-short: Security is a process +publisher: Ethcore +note: http://goo.gl/LBh1vR
    • +
    +
  • +
  • +

    id: smartbillions +type: no-type +author:

    + +
  • +
  • +

    id: mkr +type: article-journal +author:

    + +
  • +
  • +

    id: eea +type: article-journal +author:

    + +
  • +
  • +

    id: moser2013inquiry +type: paper-conference +author:

    +
      +
    • family: Moser +given: Malte
    • +
    • family: Bohme +given: Rainer
    • +
    • family: Breuker +given: Dominic +issued:
    • +
    • year: '2013' +title: An inquiry into money laundering tools in the bitcoin ecosystem +container-title: ECrime researchers summit (eCRS), 2013 +publisher: IEEE +page: '1-14'
    • +
    +
  • +
  • +

    id: coindeskformal +type: article-journal +author:

    + +
  • +
  • +

    id: daian2016runtime +type: paper-conference +author:

    +
      +
    • family: Daian +given: Philip
    • +
    • family: Guth +given: Dwight
    • +
    • family: Hathhorn +given: Chris
    • +
    • family: Li +given: Yilong
    • +
    • family: Pek +given: Edgar
    • +
    • family: Saxena +given: Manasvi
    • +
    • family: Serbanuta +given: Traian Florin
    • +
    • family: Rosu +given: Grigore +issued:
    • +
    • year: '2016' +month: '09' +title: 'Runtime verification at work: A tutorial' +title-short: Runtime verification at work +container-title: Runtime verification - 16th international conference, RV 2016 madrid, +spain, september 23-30, 2016, proceedings +collection-title: Lecture notes in computer science +publisher: Springer +page: '46-67' +volume: '10012' +DOI: http://dx.doi.org/10.1007/978-3-319-46982-9_5
    • +
    +
  • +
  • +

    id: ellison2012executable +type: paper-conference +author:

    +
      +
    • family: Ellison +given: Chucky
    • +
    • family: Rosu +given: Grigore +issued:
    • +
    • year: '2012' +month: 01 +title: An executable formal semantics of c with applications +container-title: Proceedings of the 39th acm sigplan-sigact symposium on principles +of programming languages (popl’12) +publisher: ACM +page: '533-544' +DOI: http://doi.acm.org/10.1145/2103656.2103719
    • +
    +
  • +
  • +

    id: thinkingsecurity +type: article-journal +author:

    + +
  • +
  • +

    id: ethfoundationformal +type: article-journal +author:

    + +
  • +
  • +

    id: ong2015evaluating +type: article-journal +author:

    +
      +
    • family: Ong +given: Bobby
    • +
    • family: Lee +given: Teik Ming
    • +
    • family: Li +given: Guo
    • +
    • family: Chuen +given: DLK +issued:
    • +
    • year: '2015' +title: Evaluating the potential of alternative cryptocurrencies +container-title: 'Handbook of digital currency. Amsterdam: Elsevier' +page: '81-135'
    • +
    +
  • +
  • +

    id: wilkinson2014storj +type: article-journal +author:

    +
      +
    • family: Wilkinson +given: Shawn
    • +
    • family: Boshevski +given: Tome
    • +
    • family: Brandoff +given: Josh
    • +
    • family: Buterin +given: Vitalik +issued:
    • +
    • year: '2014' +title: Storj a peer-to-peer cloud storage network +publisher: Citeseer +note: https://storj.io/storj.pdf
    • +
    +
  • +
  • +

    id: delmolino2016step +type: paper-conference +author:

    +
      +
    • family: Delmolino +given: Kevin
    • +
    • family: Arnett +given: Mitchell
    • +
    • family: Kosba +given: Ahmed
    • +
    • family: Miller +given: Andrew
    • +
    • family: Shi +given: Elaine +issued:
    • +
    • year: '2016' +title: 'Step by step towards creating a safe smart contract: Lessons and insights +from a cryptocurrency lab' +title-short: Step by step towards creating a safe smart contract +container-title: International conference on financial cryptography and data security +publisher: Springer +page: '79-94'
    • +
    +
  • +
  • +

    id: kogias2016enhancing +type: paper-conference +author:

    +
      +
    • family: Kogias +given: Eleftherios Kokoris
    • +
    • family: Jovanovic +given: Philipp
    • +
    • family: Gailly +given: Nicolas
    • +
    • family: Khoffi +given: Ismail
    • +
    • family: Gasser +given: Linus
    • +
    • family: Ford +given: Bryan +issued:
    • +
    • year: '2016' +title: Enhancing bitcoin security and performance with strong consistency via collective +signing +container-title: 25th USENIX security symposium (USENIX security 16) +publisher: USENIX Association +publisher-place: Austin, TX +page: '279-296' +URL: https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/kogias +ISBN: '978-1-931971-32-4'
    • +
    +
  • +
  • +

    id: stefanescu-park-yuwen-li-rosu-2016-oopsla +type: paper-conference +author:

    +
      +
    • family: Ştefănescu +given: Andrei
    • +
    • family: Park +given: Daejun
    • +
    • family: Yuwen +given: Shijiao
    • +
    • family: Li +given: Yilong
    • +
    • family: Roşu +given: Grigore +issued:
    • +
    • year: '2016' +month: '11' +title: Semantics-based program verifiers for all languages +container-title: Proceedings of the 31th conference on object-oriented programming, +systems, languages, and applications (oopsla’16) +publisher: ACM
    • +
    +
  • +
  • +

    id: rosu-serbanuta-2010-jlap +type: article-journal +author:

    +
      +
    • family: Roşu +given: Grigore
    • +
    • family: Şerbănuţă +given: Traian Florin +issued:
    • +
    • year: '2010' +title: An overview of the K semantic framework +container-title: Journal of Logic and Algebraic Programming +page: '397-434' +volume: '79' +issue: '6' +note: https://kframework.org/ +DOI: 10.1016/j.jlap.2010.03.012
    • +
    +
  • +
  • +

    id: serbanuta-rosu-2010-wrla +type: paper-conference +author:

    +
      +
    • family: Şerbanuţă +given: Traian Florin
    • +
    • family: Roşu +given: Grigore +issued:
    • +
    • year: '2010' +month: 03 +title: 'K-Maude: A rewriting based tool for semantics of programming languages' +title-short: K-Maude +container-title: Proceedings of the 8th international workshop on rewriting logic +and its applications (wrla’10) +publisher: Springer +page: '104-122' +DOI: http://dx.doi.org/10.1007/978-3-642-16310-4_8
    • +
    +
  • +
  • +

    id: nakamoto2008bitcoin +type: no-type +author:

    +
      +
    • family: Nakamoto +given: Satoshi +issued:
    • +
    • year: '2008' +title: 'Bitcoin: A peer-to-peer electronic cash system' +title-short: Bitcoin +note: https://bitcoin.org/bitcoin.pdf
    • +
    +
  • +
  • +

    id: dao-attack +type: no-type +author:

    + +
  • +
  • +

    id: hathhorn-ellison-rosu-2015-pldi +type: paper-conference +author:

    +
      +
    • family: Hathhorn +given: Chris
    • +
    • family: Ellison +given: Chucky
    • +
    • family: Roşu +given: Grigore +issued:
    • +
    • year: '2015' +month: 06 +title: Defining the undefinedness of c +container-title: Proceedings of the 36th acm sigplan conference on programming language +design and implementation (pldi’15) +publisher: ACM +page: '336-345' +DOI: http://dx.doi.org/10.1145/2813885.2737979
    • +
    +
  • +
  • +

    id: bogdanas-rosu-2015-popl +type: paper-conference +author:

    +
      +
    • family: Bogdănaş +given: Denis
    • +
    • family: Roşu +given: Grigore +issued:
    • +
    • year: '2015' +month: 01 +title: '[K-Java: A Complete Semantics of Java]{.nocase}' +container-title: Proceedings of the 42nd symposium on principles of programming +languages (popl’15) +publisher: ACM +page: '445-456' +DOI: http://dx.doi.org/10.1145/2676726.2676982
    • +
    +
  • +
  • +

    id: park-stefanescu-rosu-2015-pldi +type: paper-conference +author:

    +
      +
    • family: Park +given: Daejun
    • +
    • family: Ştefănescu +given: Andrei
    • +
    • family: Roşu +given: Grigore +issued:
    • +
    • year: '2015' +month: 06 +title: 'KJS: A complete formal semantics of JavaScript' +title-short: KJS +container-title: Proceedings of the 36th acm sigplan conference on programming language +design and implementation (pldi’15) +publisher: ACM +page: '346-356' +DOI: http://dx.doi.org/10.1145/2737924.2737991
    • +
    +
  • +
  • +

    id: ellison-2012-thesis +type: thesis +author:

    +
      +
    • family: Ellison +given: Chucky +issued:
    • +
    • year: '2012' +month: 07 +title: A formal semantics of C with applications +publisher: University of Illinois +genre: PhD thesis
    • +
    +
  • +
  • +

    id: stefanescu-ciobaca-mereuta-moore-serbanuta-rosu-2014-rta +type: paper-conference +author:

    +
      +
    • family: Ştefănescu +given: Andrei
    • +
    • family: Ciobâcă +given: Ştefan
    • +
    • family: Mereuţă +given: Radu
    • +
    • family: Moore +given: Brandon M.
    • +
    • family: Şerbănuţă +given: Traian Florin
    • +
    • family: Roşu +given: Grigore +issued:
    • +
    • year: '2014' +month: 07 +title: All-path reachability logic +container-title: Proceedings of the joint 25th international conference on rewriting +techniques and applications and 12th international conference on typed lambda +calculi and applications (rta-tlca’14) +collection-title: LNCS +publisher: Springer +page: '425-440' +volume: '8560' +DOI: http://dx.doi.org/10.1007/978-3-319-08918-8_29
    • +
    +
  • +
  • +

    id: de2008z3 +type: paper-conference +author:

    +
      +
    • family: De Moura +given: Leonardo
    • +
    • family: Bjørner +given: Nikolaj +issued:
    • +
    • year: '2008' +title: 'Z3: An efficient smt solver' +title-short: Z3 +container-title: International conference on tools and algorithms for the construction +and analysis of systems +publisher: Springer Berlin Heidelberg +page: '337-340'
    • +
    +
  • +
  • +

    id: guth-hathhorn-saxena-rosu-2016-cav +type: paper-conference +author:

    +
      +
    • family: Guth +given: Dwight
    • +
    • family: Hathhorn +given: Chris
    • +
    • family: Saxena +given: Manasvi
    • +
    • family: Rosu +given: Grigore +issued:
    • +
    • year: '2016' +month: 07 +title: 'RV-Match: Practical semantics-based program analysis' +title-short: RV-Match +container-title: Computer aided verification - 28th international conference (CAV +2016), toronto, on, canada, july 17-23, 2016, proceedings, part I +collection-title: LNCS +publisher: Springer +page: '447-453' +volume: '9779' +DOI: http://dx.doi.org/10.1007/978-3-319-41528-4_24
    • +
    +
  • +
  • +

    id: fstar-etaps +type: paper-conference +author:

    +
      +
    • family: Grishchenko +given: Ilya
    • +
    • family: Maffei +given: Matteo
    • +
    • family: Schneidewind +given: Clara +editor:
    • +
    • family: Bauer +given: Lujo
    • +
    • family: Küsters +given: Ralf +issued:
    • +
    • year: '2018' +title: A semantic framework for the security analysis of ethereum smart contracts +container-title: Principles of security and trust +publisher: Springer International Publishing +publisher-place: Cham +page: '243-269' +abstract: 'Smart contracts are programs running on cryptocurrency (e.g., Ethereum) +blockchains, whose popularity stem from the possibility to perform financial transactions, +such as payments and auctions, in a distributed environment without need for any +trusted third party. Given their financial nature, bugs or vulnerabilities in +these programs may lead to catastrophic consequences, as witnessed by recent attacks. +Unfortunately, programming smart contracts is a delicate task that requires strong +expertise: Ethereum smart contracts are written in Solidity, a dedicated language +resembling JavaScript, and shipped over the blockchain in the EVM bytecode format. +In order to rigorously verify the security of smart contracts, it is of paramount +importance to formalize their semantics as well as the security properties of +interest, in particular at the level of the bytecode being executed.' +ISBN: '978-3-319-89722-6'
    • +
    +
  • +
  • +

    id: fstar-tr +type: article-journal +author:

    +
      +
    • family: Grishchenko +given: Ilya
    • +
    • family: Maffei +given: Matteo
    • +
    • family: Schneidewind +given: Clara +issued:
    • +
    • year: '2018' +title: A semantic framework for the security analysis of ethereum smart contracts. +technical report. +note: https://secpriv.tuwien.ac.at/tools/ethsemantics
    • +
    +
  • +
  • +

    id: wood2014ethereum +type: article-journal +author:

    +
      +
    • family: Wood +given: Gavin +issued:
    • +
    • year: '2014' +title: 'Ethereum: A secure decentralised generalised transaction ledger' +title-short: Ethereum +note: (Updated for EIP-150 in 2017) http://yellowpaper.io/
    • +
    +
  • +
  • +

    id: solidity +type: no-type +author:

    + +
  • +
  • +

    id: serpent +type: no-type +author:

    + +
  • +
  • +

    id: ktoisabelle +type: no-type +author:

    + +
  • +
  • +

    id: why3 +type: chapter +author:

    +
      +
    • family: Filliâtre +given: Jean-Christophe
    • +
    • family: Paskevich +given: Andrei +editor:
    • +
    • family: Felleisen +given: Matthias
    • +
    • family: Gardner +given: Philippa +issued:
    • +
    • year: '2013' +title: Why3 — where programs meet provers +container-title: 'Programming languages and systems: 22nd european symposium on +programming, esop 2013, held as part of the european joint conferences on theory +and practice of software, etaps 2013, rome, italy, march 16-24, 2013. proceedings' +publisher: Springer Berlin Heidelberg +publisher-place: Berlin, Heidelberg +page: '125-128' +URL: https://doi.org/10.1007/978-3-642-37036-6_8 +DOI: 10.1007/978-3-642-37036-6_8 +ISBN: '978-3-642-37036-6'
    • +
    +
  • +
  • +

    id: rosu-2015-rta +type: article-journal +author:

    +
      +
    • family: Roşu +given: Grigore +issued:
    • +
    • year: '2017' +title: Matching logic +container-title: Logical Methods in Computer Science +volume: to appear +DOI: http://arxiv.org/abs/1705.06312
    • +
    +
  • +
  • +

    id: meseguer-20-years-rewriting +type: article-journal +author:

    +
      +
    • family: Meseguer +given: José +issued:
    • +
    • year: '2012' +title: Twenty years of rewriting logic +container-title: The Journal of Logic and Algebraic Programming +page: 721 - 781 +volume: '81' +issue: '7' +note: Rewriting Logic and its Applications +URL: http://www.sciencedirect.com/science/article/pii/S1567832612000707 +DOI: http://dx.doi.org/10.1016/j.jlap.2012.06.003 +ISSN: '1567-8326'
    • +
    +
  • +
  • +

    id: rosu-stefanescu-2012-fm +type: paper-conference +author:

    +
      +
    • family: Roşu +given: Grigore
    • +
    • family: Ştefănescu +given: Andrei +issued:
    • +
    • year: '2012' +month: '8' +title: From Hoare Logic to Matching Logic Reachability +container-title: Proceedings of the 18th international symposium on formal methods +(fm’12) +collection-title: LNCS +publisher: Springer +page: '387-402' +volume: '7436' +abstract: 'Matching logic reachability has been recently proposed as an alternative +program verification approach. Unlike Hoare logic, where one defines a language-specific +proof system that needs to be proved sound for each language separately, matching +logic reachability provides a *language-independent* and *sound* proof system +that directly uses the trusted operational semantics of the language as axioms. +Matching logic reachability thus has a clear practical advantage: it eliminates +the need for an additional semantics of the same language in order to reason about +programs, and implicitly eliminates the need for tedious soundness proofs. What +is not clear, however, is whether matching logic reachability is as powerful as +Hoare logic. This paper introduces a technique to mechanically translate Hoare +logic proof derivations into equivalent matching logic reachability proof derivations. +The presented technique has two consequences: first, it suggests that matching +logic reachability has no theoretical limitation over Hoare logic; and second, +it provides a new approach to prove Hoare logics sound.' +DOI: http://dx.doi.org/10.1007/978-3-642-32759-9_32
    • +
    +
  • +
  • +

    id: ethereum-abi +type: no-type +author:

    + +
  • +
  • +

    id: viper-url +type: no-type +author:

    + +
  • +
  • +

    id: viper-snapshot +type: no-type +author:

    + +
  • +
  • +

    id: k-url +type: no-type +author:

    +
      +
    • literal: Formal Systems Lab, UIUC +issued:
    • +
    • year: '2006' +title: The K framework +note: https://kframework.org
    • +
    +
  • +
  • +

    id: evm-repo +type: no-type +author:

    + +
  • +
  • +

    id: verified-smart-contracts +type: no-type +author:

    + +
  • +
  • +

    id: yellowpaper-bug-136 +type: no-type +author:

    +
      +
    • literal: KEVM Team +issued:
    • +
    • year: '2017' +title: Yellowpaper Issue 136 +publisher: Link to issues removed for double blind review
    • +
    +
  • +
  • +

    id: yellowpaper-bug-160 +type: no-type +author:

    +
      +
    • literal: KEVM Team +issued:
    • +
    • year: '2017' +title: Yellowpaper Issue 160 +publisher: Link to issues removed for double blind review
    • +
    +
  • +
  • +

    id: yellowpaper-bug-216 +type: no-type +author:

    +
      +
    • literal: KEVM Team +issued:
    • +
    • year: '2017' +title: Yellowpaper Issue 216 +publisher: Link to issues removed for double blind review
    • +
    +
  • +
  • +

    id: ViperBugsReported +type: no-type +author:

    + +
  • +
  • +

    id: semantics-based-verifiers +type: paper-conference +author:

    +
      +
    • family: Ştefănescu +given: Andrei
    • +
    • family: Park +given: Daejun
    • +
    • family: Yuwen +given: Shijao
    • +
    • family: Li +given: Yilong
    • +
    • family: Roşu +given: Grigore +issued:
    • +
    • year: '2016' +title: Semantics-based program verifiers for all languages +container-title: OOPSLA +publisher: ACM +page: '74-91' +DOI: 10.1145/2983990.2984027
    • +
    +
  • +
  • +

    id: k-tutorial-url +type: no-type +author:

    + +
  • +
  • +

    id: trailofbits-manticore +type: no-type +author:

    +
      +
    • family: Bits +given: Trail +dropping-particle: of +issued:
    • +
    • year: '2017' +title: 'Manticore: Symbolic execution for humans' +title-short: Manticore +publisher: https://github.com/trailofbits/manticore
    • +
    +
  • +
  • +

    id: rosu-2017-lmcs +type: article-journal +author:

    +
      +
    • family: Roşu +given: Grigore +issued:
    • +
    • year: '2017' +title: Matching logic +container-title: Logical Methods in Computer Science +DOI: http://arxiv.org/abs/1705.06312
    • +
    +
  • +
  • +

    id: erc-20-url +type: no-type +author:

    + +
  • +
  • +

    id: ethereum-tests-url +type: no-type +author:

    + +
  • +
  • +

    id: viper-docs-url +type: no-type +author:

    + +
  • +
  • +

    id: jellopaper +type: no-type +author:

    +
      +
    • literal: KEVM Team +issued:
    • +
    • year: '2017' +title: The evm semantic “jello paper" +publisher: https://jellopaper.org/
    • +
    +
  • +
  • +

    id: securify +type: no-type +author:

    +
      +
    • literal: Software Reliability Lab, ETH Zurich +issued:
    • +
    • year: '2017' +title: Securify formal verification of ethereum smart contracts +note: https://securify.ch/
    • +
    +
  • +
  • +

    id: hildenbrandt-saxena-zhu-rodrigues-daian-guth-moore-zhang-park-rosu-2018-csf +type: paper-conference +author:

    +
      +
    • family: Hildenbrandt +given: Everett
    • +
    • family: Saxena +given: Manasvi
    • +
    • family: Zhu +given: Xiaoran
    • +
    • family: Rodrigues +given: Nishant
    • +
    • family: Daian +given: Philip
    • +
    • family: Guth +given: Dwight
    • +
    • family: Moore +given: Brandon
    • +
    • family: Zhang +given: Yi
    • +
    • family: Park +given: Daejun
    • +
    • family: Ştefănescu +given: Andrei
    • +
    • family: Roşu +given: Grigore +issued:
    • +
    • year: '2018' +title: 'KEVM: A complete semantics of the ethereum virtual machine' +title-short: KEVM +container-title: Computer security foundations symposium +abstract: 'A developing field of interest for the distributed systems and applied +cryptography communities is that of smart contracts: self-executing financial +instruments that synchronize their state, often through a blockchain. One such +smart contract system that has seen widespread practical adoption is Ethereum, +which has grown to a market capacity of 100 billion USD and clears an excess of +500,000 daily transactions.Unfortunately, the rise of these technologies has been +marred by a series of costly bugs and exploits. Increasingly, the Ethereum community +has turned to formal methods and rigorous program analysis tools. This trend holds +great promise due to the relative simplicity of smart contracts and bounded-time +deterministic execution inherent to the Ethereum Virtual Machine (EVM).Here we +present KEVM, an executable formal specification of the EVM’s bytecode stack-based +language built with the Framework, designed to serve as a solid foundation for +further formal analyses. We empirically evaluate the correctness and performance +of KEVM using the official Ethereum test suite [@ethereum-tests-url]ethereum-tests-url. +To demonstrate the usability, several extensions of the semantics are presented +and two different-language implementations of the ERC20 Standard Token are verified +against the ERC20 specification. These results are encouraging for the executable +semantics approach to language prototyping and specification.'
    • +
    +
  • +
+
+
+
+ + +
+ + + +
+
+ +
+
+ + + + + + + + + + + diff --git a/media/images/k-overview.png b/media/images/k-overview.png deleted file mode 100644 index 8dc8cdc74f6afad27b13a9bc82096d06c7422f6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267041 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

oRpNo54TG}YIgoc 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%0Ai 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 diff --git a/media/images/proof-system.png b/media/images/proof-system.png deleted file mode 100644 index ad031fe144b66c59009f64d7c9cfcc23dc13fd3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125057 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

=6lLU;eZ)pk1n_SNtbOgf(<*;2~Uces* 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 vK1}oljA5niSfmQnrki^_(1p1Yt;PH zT(6w2S~A*8B>Z`yEyp+atwT@wNXmrI9hFt}{;zlZ_jjVMo8>7n{`pSItUPAuXPp{1Mzg~knuLt|)e|wqx85vst z^-&;Q_Whp^Q?o+I@0#rZk=w#I|mcC{fP$R0? z&xv*aUH3i*)$N#bwvDS)q$jkg-98md<2dn}*7^D}8E9;?_YXw}l*vM+Gr()p zCev&H+IWwuHDnXn4{l>8PVp*trT2ht$a}K49R2fA-@Q6g;gb3U3j)lVOm}0QnD(gW zOeKx;`v+A!?atB(n@ib`2B-!yYk-{AJbj%h^hL%FAtRj6rTgNeB zBXD$gcI4v0p?+tlF!KPWU!v1IynL@fm&HshJtr>q1|4nUEA@Wa)O;1cyxI5rZV z>g~1iUAgg=#^n8~J(`b8+V2q3APU?c{T>Myf|cY6dl6fKK3X5E{soVL z9aUY!29lb8U%HGWo;*LiDhkwY`KndYDK56AFMkCCi#HW+6>JO=1V+(#VHMS~d@khh z(gq@(zuHZ$Gcz-Vb%nhf#W8HOTAR)znQR1z)TLiPRSxPuIK2Zatucszijm@)#Xq7oRAZvS2BEuAS( zSiMG2E*e%N_8q?d;n(&aS3Es`Y=|cg4H1aeD99Vo>8mu-ovc`3axqoRTZ1)ocPJ=t25=b6lvfIat7D z8j5Qt>W>tZjIy<+RWAR>_l`%|p!_!08i&y=1V8Oev}=W#-0p=Cay6|nv9S;^3@*}K z-njI)4YIJE^Pj^WHt6a_%k4f~Ok!*sbG%w3Vw!d6YOh?%4U_yD)~K z6>Y1RZrz$RuZqnmjnl?#^qfa*y$nub;lsLJ#7zz%w3gu1N+anN)LJ5ivouHw>XICb ziN~s;x#-+w%tY|l`KG3R;$g%o2s-PCi7X_hfX~=a#GGDA^9pxvkfICKWklikfU9z9 zR#&vUHy8mi*julFGbf+MWa}O75jz^q(`2~`K_rwFf9Ea>@K2;O$YSbSI9t=I5j2h>f!_TPFX05ZoHLjfwL-+PW8r*Ozuog~Ny20O zN>M&BbOMduljJs%Tvncm{1qDCu$KuPmF zXrW?wYM0iQ&dvz}Hn;tm_InT{tMsRQHuMR@a4N}Qlnf03iN`pUDTy+qWbPb|Ys-wW zJ*Ez7NSmbhY6>$QnNHL3wdN0yIzM0;jbW2OLlJt6o_7#_(VzMy@X(|O76y-U|r9JI%5*3F?$15*O z*E?U`YuEs^ai)m$%mHq^SLZF8V)-=2U+=KWzNDt{h@JQD55)d%rlObKiFuyvk&r8*5=~Xt>dK z2I7C`+8@vky-Asw=TUi($@079|A>-@PJcwzS3WWFybdF$-fXpivfNw9q0;}*rfu7W zg+=z(E#gGsEkxePU%t7v5FySV@cZ;b#H4q-k%C-n$64usU6=%gc_}4f*sx)RPw=kU zd1()v(D9SEnO)FOjykhvL>M65`$)4#BGhhs zp6RMpr!OT7l8 z^xq)oudCXd_0ZOy5b;XpTCrT64{dwXuT@U>iCY(Xt6X~ebVi?b40zNdun2Nbbj}2j z$^a-jvV4Z>L7&Nt;!IA3yLZk$m5^XWIUl}y_=Hqb6rAx_d?wFfu-fQk>}VzxHMvKM zvuk+oeN{kM$+p8BubUb-%z0+?!6yW2Bne0^);VS0lci1pO5S&FtQKMOHQVtE^U}`W zC^LMK9tLnW`(Np4LMO}Ns%82?;0m&B(GYycWvIfs+b$) z+{xzL{z+3u9O$EguA|SO;)muD>A^5`sCi` z#(Dijc=tnKP?Pf)h+i$st52Rx@8;5a8wT}}&!6==Rs#gAvIiM4y?v^> zy82Ac(H>V%C-HDpmyVV;36P$MFHEeEQT4Xx@x-}ydN<+^%t*ttJ>1<}e%(*Fz?V`> z0YBq&-IRly)ZSu5hiw||{vreLBm2#|pY5@)a`ehKH_Q_|w^TQof?v_e*szRZVv6-r zIg>FpVH^_i+Qbnt?*?a9O;&E-wr$j~O%oyK}Dt&q9*&=qqZiX*?5ioPRc_>SVY%>;7)_AX0t+xC9?bTmN`o`%=So>XbpUfOahEjxS z+Xk;jElD$MPAS&;<|z|v%2(@Q>wno6>2tzjK1W^GbL!*x%3GT1g!TWNLWit~8K#t8 zj=#j+u>Ih{-uITdyQe;5^3puI^0(N!F-ZbEw2LKqRLJ!MRkcR~=sKoRWOk!RF>(q2 z28|05|2(-LXYYF-P??}v+9_#&^hHyzk2sGR&R!p$Y)FHXX6>RGHLaTyjuX? zk^vIH<#o$E0{SCv+QRY7m~&8{56E!XK50C zA)tSSS$UI{-wZ~?b}0T$p%7Lm#^z?p==uSPlEU1WoynMK&bjug^tunY)dkGuUyX>S z{hoZqU?=?d()-7n$w+I*>{jA>2GpD5=vU98^Ph^$#C`<5mR5rzsqn7{2a^TZKPPS; zv#sP>)Vyk@LRPv%3r**NOUa1Gwrg1$s7(1hV~W)ps2WwZ8#DOOD`;H)N%PJ?WCJ8l z;cNc=f@?=8eF-Im{CO~TAl~NZ*RIC4=an~CayMAuAJvzQ=0ldCE?PmAp0paq(i`ym zdUr#nU@|>i&2sYHsYRCsF7-!~YMTD`_3PQhXy@Wyrkz^X-S^~U>ao7{?%!X%nO$}L zOGMV1LyW?+KTx-fw4fW8C)~u2r>$ysij)3B7sV54cg9}VJeHY5Im*RPA3eGjEP7v& zTJyppt~&SZ(bTe7ORIIXulzK$(d6Qay#clwdjpvs1As@-p+QCbvaqo3*s)g)D`%K- z8Hlc3DYgCQdbA3GK-;9uWD6y|diC<9C+TqZgBV;Pq<4s2Qrp#Kcd__>q>Y|tzT<3{ zpz0pV76XXFF>RC$AGGmO(e2kSIOTBo0uN(HD)KR$+b5H2iL#Vx)%ti7`8Hvf5P_b^ zaYXylu5|J}hbNcJ98(3hO)5lxO+M|-Evm~XL)Ko6~ae>FwvQA7&tfL@9VJ2!Z|d*w}=l z?X6`#8i#wbYOT_G=Ueocps{M!KAMg;v$KU(lg6a!PSfy?JoXDgn>06wX9Nqpvu%er zuV23eO%P@5bUlwnB+hqE+K-mT_Q;<=LCyq^UpH^wJk!6rrfLrC^E%ko+TcuVvca&( z2d&`lFrdy>4rup~pNu%mVVU(j# z(A=p#Gr1*1`L1c}*lf}@`=gpCreB((q#zeR6FJrcO@i&-uwFraYS^*~I03-A*3rlMr!6$DUs{*nxiRk5eJ7CQYSjE*1|t_`H8^R z#;@inAYL@hh9rkYeR$YvqOFhF=>Uaj9Ay5O*$P?bW*&_jSHxL-W(w2vd7fbb+|CKwcT8N!>x{Oy=Vf6}G~4I7#}bqg{xc(8P-TA2e* zOpz7CfBz`fk){bW{Q$7d2>Q*K(TPMg`?>M>Xgvdi42aH8Q2VCY!YFgkj7#^~v`LEd zoKg_71{9CD0rVMNgKy;wBoD4Buo5VwaTql|QoYb&!tsgpTz7-2K3JMEmK<^`mVGAa zT5AWyBpjVmQJ$~m>D+5yV6?`a`)d~aQ&?&|8FP4nQ{$!IGXJ9m=qcYlu)q6f-(0c# z`q?CBFgBg(~^DX%Q1xpDu`O{=7{h=T4PvIK=dNaBSAQnEy5**xM#{})`2b` z4?MZ|#0GjVwuGZgHnDa3hxdN`9x9{N5A$%JxPuOC@2GrqCNGiOo@(Q#HDpN2Z->&f zBVmazhI_78QZjDYsFm*Qy8X;EmKrJjUD7XX^G~CHG^RR~#=9KZ>^G)ai)LCz#?8z} zooJ@rpjAe!XU>p>psHW__IA5^YnNz`cN_k8dD9`NQv3EDGNfb66q~{HZZ;d-Eg-lFSysm zp{{aT;O*1y$+d#Got$FjbO))CBB6F=f11trO)FzGF?&jKrabPm+TKX@n$P z%3Y(S+__Mt(4&1rS=|QaLCQ1BlIf6rmbjv}=cj+5C|lw6s=321=Ue}R7aQ?J?`~jV z;1$^sv>cxOvh+3}O+?vbkJ1di!caPaHuFp`Wn_5eu9(~XOe_36j%9odkB&x-;yXbE zmO830>yYGKqzR=4KlkyG_Fgob82~=gxF-|WNvnds&Ffq9vAU{0CtRB$R1Pc>U=Wlv zs{9$)vE1;4`jz)uewmPc4xHHj;>NnyC?EI5hK1GQS)o3igXfN6h4KiU@$dJ(BT2T% zZO^jOy!&w_W*4DhVQM>K52udowBu`6hZFbR{@o)+JT~n8y6aa17m6DGzN2)e(av!F zbf-VNCaZmfRccm+r^SW5ypZDeQCu^Ek=^+j_9~_p+L>dIQn3VA`#g;~igUm7eP)x% zKii)HIvTO{e0Ston}8AgCrqYe4$QTCpGt0U=$$SD2JFst?cQ<7@U2k;**E$}n>1?F zV(-^4#Zv-3KH+Yj^eTE0+=G}&yaJ9^q@}-OmW5@cUWY->bqKis(4%%KZJ9jKu3jeh z$Wv+NsTUo6X=b_&c4f2u59ua$V)la%)zz z$`;K{qg=s!b`G4pOK&2HtNhBx{0Q<-wPm4e=-uHmZ?SI;0@uLQ^73-YH$xYSamC~j z)fpa>@H6L|dgq9<9a5=H%t{fyjK?pgKTrfUgW6ThN9N23tF>X|yHkFC$}+C?>xbvm z7A>eIo4F;XFt04xrL<}9-o0^np17!kx_VLXk9+pCNvdd7`Dw-uJ-3Wui8#mE(;=+z zeD=(?C)sg zN<1-1HjTg?HlpuP$ay^35gXkJ~WCFS!8Q_ zr`KUXT`d5XOoE9>cx=zFRTZ4q^zz%jPD(4{3*Wx=_pm?L{dOa1nx!&(^clmBX3@t! zGJm8pebc6T3{lfgXzb9KcjDUVnfUhC&!6t{xkR*^oIDu&2Jc;n6$7rVTuJDG^672R zd&G!Y;rdgVN%Um%!F3?;p|_DdilxS*)5cf(6|PKCEo*#j${;TY9B^IZ^2Bx3gW=(N zf8NqoRkbde`wd)SaL;H~Ro&Z{yE~sAiRCUXW68h9f3_I#=leR_J8BOfen{rkDydY_ zhkO<9NaJ1pzP|S2$wAVv|C&AyL347|RT?}3vGdMZ>+0Gd;xTFFou7#6Po}004K-l7 zceaTOPvg6$^L`}RH6Jft=|-;qP2O;Pg5Vafquz*Z^0|Ag;e<6#>d0Q1x;FCs3UFA(tU zGvB{|*Y4ik3%mcm*4EbbJSQF)80a{6u8D2^S+`Gb(c86qch9eG?Gz~(g|@5YLSvIYuA4p z(Ecf4z*ZeP+(0yVnfopy62Q2{{!)^Rj7TP<4#c{AHq=mKMdeVt&v7JK&>0Te%k!P^c^2YS@xW_bm=YR$z8tMpZ%0a&{dBeprf;`_pG!7 z3l}U{{#Sjv1ZIsk0+N+|o6P7;TFuw1|A+2XGGftDMx7KtIY&CYpdKS8bBd`9uTvc4GR(QkhYu-T88T<23`jI~xl@zWf zXCBSpz`j03x^FARd+^{vTSa6{%uTL^$D~Y;dE1**(U+|CT{z|E*Z;OF=--E-E913_ z1YOidum1kmbbft`Z_kf$_$)0U;?8+HF4{G~&uCun?t2pUj&|!84D0z27#@ziQQuSVh%Zi7;r_s(l&kQ>QDbr zi=v!y&FPztdOo?eIK&Fd&~GB+VbFOt#^W&~BV*+F@r~$d*+{boI)u=usD=vY@vHQW zU_@H$N*iX?ZId+Vdv@}3sB`fomi&04%vFb>$qHJ7mhVnZ&W`UXwMIt9uansWP@A&} zm3Ykr?pp(60m0DPvvlStnWHzS_4UlV_wO4mU#`nb&x$VGPJA&Tj0g^_)cmH?8 z%mCHIp9|jzVP1XD=f=Xbi+2hpoeoHGpPlkO@!C!1FKR=mg}<3aEiNT311K-?fg>WV zr%bsjIp(~Z?P~7EkIyf2CNaVIhYb7`!tZa)`(w+C_Mea34&Y_uzJ2@dyMya1gFxUD zR=@+emYqFX>;_|J4xyT`=bhDF75l9uX@G=(1yjKchmnMPaV?k-GQ1;QIGOClCS;I- zg?zF*{9?Qt`(`$K40FKIMn-j*Xmgk2D!HnRm11NA-&ACd*x5AzF&#y^FP3l%7A`DH zdk!zI>`_m9%Qoi*8%8R)bEM&)uPFxYFa%9u-?lIyf_x+JTXpXy8%BCk_|fcAAEty* zR&SYGi<-@;HjyB=Ye3zw_mqb4w=?v^xJ9;4MBUxQlm9~Fw*uwD~@U(T+e&4>i^07nLRsTq} z(NrpYHBEQKh|Y=(n@!4fY6Y%XK7OAIhUm6#ioB3U{U`^nXsvc}(OHqX*dC6M%B|N~ zwIqXYPnH@Nyh^G3@N@tb_rar^|LlogBchi$S&r-696Up%T|4FfIAp6wVvQr~+G(ik zg^Ag>ZjC|4&1~JN$)4(FU;kO-)+4+9YpZXiLW8#*EDYLwfhbG&l}QLKO_Z zzyaWdSKezB^4FjI*J>VvvhLiyi>-S6rHAI74%Lk~Gd%cQftj^+@b0XuJI-qF@>UD! z_WjSN9UB~5^K0P=VbgoI#c-^lh?3T=8!kQ+)EC$9JHDqN5NB5B5G*sIuIV;37b8UR z_`qSgmO|v2WX|sbR;&Pt#`($@7iz`l>Yjf-PEAg(VrWum^Yf)f9df{z$!0)9yWI|C zar&K?<-RW}k})dE{(&mS4I4Cgsfj!vua-=kuY}^qTy>})i{0pUwchi_yY`1U~iI>;61~K4eLk* z7H^oOLZI4dJ>r{RIw!3hgrkDtLk10!83q=O)S-U$m<36Pu1u1nV`{_Mvumb#jsN%k znisx)eF5sOBvmN46$XF4+V-q5-g;MpIvN=-$D@veEA#)Jo#w6$B_SY+)pckLAS)q& zNn+bWLbi!12T~UyLz{Q&X|(R~BP2C7(-AUZ{WfX z0|-YXka1$#DYKL{PU_2){v3*MP5-T1H(`p5nE}XS*Zu)pw>E{j_D0=t`Ock_Te@}s z^Kq@}S(QyU1P&(rUxfhNzJ0qVqBJHk3w6BUS)!f*2%sFFKR$0yu(4Q^==DjHv05Z; zmu27)+n1kb`;Hzvw!Vy!Atw;i3#=QINO~;!`9BZ2mO?u59>&emv3w#LZ!SXRt(*Vd z0By}Pwf=nae}7uy#x>t7uIm5w?|*)F(Et07YTErtsQ&9!j3!x?ng08*{^w!<)PJ|l|NO${1IG%2|Gepc{p@Qa)wut8wSWJn)-(G5eANG1q(6)J|FNoS ztsELtx<0o5&-(TnO+%99ng(7fZOtD~%p7^u*J{kF^pTtA$}?;hxNBEE1Z)@xC?F0j z)(rg56Ue&2ZNg4%A{~bS%vnu+RMhGQKeuYU>VS!(QDq}9ldzPCc4K zI{fF;D(~V9f_>Ij$bm(WuQi~H;btqVHI{mJR;UFxd9I^kF;t%JW(<$t{OYVb+p~GM ze^1%Z84RnUk@IMYZiB#V_~2%(Ti35?{J;<^^fk9fj#CV<`{VWW!2xt?az`$6`;3JC2UD+lcSHt(!15Qx@H~^QjG%!x&*f1Md2m=PLK0( zU2H}!O*AoIqv6#u8;L5{prU591j}il`70EEico;7u=yqVC&!j>!p7d zH`-NsYwPE^g%hdIELHEAT>b#`Z6$524>mYhn6gF5E%Vw z#&~c5t2y0`nvWQfuHSw{KI(!!j4UU)fjgy#HCKPyGDnf)k`8s0*={y5IWw0YKL98o z4aM|$efsjnm_#s^5puA?jy_k8Q$RW}-%Q?22Bh9uJq(L4qy(vNh|S}PekqSu!389O zS5iWFQFy&1o1^zf=3e33F4-2!HDzMruA-m4ub+hx54T;Vw}w7;lyItI*u`=Ucn;G> zHaLd;7~E!NVM{g)`LO69>D)HPCQ^jcjy}c>x+*-G29Ub;i?Tulzv6kpQ@Qp}))mbW znki9j-VF@Q+Vrt?gTRRqS`CNeQVMQ&$)nF--p@HmwG~Wy>ouskVR-h~00U`WRGQI87TG2x?M32P<;<3Jg#`oxY7|2*9NnM@Tmgk-7{=GT&ATK{SHb+(%r5Z=NBZHH8DKGx> zv17+B;60Ar;7Bf7xj5jQxGmb#_PdEi6t5bzy-{^{B`gt4fHWlPld{t^s`_@)_XD)` z4vi+&!gAxX0-Qwbp zXM(+Wagn6gQNRFoLM}d%$bjM@fc~n~b=CW(pD&+_%3B=QB*Oq|Y;;Dqhu8MkZjBA&QhEoH`ZiaOWUDfw3?Pv0>Vo?zL(b} zIE#sB)?5!7IWK?=$ovxN0VOSQOnBk92zCH2}E=m_cyeK&A;Q$x&ge3J>`P~kn{$7zFy%<&asU= zsVjLO`Q$%7KJ{gU&Dk7Pg;@j6Hz~TvNpzB-x=w z6h|BQO>uoD@LEJ@Z9}VoJlPXaISlSXE*?Xp?zG3zEUP&7#nkbCTc**(xNEUFR;j{I zbKP8^w?T};mkxez+gvS$tyb%>|9rPrZQ4i!KSw3#`VSd%B$Ye6v2f0WOXW+@9xzSe zA{>s0W*vPjYX;shWZP}>jJ8ZBHhbJPD2j|6?QTO<^!Xmz55r*Ay6aD*QhQU_bK<@_ zym-8797RDU1!U4~L6^^*Ssm{tDtKvN#c4!If%~FJ_p!5y=+krQjI3-IxSb)QQ1>j2 zN%C(uWQ{iF$=+XE=TC9_-iN}#UOW>hIM)3v8_N!x`Z!-@klEv@4@No;P_5mur^Vwt zTto@S4OHX6OD}Rb{k!OZmo14p{6p7Nys(}-MJT`CJwmWf4qEo&@)i-IL`1m{e8=-VT zdJDs>BO7g|Sq(BPGk-j_aO}U|r>$J93CCMb{zbA*V66?lQ43*oXshN1o0{imQ@u-p z=Y8&n`L2x@@6x>KattVIP&>78vuAgq7Vb-7hdkB?;9iuYCCg1e07=p|l0U3>)FW|f z76S$xVX;LwTQksN;$D5@@Q63m?Ot|Gr_%Z1`*&mN!)EV?4lWg z8b%u-7AOK<(VSqlMk8DW8l6d+M|iG6FC|>=6--zYu!9Mhsgdfzm%(`sgZW^GM!`Dn zalQ%oMmLbfl_Br~pI%>Y@ez}^06j({SriV#{~}a*20u%v4<0^M-8Ue>T2e)eUSK72 zUSA8O)7oN929$NB`fyt@v9CHIdcyA1i&;w1R%!y45BtyaH9u zSysHP+GFdD?T%JA1B>g&qNC^V5rlGIQ}T%1!!;OxJ~rHH7sW)fONqLTV1^!rm1Sm4?ux(_Qk-&Y@t;B`bMO*vCqg`#-G1x@}mLU-Gd zZ(#%b%c3x1g1c4fx}^p#>HpCJFx!k89z(Cz%V|sq%+s3|^u~7HmV7QbwaPDuXT|@RU*~hcz%^P!js@M7x8v%R!Ve!<%KOmqm(&BSor5g7MUChtd}xN^;!d8m|?{kC+5N1DstF9EAFot7Tgq>Q0L#K-ngY9qYs7?1Pw>>JpS6!g)VL|KA^`klm(d_lj9O9GSCR=s;UP)G_JZm(b1aihq~%={i~K1J8p@mhs`;6ANR(bdsu*-V%F3tjH2`vCG6}i@uhD= z$nNi)X{3N~YM;Vu#(&3g+)LgZN&G`@;;-bG3E&HQiW6w1mw@|f>*!3Ln?y?g5X3O> z3zUQpnv-o+7^i8QPhWvl*?uP&@{mI>CH!#4vQf~R;^xLvkt;3@EUsq1Dl;XbH)*jWJjWQ$lKRwM-m^=U#xLY zUpjfto@d)OZBBweE&slE-@XLS*D2`JsIs8XwzqEH zbcENKPtJ!vcbn2|a;7<3Jkq~1!+101UkyJL(>Sg?thMeHVqNeAq59>RB-n<0*2T!6{kH^MGS4SsqPF!ekAexZA1_s(+&u!E38$5|{ ztZiTrblc3gITtnob3g)DgT)I5(=-aswKDMgF=@)1D({WO_sBZ3mmCZ}|I16)CRED~ zDD9>}zkZLYe!U}08F2aTjm7l*vD1#34%kgP>xc)N_OM~+ADt#{EkQG^=Dm|0u!Kay zQN^i`utPH6)h4*{E#%M8-RJ zZT_npSL1KqxG{Hq^_SKRB~Z}}-)&R2FC^qPGX!s2SzA8_h4+5ry=hYdsimGm_OkQU zDN}*)h2zNN8tXKl>aNgW6Lsf?qdqKH&_o^ zXq;j?4S%~{O@rnx4JUgd-x3UXCyXEO@ANpqn_t<+mpT9#y5eem1wBm#npVoYst`#` zqd@e2IK^yQU-*tdj|XUazLL-D!5IX)5lI|5MK|CxsY&%%$-wFtM31Pe@!eJ9BA$P| zgyunF1Qv!m&>o;(L)zYG0r{_ezW7 zvUenMzAk6p=_!*=5yN)p#>}`%HLasxN=8%yQX|6d#)`iE`@c!MU3WbdU0JIQBEqu+JPt&pscJt^KVQH>q zS5Z;%7~cFbfp@OydXl$?+)jZjPZ4rUIGV~^&$>Tm`g83IGQZb5&VOr*z)e|KvN~&~ z1a=IL4=j&Vo06L2lDw);Ev3pKR;_gI-(3;iPIFaeF@o|-5dUHtb!Qb^R;W$^+(U57 zd>8A&H~Kw$`Y_&Q`l7m{HV{-|3pcPeig9l!#!bWQc-{5uf9r2fUL`g8=`&}hQP&$! zx7IMVev)o|k&wI>udvGRoSnvs<2dtV?D7RVZMlC6a?r$AgV}dU4pkt;L-0Hwvig0H z$*81ozg*5ZOft0doVWGs)X`Pww{CSk>&A^O{vSXh)GBTt9CGz0m*v~l&v`s=%gN*p z-#?8YTWq8qWc0+75Ef*`PB({Z#^anm# z4eWDBX*L0Ij+Ql{8ned*9y_MT>@sk|2Xab2orwZrzE8U?&OAQ!>C7%%5=F(ueHGfcrj)E@Z%%{B%((Tc>HvZEt!6Z|tmE2|8ooJJ zHe-y8bcyfvHru3r#38c#h!w%%>R7sW+wqo6{A%{upx}+AEfr@Wdgt6r|GRQ)(fjw# z>7m9meDuGb*FU_xu;{N5Kf8SX+xE%IL0!9UARjzM0B!JLJj_~TT-kC`y>m-^j^xX?HS@X#nCR$q{!;N zUoMU1KHMEypNCkR-JQBTmXSZo&wXIWPc>HSGXjaoG!#$MxZtMY0BD$NeAU;4T(+=L z@bjP!vT4J^Y}mBZhm(!YRXoBGrDbxb!IP}V_Omi0#}SZFq)e1yGT>~%UO*NwCBK`unV2d1mGX*;KnAb4xbv7VQFbV~kJx?S zzyZIRk+a>8L)`lwTn0@=@x9A+iRnV7tZoJASRP_&VPW(z5B0>y--Mi3l(VTZqN{xN z8~%IuzOyj8G6fM~)K>oc%6pwhtlPo|!w-7j{z&EzlFZ{+RX~~rAn<%J?mJW%%7s+Bb)Zt73X25}^7!vV=ENh6v5tQj-fi!u;YNXfl(-wb@E z7zDNv6#)uhg@PY_b0r6T*gxC0{pC{Kx&M+jproD@x_|MauRki$Tv3O#Y^nBfs;hjy z0}f4v4`e!qXxoyKdFrm{f_|_PI1> z4!`6omO9nX0j1?5!Z5gjlBoGElc<3K)eBwq{{4GK{0yP{ZaaI9)S;_}hDk}A_XS&% z1|~%A3{Hq!W;9$jHBQC8SIhe}T)ld=6q3aEV66~R#S_!dDDx%9o>`RRUk_;D<-2zc z_-f+8MhtqEN{Jyq&np`<;o?qe7Rg_2ps7n}VD!N6kj9#IEe?HU6dsxopA#I=%feBc zy5g+giUSSO>FxW3D7hQb<9TRN31=^-p+JLCGtK6@?wB#UMLO@5{ndcm; z`$}ih{{8{EQ1ua*twisAVVeORzWU*=gd?%;g{X+(=e6xJvIB-bX}&eGW!ML}aW= zIPF@vIHl1!v+WP-y0MEg&#p7i7&J|HsjlKIZsmJ-@AOWz3EL5yVth|2thZgGZRw5O zOSf9vQ4pw1i%ZmV)*A0W1sI{vhh^#2HcMVmUAKJlMmlN3d)-U|^y__k%jp4YclVxg zCE~dGkxloj4s86mQ^_PXt<|r9;D-fYfZ`1GvYr-LKPKrOT(`F!ncz)m_NY5=|8jD2 zvRmgP(+TgLcfj`T-o1McG_TBt=3253u2vsfM=C>ikE7qq$YN~}96v;$-HP<~?_aA9MDJ35T(BBLG%&8Kuo#)Q;z&5|yhY-c z(BSw~@irsTv6xqkuBJORO&ydsxJ3{L(dZx&?korw`y@^ZL&c^~PgrRG~lQw7{ zjkrz02`++u++}2mZ;`YEB4Kd{@P$xN-+C0_$aZ{JV+4;IXe&ffR)>QiR)upK9m&yL zR<-+o)%NCLJ?HKF|6BGLOC)12GOf0;jWsDtSzE0|G#FbULS!javZMterJ|w~T9isk zWNgV!sbnXGR_XV+%>DV?_i_JzzvKA+^X-p&j=6_=_j)~->pIW#I!|94WI@tn0R?wEwL;av9pnMjQl2Y-Y zh!O3+ShJR^5+XiV+D_-($&CMih3Xj2Uhz-?2lrThA!>SPR@3hKx1j{C4NTqGT6-#y zn~C*LfrFQAK$^+Dynkb77bK`+XFKh1?vWeDX$iUQe@q7SZ2QzO!Jx3zW*Gn zL}o$0Sgq|i;14QI;-zhtUF2LpL6uHmRAT1)2;4-7#Jm2jhx%mPfpNYR<=Ao1bj>}< zDUWfQ9Oe3BH;qLhx2c@^$bxRo{*g0mO6d0!as3}N?mUm$mjNA&5aX_WM=C(|JO0zR z|5($e1lQxYn$v1*@2^K+jRyuUW5(AG%nHYgE2t;df1DY7dapUa9{Mgf?8;nfD}Lcr z>es*j7>>!8&)aKkSGFz#FgB<2Xa~fx9YO1(fyOKQ6c-icXq;bFOyMp%fAZWUz=yXz z{?v;l5Dv1k`#%4qiu1>Th~c@wJQ+l5VfJv~@GY!pc&%A$!z{YJdHc4Iy(#RH2-rBa z#m18+Kc#M{bxGaq$3oK~dNQ2b%O+`+`}^K&xe_&QutXrO$DSJgBm{;K^h$q_x5h8H z`EhBoR!kpqZHW)3NYDZ>L1;=vTHo3`P4duQONyR~nQQyLdi}cTi;ZfPd>FHP9e(K7RF(C_rd!h{ z$kXan*%(fYTHE|jXHgEZ!^Lxi+Fc9`!71bhgKL|$xB$b!Im_}rhyK>0z*hU5*IaH~ zp1^#n9Rkuaxw(yUg>85vX;#SBL#@))*dF5+b}Dc;C^4o20&E}sX*ErT=iIA!#nI+w zQ!O@dahZ*nc)nzQ2Nc>85;zFjy_7Z7g_ zJ70*O;}~|ROpWk_E*jlF?Bjdi(QfzU=g+%}M%Kujs`=a5=61hZpNuEf8drOe=vbz3#vEDd{mZrdcju{#=43790Whwtllk<#%bwB9 z*Ew$LX_?KO^ukV2PkAL+vKp|7ye0>dn~k-E=Opll*7?{eB4Y$b_>^@#BkgyWCwPHU zFSZ|cE4mlAhjVqgro2enkc`KVe?^Pl*J-o;`Xdvv#@H{2TVMI9tGL4AIMEjLr``IQ zYq_N{dsh{Dwu5n8NL=U5(|_%(9vAUrUW?SG`0liSnp>RG4vR(N7GlQ~Xc zMbo3UGrOIHah4G{k~TVQ&>qPU7fM%&>XR~-+%i+s8)nN}YumU-IwR~?1^a*T`t@($ z^s7UL1eBENuQirNfO$Z%ZiR-Pn9{tgqN0hyW98id3si|BYh9-K32b=Y(xti<&3jzu zlom5In<8CP@yewvpdH%^Y|WghI=(N_UJY3>`oo8JhCWg#kUh*^wr(j_99i)uEn2sh zbh(9}%KcY@A!P7?Bya`R-zRW$QD$?|y2^YAyD4;St=3-POu2n|lu#A&pwQ!QVM%|l zejSt&6Z2+m`)Ie4KrR?0B#H^8eZB!s$ayR{jc~klQ!u}pkU3s7hwfRwO&oK1%A7ez z@~l?+{Sx$aB(~NVZMAUvy&G)^3%>}lh**C0T016k*XlTj1dpPN&n=s9SWD)}!qHy3 zBe3zgFsJn%<7Ddxxw(ccMU$hp>#feutKhi|(6>IHg+zId`zdGr+c`Bg<0ALa$wpk6 zp(xP(%EXWeGY*xvWGZ0x#6(I9IX%U!`0(LQKNTZZPuQhsa;Mc?&_UG$z_F@ix<5Lm zE+}+TAUzi_)FsLVA+cji7J$rbf#^XCG0)y!vvOF(haIjKSI12#)A_P)R*yD4)YTjC z;OuS6X5CRJRoN^#j2;JQ*DUSpbgS&QfN3&I&yo<~U+{Y1YQz}X@HohET9GaTlpR6~ zs9Dg%?6k6Z8KF6IWty3{CQ-ej`90JoHo129wLTAwzN3 zZgk$H_zY=vNV%JU^_KlqUo(xC75_?mr8wcS<;3PoW_Kv4cc_ouaqa#Yb%WZ3I8Zsf zBswX|p0{jRpld^!sW&JH3~B*nT}rmK3dsy(5a39{4VRuHwemgb#n1y3bB?E^^vEzC3}vEhZ`3{B?*p;pGzd6lOE^uF`T&5%)C#v%9rFv#;;+tfkz=&R!8Z zW>>#?TXc;Zu|O>M#ktVw_sX*3@%W#6d{miytRO#Euo4*GY2oi1Z9yn94`~A_y6I5Y zTn{}fXT0FR@hq>XppgCD0pPo3$9@K{4tm(ZK9}L1FAgzzJOlQjk8?LFY^AFF0lW4Z zF0%K3j`l!I#fT?p+v%@xjVL|)Wm3E2YAD9)EM+7?mnmwx4qKBBGl#A`StV=ggy}g| zAMxR8%lOb9W zdc-zAYX`E!GKzft;^PN%2*?aC(cse;=flhQXMTnxpT2){x1jGD$DBNWm%cVd7@duo1rv19*k#Y(Uev%f#Bi`Fmzg`RBeZjF+urvB~^41$}ex z@qr`{$#^a%|9_2eIeMVvLXl+`x(g7CS&I*k$SxL)^oH8UcNYd|4;vSKS~bSl)%8YP zV0F$o;e7^OE8ji6U#hR(gXpT&(9jA2@)!~KR{k*Re#@8fhwCfHAd@}o2bHzF!4r}@AfJT(rMfR8M zXRiIiWYv-3>srzHiR6yyIZyEr^jt9KP|hPzxK;5FMvv9^74^=i-6AMgRcJ3)>8eLr+8N*(38z&m;FKIHE94ZXYF8R zkK13UJ(qTqY>!_6*syvqova&exhn;nUq%@tmfV8axi@s5YmOEpce^g5PkwMeeXii9-AK3ML$P9NMUyn=T= zfrll>p^*qsS&>OrTex!RBy3~#o$cFVHO3a}iJ+Pyc_)zjv-SRNsi~tmF$bcR^kF<P)lnfK+Wx|&i#D5_JJg%SF5q+K&kzIJl41%H zWsm7rOyAFGJg)&K?W4z!#pUKIA}oRV3BGw)ead+*vI*-`Gat--)L;u)8a#$Z29EkR zP@j@T@M2?&D;aY$CD)o)Rye8>V>9*szE+$TiG6(FIm__Yi_lMK@g2AZS??_OGlB@V z?mDayD5_ZBY0c%V5>X7f>psbSO_-6wnQ&U6kH)R*8SXKhC0XItgE{yqF&+K<8Dzs; za$dyML?-9dYEo8}m;^t__S^?z&S7cCmQbF%cj%KRPrxFIFIu-EXqQ^iYx#8B#3Cmy zb7k+?5!Y|uem!Wky=}oR7rejb@%TP_T2HLp6E~oLe`yE%qiT#j)4lK9i@okWvOx%Z znJs|vZpEsC&f7G2$&P0x@Ec@q{K4f<<^OU|fL1F`<3F=JRTa~g=~{87lD1NQ@l%{$ za%^0jN~A9c&!&iC|Hgi?9y*_fVxG0VfA6xaU-^R~1_joU=#7T$H;t1);MJ><@%aIh{b=QYX@W8Y{(m|L! zr>;8oFy+R(p_32x3x1UIlv3eSJ;2oUHY2rF!xsvX$e`l~sdIk^2^9#^|JX5`5Em@X zE-M^d>4;wSd}c;}@~7e;7D0yP$aD1@rZbwY>XU{Yj@}HAut%&U<5v)!y8*G|P*r%` zaILHHqXOHtWa-j#=$do}SlA#lJ&RuI9J}%?x-<06ksk{pL#cLKDmo8ed-_o|a*KH! z4JyO?_UW?+p7t;qAliDV@aE0y{Q1X}Wfw8Cils_0`TI5J)|_rQSG>}U=RrBH=apG6 zI}BgYJgc7C*XF^^jtd~N=A??sWXU0<%)!oLWijXy5{`hiXi5#g$b@;h2_Bb$JAruu z{sdsKyNAiLa>+M_H$D1aKU~2+Gkl9D)IozD`z~H$`w3^NH)xRM;u>IqBp1MluvgO$ zqR&Wp26Lnt{uEjyUe>v@ow&Mp5-jcd?rs#LPmT+vD-P^E!ee>m4#CC7cCN!Q)89{BB4*oF1!oqjL zKL}%IDsGi~Kd@+_BYW>UHm4e2*|k z(GQK~8&JN99oS@xsDh|V&0dcUHLvLy!&M`8jz;0G z->ce+%kn=!iOKg@P^>Ah|AoQC1(?UGcD-k#!s8phLw1wwzH;-Db}V`2*GF0cr#BpaK*D3h3`+B)Fwn~ zFCNsPTem&~M2v<+u`_3s(JRW>R=}KB_*^o%;GPu#+4?ofVO@J;cEXgR6d73KcT{Xa z_;J0f+Jcq{O`a`sb#;x^-{YA&*ZR(&e%;x$i5*so<=e%Ty(XHP9vD_Y*sEe5s%UU~ z<(s;1bmF%J1qEFzXAvUNEE;9{yN*^$LEGm?wp_8sZY(OCOy{d39#b%N};f#fca2WhD-*y4v~IJj5%f` z;NSz+XqFsWeBynXWV?YO)0P>~-@LpPV^G-N-t$MQ8iVcWT=ot7;Y$b_>2bd( zP~#>&ijFf`-N$SA?S&I(&sjQlX1RV!Ddu#atG_JTKad9}IdOLeF1ggB{g19~)yA$* zOx+)OnKTU;uMCzGlMdQ>b<0>5!h^(WauxR##~ew-riN74AE~QE<%?9OJ$RYLjHR}4 z{Y|+cVqWAYz(20K(Ct7|qycm6^%v-B=`uKcpz2vYzKRa@_ne;?b+a!!`ryu;7ss|| zjZ9P1sfWd??OC~tP_{8<85R}`F&)oU^d~}*3;mSwzq0!pcP=(|zUVJG zne8v;N5;8E9p0AksKHs#4dt7)Ty2L4OT9K=%$PB!p&~TisuogJ8K#ACW~&CGeAsZB zJ+CtRvg-Nv=)vp}v2eDtkeg>Azt02@KV;Bj9)H+g_&L_Q+<n-d4CXN}vfdG%3% z;eok3=C^deyifm6y_p#^t`1umxMQ6ExZQIXdd8`S`ztGyEQ#WDQSxo0O+j_u7} zeqF>XZ>drYIIcCY(Ae~XiI-9qmnQUMnA`H!M0lw{DugLkb`=RHC zJs*Wd1n$r(pYfiV7uhO)Z<}&pBwi{XctrF&MruA?S~n(Df)O_ zmrH8qa|D`2lo>_9&qV|PST6M$P`WTgr^#2Sr-dM$`mxdj~@=tp#UBD+vxvr4Wa{6C>QBKX)kyKsgcs{M!DymqY(hp@#Pw=rXsP4d8c znjz5)4hz#1Jd*)+cdXFo90El50yp#I5Yp{}U*G8uE3GElJaugsgC0T+siGYmK%6rw zqfGj4ceE{%7>#41-q~p0-CeFem(np|CVq_+cL5TGG?EedoaHe%o1>g*H@fcYfjOJ# zp#pRtGMrHO@?|fK+K1i#Z*rP$ad9ohPFL{ z`6OmJn32CN38oK#Gm?!=yN@?Ay4Gr7!6r%MMw-_j#z@j2AB%4m@Q#rL1cXrgR#!Yt zUKf*VQ;)6Y%XiV@(sF%~dVZfJf$L_sc=6F)iJIDHxhv+qGOe!Y0U@FRQ>}dZ;O{_a?msdOXkO=>L z${sEZ@6==(7UHbW{k?aHINQJ&v_q}~QEb>owZxjqiBsx*nJ zw5)a@n|44uGS??b0|?H>mb@>u#iRBs9WqQrRC<{`A{()*Syylb1&0^oz7`U=j)l4; z_wEvfB0n0rgg&r=`I`?0#*BTATdOppRA!YxqI7i6!BHiB1R&P>HnN+SPryE%4>p@h zYgQIHu~Y4+G~?RYcX#=`726dRv5vukC2R9rJY$1tFHg)tLApaeDwXTxW@Uqam2LHS zEz}9&y9Z;U!4bUVH;(RuwU0EL?m5b36_MArsVr3(fo^0nom~ELHP5Du?!HCWu1A$B zqioYsf7-+&c6zoMP_I3Mc>6a!cCDNat0tP0$IZim9@GwgfZkOJaw+%V0ZZIYJGw~U zz>&3|PEg8*fLImr$4u5gUym_GPZB_ksisks#EMC!h$ZAM#1mH)=M6jhD);;rlMV%4 zhZ-XlTtl%7AzQ%WAfGD8tCCND%(~OFG`%>ja;Q}%hfNm8c1cY>hzXI)*S!OQf_6~? zc~Q#Rz5kBJU%Bq+%m+LD{jK)@KG?K~swRZu1EoQD`rtJLoq*d-FP*r6AjvKnBK(Br!m_Zg>1& z_e}r+%$t=}D5N-y3$00R%^(fYuW2r6qz~j~(uscYBX)h?&A+dirW|Hkn`y*Zknh*( z&e%{I$jH{S-Nh+8IWu{&3sT$dIsCcO+vH?QZ<{aAE;^Y`!jHbsm@fr8i4~ZUu;OS& z_FGl;V6~1NwG{0Wbv$%pgLHaxr1IlgT)}bmmjtnC=-Vbza>EegcT`5Oe zfx|{zX)rA|-*$s(v#pOF%^)njC000>;Z}gqJOL+;Q*xT^v_6Hb`SB)wAg<5U3nB`E zLa(T(VBBx|<4p|_CW*1Nc%NdTq>UNU7r!J1AURB4U6QKKR5 zbAA~HDX2;oj>aA~Mi?2;9g%^IU~U~%fl#NQ+NOD_ZIq~guTpbQXO;mNXH-EdEr|^H z&BIffk)M*}fW^mH=-)Bl+J$WhCSge7T3iaSUy}1`J>zRQL2YLPiM0;IjegmCz1unE z7Y~qavv6S}j#S0U(m|bo5K&%bFy0P_EvY}jwYpz^PlA$j`F7u$VMhrm)eA50^AEY4 zj`)8&U{Nvrilk3-uHWGpQ!0&_Yyfo)_aML%%Rx|DJiTLjGohdfXSKuEw>`rkCZATW zLV`|xLjRg<=i1tTM;3zMVoIxv$iP7v7VOndh_HT2O`)z-JYwWH}n#dZY=gjhsGT-kr(-RdDg z9tZo)-!?9_A|r(*&6v?0Sa_N4qtX%^f!l>k_8~2nyEX31pprwwZg&pCKM4#Oc~S#O z=bAdI+9={%R4#Su9X`|bPiM~LY~Dbk67n}Uw0JL*tzAT@aqgUEa^DT^zb((N{AjrZ zS&a%JiMU^X$w|r820xM*b)B?QPYVS0TFJ^{+~VG+w4x8qx}05nS#)|zODQD~c(>V- z;ibB%X{t|AMi`+K3v0FAg#C zRLsAx+nP{SO_7;N^qFsdpG#qf-;NK%J9Ik>Lq=q!TP3~d*|HwSFpI&cO;js#f_Z%D zTnGwDZUWFzow*q{NJ3cIm!aiRMFfNm5tkcEPMzhiH)T~O*vZ(<-7r(Nh%3ic{whcv zDKrwj7di@P!}&rB5b)vMR1FQYAUco+ioN{@cBzdhDopC1^~cbm3g_X0 z4rraT{B3a_5*Lv2Lun({nU6XZ6-2_im^05u<`1aT8sj;OC*3Zk~{g2Xmi%x2{pZm6c_vR!wsbrpVuQbK8?R4DQ zU5anJWfcr1TZ~tRJpjhV9yw1UPg&fZ$`ePTIF1fcp`fevTYe)aCj*9uWQtv&cj>s9 zEcxg&qPLB%OyU>uU7NLR*+?OV#9$>xEW$g)JJGHb!_>)CJCac;9sII=5eKn96)P8& z_^c}9dC*>hjqTPbRW&(09(OwKk8JFmKfBgfx(;3as%6?5v!n~0pW>ka9?W7ooLAVU z?fy=ZnV|T5cYJqkr|_^+t%pKE!{J8e86#4kFE{P3b>WidBtM?nF{azZ zzbek}1)VopByJ42A7@xkT$QOQNZ8p+XH(3^jGGx3nX!6E$@XD2Z{?K&eYaIn*~ZCz zeR&IJ0@*wubzwg7Z|hF%>0kHaazmcv2})F2{7tE)y%;Kxy`%Hhq=l!M@n~A{)-VLS zyu7aPULm>s4R45n7ihG}l7R99E)nz1_CQ_Pf&Rv|28Y)H5Z_6Y+7;N0X=kDA?)$81 zyoJsPd1FIG+MGzGf&x$dfdkvawVCZ4V~^C)oBLLR;Hf3_h22j;-DLg=*|CMwj`0>6 zm{tlijDv?8+nD{;wr#|9_{|1d^;KdlLaR28!bkkKKsn@A!8u?IAn5dj6?17Zi+Bho z7$llmj&5t&2=U%!M4iDWPBc^q=M3c}ZykzfK986TkCxmM7RS~!cK#HeGR>m${|>ZF0edZUX@Axu6_tKj zDb!!*iv7xEN6+-2Gw#R0mayb#DXZ|WeRxMo?B0~yJtwwQ{gr3*5h^;9 z4XxwU(PA8xW?XG!F7sAs2zP!+AFZQf68*uo-8myO@w*h;6c+lb3etEtzNC01s7P`A zd%HF8$0lb=H-+bH)`)DzbeTk~WzeruMjE1s-~$oI-kkab4Pb}FuV*7aKbu^AJZJOa z{tKE&HZ(NgagLhm_(k^i^SJ;h9@5O7hE)dYWPjy^D8%NGs{;hO!;C*s{VdK6^)P#S zW*5IafSXCg&i2`vOB+MJH{$J2T)>KGsE{Dw+@U%;a;=c$<<6-(v1=3UYdlBD2E`VU zW56I>MH}`qN8DzpP>_CX#T0>yzt=9`H?D^VF4=|x%(QD0mcq>Zvc~BPT22m+-kfvu zrr*tUgl^tBPt?s+Ar%OMHh$MHZ|$evrK=BPMU=Z%N5}HpJsbs4$L-|qd~ss$D4(bP z>w>aqz7#J;CQpp87!(d|(v)r-vx82MFG!MombWwPK`AD&9u!llKWdhS#m{Y9_I-2K z)lA(8f-L%S+6MN$Zjf`C>tQ%Y0P^NOP8~yy;1mqktQiPBCbFFbeNJt}EYyqXG&ow* z-C(Ffo6*3mx@2KZ>jV$6Rq8=75wo3R-KW`)UY?)wD@U6+inAZ>6EbN(nuv#UvRWxj z$Mh&G{jm7S7Ski%J)6uA;uPOO`_vP&ho8bc@)bkSp3%Fg%lsClu}gJHfXVV?4K{dn zO${bbtre7u#TqxjQSmi5TC)6rUAdK>?(Ks27X8D4Z1>O>sgD}fE&XZjfev9(WGzh& zDXOmXoQ%O;Xsdtal%7iAy{ItV6$=?2F;-pY04IY6j5^vQs)C(J6sR(Q)rOt6@x4e z^7_)TBFt(#ePYSnbgr(y4_zyjOmYJQ1CJZ6e;v@PAhTgeW%K_IfL6}+AEuC6=YPLK z%J=+t;B({uSKxDx{|A~{mL!-;rrGWD|ka_Na zr1oGoaKhbzKmYIP?rVrHk?2#iozsJ>tE%Qf;c_6d99R$oDIha&t_f>(!f@ZRt5M8= zqIn7X>lhoGAij*)^XGksxhcnRurIzJ>GwZBOxxSf&o58iqNC5v|BAtm)H)y5YRk{R z{XhS6DrLcc2Vsx-?;vdLT|b}8hQ6W){0WpU232W6@;oN%$_@jpirT-#~AI_I2N|mh#ZZYxmpLtCDU_#=$Gj_3rY$ zC{mkuE`a0$tT{*&TdK;XA8)Q_P zX?{X|0knw&=%yl_#$S*@N29}A7f4+Co4PpqGYX^epOT=pJwmAOG$Ip2Z?9-`ccVUm z!d%l^Ii@}&q1$cVQ)BX4zK!?HJr@zDs&jttAJ%e1Hg3ua1yJ-=Br|yr`ef_Ki(TRg z#QJyOkk$-Ith&8ATw7jtxokh5!$VeflWq_6?(u4_OqFp)hjl<^`I8+X@AHD&zvIPB z`g6&_6#E_74D|4>qrxWtd@LHdy?{iLP_8XN(j@8(FiPjdeAwn9>G#Os7Y_C$P=_E zBzgW$JFe+8W0kbSkO58|!zfLasOa@(#u>evW>J(-u(_cE@om(Z|9Q^sWtIUbqwv!w zQ4=Q>e@gjibT||kfKktMMizda7^nU|$eA=zB$@yk9fvyfP+Zd=bi~iko#hl^*z*?v zqU{v5!Js>DupS{s)|37nRpf-OhmVvy-^K~Sba&U`9RRQ;-zBe5%aV03(J1sol&6vZ zek$<0S=2+HpRX%uuy6FICPRz;22Q1X`Dtj3j1aLsmn#QIZ`t5aU@HpID$gK2n~F&B za?_qxSrlOggO9Nej<+fl$vBSRxVn%WLPqR!x=+X)q2opZOnDpiLEGq&ygC#?V*i zP}QrOotb=V&E}V*#}V{YIY{qeZf*vAn8ZX$VdK;B(NyjVE$*cWXT;I4q{N*{P~eNW z*N2?_roa+oVBz8G>#O2Ns-FQ1pp3@iI4uC8XUQk|Or;gsD-{;`N@ivwRzPFL;-yO$ zpqAzy&7w=P$o-S=g0Q{?Zb)w(MEQ z;&EaxOaW=Ju{N@kD??a}!E13p#CV=2<-#idT*aHOPgl5YsAl@88F34n6OQWz5!DltDC@3C6m^oE&uD04?Xr|F#NXV^xnw_& zQ#J1|R10Fk!=PTtvDcUW3@!fn(VKbX<0gJOS^jl^t@9Qw+KI{{M`f<~>_V%+^en|t zUTaW17hMrhX9g$Lv5Dy^`kgx~wgVuldYw|zmAVW3cy2Ny$ z5kKi={H2W_Zq8i)?i`U_kKYZ=s^$|*pv(v)Zw%{hWxA7Tg4PO2n*c`+ednM#Wc8~_ zf^^b)++6o#g5S>t((+=Kn!1MB9+dSjpzqwt2mvAF+XtRf4E(LE6Vbg6N*N4aK_6hB zH|RR3!dc`mNGnb}ibG=a`RiBVDx|}b#+wv(2KFy=)(WY4dPb}gug1h{CE12>VcX#( zo_(PTx=fvV)}?wCpok1*nJirmNHYQH$MD48`}Nz>MoDJ(K@Y!t1Pc9iQs7|yf-l`S zeQk@liSXQ33h>2oFe*7+W|OJNsnl5A=+Jwuzi9X1mTcfJXrf~Jkzv{ZArb_ph zf1Ue{kmSk;A8Tzd^+L(h6|_3ZyQZ7(Nk+^q8F23Jpd}3XI9NTLaLmpZkn>Y=se>fi zg&k|Lipor^5ot|0n^i|uzijt79(pPm_bn2`lqmIe6DBM3*2giJz;Kj>nJZm^w0H9} z8Z}dw|Mfe6;ABVzMd3t)HuS5&{*og-!Nepd;UhC*Z50dmazdH3DXf>F@;=>+yYm#L zYaOEvq0l%TYF#;+&({uMLN9)fk&&C=YV0y-Shec-?5wQjw3YM`!RH@!8{yo8!a564 zh4Qm*OzFcDxFO5VeZqvd8q!u_5#nC+F(t>bv4Zg1J1(^g|NK)KED1rtd!_f!Qa2?p z>mu*_?^uz)IZf(NDI~{)sZ;x|PSFg$UK}&qOJ9+Wz>guP)bsD+hybxU(o2-4BDrh@(ii(OXDmLi+HJW0f#*x}G zA`7%g@`xF58&qI6ULnDENkN0`ub+@PRMcV0_ouUyrQ{BK@*7pe#)=P@>6IN3NIq7H zL^znv4NkPl$!U|)pGHX*k~b${huLePorN*^4EAdxaS!I!moW&`pdz7`w-k`4!uth!<~{jvD?QK5fG5{QK5pxDB__3G(sWHq$T6N61l zT7eA!cmGaQ_Fne1?;nGCsDe;&Kn&g_FM#EdyqZ-o8z&G<6$0OB^r{2@%4q6XZa+b7aQ6IpBhFz`AGRTOR@c!{rmnHh8960>+2d`z zVbzU2s^Lb8sg{O9TJN_XUHjp8#mWHR%|m{*=l~;a$nVb7XN!^Z6+f*d$kL33+|ipI zKPh-{gL!a)5|{pLHAj=zhk7X0n+e2MHADB|c{+j17>B;ChRrW?fiTZ`>F?Tr2k7Yf zgXw@MG@OLA!RjK zNISWOPnVUkcT`O?^c3RX4vr?b2xF;&=j@2DcxwBYsS)J_O}BJF3X_3P9oRGQr(=W9 zy)5t8x${_SYc=jYv!ST~UF4I8rEi>`8pS*UJlfIIDIqeX(l@oruwpe#2lM4E75s;} zTYp!*4TrgGKome#<68!K3vrm>)^38)<~F{Oa2!=c&{0E;dHM3CmPJDN-n85oGc>6a zG$x##YX$nNiwrr$0Wqxvx z*`FSS%y(yP_Kkl=0n&f@lk+NPMu-!fQs2Q&U{(Z{0Orcikl7E#zQDlQHR*$SHIsXi!4yvNt$fZxP(5b40oflAM>C za~m9Yt^c8%Pz_58MA~8FS(!fI9h~4;*Nh}-!=ljM5jIJ72lbclVvkqMhHCur$FHcY ztWM2UNQsWqp#A8e5$jce#hNG{H>gVHl3}KB4^?RUnWc2q_P-CfaR9nTg3#riAQltz zgyWp85*WZA&zTd``#;{tXD0LI>V;}!Aj^5bJvAXAXJ&6UZd#9jNk_d|=bOP8={UG| zR18H>t4P0h&s=*s9tdFz&c?H{P`x~l)>MkjNbZl4BtG2dpZz1U5oToanl z5U&O+0+`GA$ zPrMp>W4o9cAWRWlo&6zh0=v8Xp+YHdnYhB~t2tf)Adc?%Ny>LfzrTyE$l$9x#E;l4 zqX*Tl^8$akE+B!<@6^0PbyK~bJ$LR#z#RRY+5yFbAerD@#ZH3tqO8}`EgjJz9WfTOkp1>zW(*+fcPdr5GP0RUpVy5>b?3>4S0`Ra94>b593NXbL;n}2ulK<0 z_fuvu|Gxmo0r&hSS8v^FMT0AsGvidm^jz^tYono&+pP4V?Gg>MK*l-5G>JVkhDGS{ z$+U*4n#UvckYz-^Yoi$eD~=7PI5Esfadr$Y5xIkUBji5~g?T)`9N7SXpV~}8^QvH< zO$X|(WVut#j)$R9^~48nwPZQb0gh@tm_54__0UffxSKQFn9I=dZLX#ZLq8^GY|XQ6mpGhO5kM)A zaR(0Qfv92UF)Xb4;3 ze_HxSuH8hAa*scwB$XTAuSD1S)Z8NTOfG+MQ@@~RUB~eyp{SJYZV;2X@2$s=9>g9O zjS2Tei;*iD=G)9@p^$X@Ny(iyYeu&&fF! zjp#?m;S>};HOS`W{qxvW81R;TpTsjp%m240G_)6XZI{vqNY_d5n&+AKSSM8BUo4Q7 zd%%>rsV;xuh-#YmDLK;Wj3-t10&ZVw1(RUY@qSnNaQ5{$0^Sz#tsQm8jspkGgPjES zt*NOISye`v^z*dT=84CAcrNXcnMV0UEgj_aza8vEZSW941Y_}xTmg&I&^je$ zzUL;++i)a!h0Hec64@X3?5wx^+TYGC_bER&8&FqdM@ow#c(`N^20z*$HE@H5O{5>r zY}(!B_}8H~ekRRevXi3{!*&&44!1Vaxrw>HU)L`YCxYl6?JL{#;T~Y?HTqnUIP++B zB1PB;dCq1fuU?5;jF1El4h|j%q7`hJhL7u+g!ZVaaz>LCp)u(?4xBly)>2`f!R+(H z2d-@l4O&0Gq+a0X@4o|xRHH|aN zC)P2w+DXG$$m4mhBe>U6KZ*r9uUL8V;n8GFNUgz!F%PMA?U0Q)34fO;2H&+vND6e^>cknK7OI!rdwTY4J4~)#J5jPPwQg0YJx*Aq@{tT>J5`ncaO0 zZtEsLy%~HeU`3llY60C{xqZ8DLFGrv+h71F;|G!nE-p3PC$#z&_K9HwFc#JbSYegN zQgXnsfeAU8Krov*e9Nn^_hf({CrgFa+AM0Q+9D>Cli zzc9(^VU+dMin>@1xWDR0)%BqpyUVzUU*1uF|K2oy78{n?s_=VtP-OlVnuU)&^@LJj_j3`p+fyPBVIfE0NqK7n2)4rP#cX3A11COB7@q@$OogBgGA`wkW zTWFjN4!r}qy_pVH?PmhJ1ktYo0Mm{?v+5~wm0k*b32Fyyx;p~L&pAa-G!Z$<$$1t> zo$DYk8Y@I(?w4n)g33Zt5qQv)tB+{!#l1eO5@F)&r@!&2u~N0c!z8Cw6SRKq_uz9q z-6DFl?iZI^ApXM9TxHY8O3%vO@H>Yu@G>a|xM<(Xc`T_aO9&9pAFm>^SX3u4xD|tY|~~ zr7?VXa^6S(hner`Fx}t@F>5kknr!yX{8-8tBPrBZm;3M9HLxL=xP=bWW&T|gDKR9^ zcD8tp*l`*tZIP#q4z7>+bI~wwn%}sGBqJo359W!Tu`Y}pRt9Wt-oU`w+4)rH4YGb|X3G5^fu@XHcwCKi@ElNDh9stU%nQzbSww+JNDL(zjeIn-e;Z9`iC zcr^e4<%bs_PaltYNKI;gd(py$%_zZ=2BR3uq`@%803?(4to@4Fb9p0fJW7W(YuYp6 z@YnL$=2!pst{Wy}9~E7bz@am;vWy3t-=}e)M2-L3>GjRte{Yn*f)N-bV-aZzwlKyc zCd8RB$TkwfHSsyxYTrv&8RM|lT<&XusVHZH@5X{J-KgVa90Ks?#>kaugW;fUUk$#o zwCDmSNfDG-dvNu?R?ha^tYWweu;-eUn^~pfA8p%ecmMgknM7N<)z;vPk2>eO^8Etb zWs-&gqV>Uyxi8$bZs0E`TY-uvD|(%9?zQUW1V@lPu`aorx@jZK z3r8(SxdFrdUPx+oapG%-&2>5i@7{#s+n#nck$e*sJxzTGzVb2|B}YpTQWC&^tTiMCDd$a=f8iK5o}@hJBY&(O*SxKg zVKY&((%;~{HTY+IlVBO01}@$LHYEiO##^aoPs{_jThZl088qbR^&Qq_;=dQ`#b=}) zvIT@i|L_OX8$4EVH=9&+?5aZ1)K+`}EE9i#WXz|wQ7FJY#VZJZ4VH&l;)=Dca1={mmIK`xkxgo$c8n@PzADI;H>|o1K)#1F1jKo3RMo1dkUJ-6h{fZ}{5mA7i}fvyL9_1r&h@zL5f`Lpp=3PX`dq z$)bWxB9%2M$1V_Y2g9r0oUBqp=`1;cl5UW{ST$a&7@Z(1p zouYDz{zq4U=oBs?;`GsSaeTuMi-7MD6tg-`LsgZtgH}2Itn}~JGF{$*W<{Z3xLg9l zp&Q-(T|uNk{$%lrA%M0+pV3H)chGt4jHn)WaIKmY z4|D$9L!sqV9qEakTzmK-|6#k8J^tgfCoq>OmSwcliOlMtOfS1Rq~JKsfNX=J;$k^@ zrFj?NiXCp5dVXns^bGZ1N zMV24LAI1Z8K{4&^rDZwEG}BxK8;4O z2&Y{{!@}7)&2-XwwIezk!-BB-C<4b91`MSW5P*zV)1l(z)etX4BMw<=){wXoZ(SAp z%6pW&_7flayjZqaBc%N2JMloOuFRd2&5zj&weW(PfB~)yYTLWGR7)r+kJGaHe*F6K zRyvS8u$L$O2j2)pJ^}dC7}(Qnreg02`W|{w&KFpi?25m1Twd#Ao SVT6LOiN;fmq7CP5`+oq&mq@n& diff --git a/node/plugin-c/blockchain.cpp b/node/plugin-c/blockchain.cpp deleted file mode 100644 index 240126f826..0000000000 --- a/node/plugin-c/blockchain.cpp +++ /dev/null @@ -1,100 +0,0 @@ -#include -#include -#include "proto/msg.pb.h" -#include "world.h" -#include "runtime/header.h" - -using namespace org::kframework::kevm::extvm; - -static std::map> accounts; -static std::map>> storage; -static std::map> code; -static std::map> blockhash; - -void clear_cache() { - accounts.clear(); - storage.clear(); - code.clear(); - blockhash.clear(); -} - -static Account* get_account(mpz_t acctID) { - std::string id(mpz_get_str(0, 10, acctID)); - Account* acct = accounts[id].get(); - if (!acct) { - acct = World::get_account(of_z_width(20, acctID)); - accounts[id] = std::unique_ptr(acct); - } - return acct; -} - -static StorageData* get_storage_data(mpz_t acctID, mpz_t index) { - std::string id(mpz_get_str(0, 10, acctID)); - std::string idx(mpz_get_str(0, 10, index)); - StorageData *data = storage[id][idx].get(); - if (!data) { - data = World::get_storage_data(of_z_width(20, acctID), of_z(index)); - storage[id][idx] = std::unique_ptr(data); - } - return data; -} - -static Code* get_code(mpz_t acctID) { - std::string id(mpz_get_str(0, 10, acctID)); - Code* c = code[id].get(); - if (!c) { - c = World::get_code(of_z_width(20, acctID)); - code[id] = std::unique_ptr(c); - } - return c; -} - -static Blockhash* get_blockhash(mpz_t offset) { - std::string off(mpz_get_str(0, 10, offset)); - Blockhash* h = blockhash[off].get(); - if (!h) { - h = World::get_blockhash(mpz_get_ui(offset)); - blockhash[off] = std::unique_ptr(h); - } - return h; -} - -extern "C" { - -string* makeString(const char*, ssize_t); - -mpz_ptr hook_BLOCKCHAIN_getBalance(mpz_t acctID) { - Account *acct = get_account(acctID); - return to_z_unsigned(acct->balance()); -} - -mpz_ptr hook_BLOCKCHAIN_getNonce(mpz_t acctID) { - Account *acct = get_account(acctID); - return to_z_unsigned(acct->nonce()); -} - -bool hook_BLOCKCHAIN_isCodeEmpty(mpz_t acctID) { - Account *acct = get_account(acctID); - return acct->codeempty(); -} - -mpz_ptr hook_BLOCKCHAIN_getStorageData(mpz_t acctID, mpz_t index) { - StorageData *data = get_storage_data(acctID, index); - return to_z(data->data()); -} - -string* hook_BLOCKCHAIN_getCode(mpz_t acctID) { - Code *code = get_code(acctID); - return makeString(code->code().c_str(), code->code().size()); -} - -mpz_ptr hook_BLOCKCHAIN_getBlockhash(mpz_t offset) { - Blockhash *h = get_blockhash(offset); - return to_z_unsigned(h->hash()); -} - -bool hook_BLOCKCHAIN_accountExists(mpz_t acctID) { - Account *acct = get_account(acctID); - return acct->balance().size() != 0 || acct->nonce().size() != 0; -} -} diff --git a/node/plugin-c/world.cpp b/node/plugin-c/world.cpp deleted file mode 100644 index 74416c53fb..0000000000 --- a/node/plugin-c/world.cpp +++ /dev/null @@ -1,103 +0,0 @@ -#include -#include -#include -#include -#include "proto/msg.pb.h" -#include "world.h" -#include "runtime/header.h" - -using namespace org::kframework::kevm::extvm; - -extern "C" { - string* hook_BYTES_int2bytes(mpz_t, mpz_t, uint64_t); - mpz_ptr hook_BYTES_bytes2int(string*, uint64_t, uint64_t); - uint64_t tag_big_endian(); - uint64_t tag_unsigned(); - string* makeString(const char*, ssize_t); -} - -std::string of_z_width(unsigned width, mpz_ptr i) { - mpz_t int_len; - mpz_init_set_ui(int_len, width); - string* token = hook_BYTES_int2bytes(int_len, i, tag_big_endian()); - mpz_clear(int_len); - return std::string(token->data, len(token)); -} - -std::string of_z(mpz_ptr i) { - if (mpz_sgn(i) == 0) { - return std::string("\000", 1); - } - size_t bits = mpz_sizeinbase(i, 2); - size_t width = (bits + 8) / 8; - mpz_t int_len; - mpz_init_set_ui(int_len, width); - string* token = hook_BYTES_int2bytes(int_len, i, tag_big_endian()); - mpz_clear(int_len); - return std::string(token->data, len(token)); -} - -mpz_ptr to_z_unsigned(std::string str) { - string* token = makeString(str.c_str(), str.size()); - return hook_BYTES_bytes2int(token, tag_big_endian(), tag_unsigned()); -} - -mpz_ptr to_z(std::string str) { - string* token = makeString(str.c_str(), str.size()); - return hook_BYTES_bytes2int(token, tag_big_endian(), 0); -} - -FILE *vm_out_chan; -FILE *vm_in_chan; - -template -Cls* send_query(VMQuery q, Cls* output) { - std::cerr << q.DebugString() << std::endl; - std::string buf; - q.SerializeToString(&buf); - uint32_t len = htonl(buf.size()); - fwrite((char *)&len, 4, 1, vm_out_chan); - fwrite(buf.c_str(), 1, buf.length(), vm_out_chan); - fflush(vm_out_chan); - fread((char *)&len, 4, 1, vm_in_chan); - len = ntohl(len); - std::string buf2(len, '\000'); - fread(&buf2[0], 1, len, vm_in_chan); - output->ParseFromString(buf2); - std::cerr << output->DebugString() << std::endl; - return output; -} - -Account* World::get_account(std::string acct) { - GetAccount get; - get.set_address(acct); - VMQuery q; - *q.mutable_getaccount() = get; - return send_query(q, new Account()); -} - -StorageData *World::get_storage_data(std::string acct, std::string index) { - GetStorageData get; - get.set_address(acct); - get.set_offset(index); - VMQuery q; - *q.mutable_getstoragedata() = get; - return send_query(q, new StorageData()); -} - -Code* World::get_code(std::string acct) { - GetCode get; - get.set_address(acct); - VMQuery q; - *q.mutable_getcode() = get; - return send_query(q, new Code()); -} - -Blockhash* World::get_blockhash(int offset) { - GetBlockhash get; - get.set_offset(offset); - VMQuery q; - *q.mutable_getblockhash() = get; - return send_query(q, new Blockhash()); -} - diff --git a/node/plugin-c/world.h b/node/plugin-c/world.h deleted file mode 100644 index 7c6915343b..0000000000 --- a/node/plugin-c/world.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef WORLD_H -#define WORLD_H - -std::string of_z_width(unsigned width, mpz_ptr); -std::string of_z(mpz_ptr); -mpz_ptr to_z_unsigned(std::string); -mpz_ptr to_z(std::string); - -class World { -public: - static org::kframework::kevm::extvm::Account* get_account(std::string acct); - static org::kframework::kevm::extvm::StorageData* get_storage_data(std::string acct, std::string index); - static org::kframework::kevm::extvm::Code* get_code(std::string acct); - static org::kframework::kevm::extvm::Blockhash* get_blockhash(int offset); -}; - -#endif diff --git a/node/proto/VERSION b/node/proto/VERSION deleted file mode 100644 index 8bbe6cf74a..0000000000 --- a/node/proto/VERSION +++ /dev/null @@ -1 +0,0 @@ -2.2 diff --git a/node/proto/msg.proto b/node/proto/msg.proto deleted file mode 100644 index e325a035dd..0000000000 --- a/node/proto/msg.proto +++ /dev/null @@ -1,162 +0,0 @@ -syntax = "proto3"; -package org.kframework.kevm.extvm; - -message Hello { - string version = 1; - - // A blockchain related configuration for the VM for the entire session. - // Currently only Mantis-EVM is supported. Other VMs may ingore this - // or may required different configurations. - oneof config { - EthereumConfig ethereumConfig = 2; - IeleConfig ieleConfig = 3; - } -} - -message CallContext { - bytes callerAddr = 1; - // empty if contract creation - bytes recipientAddr = 2; - bytes inputData = 3; - bytes callValue = 4; - bytes gasPrice = 5; - bytes gasProvided = 6; - BlockHeader blockHeader = 7; - - // This may be used to override the VM configuration for the session. It used in tests to avoid - // re-instantiating VM for each test. - oneof config { - EthereumConfig ethereumConfig = 8; - IeleConfig ieleConfig = 9; - } - - // Support for typed transactions specified by EIP-2718 - enum TxType { - LEGACY = 0; - ACCESSLIST = 1; - } - TxType txType = 10; - oneof extraData { - AccessListData accessList = 11; - } -} - -message AccessListData { - repeated bytes addresses = 1; - repeated StorageEntry storageLocations = 2; -} - -message StorageEntry { - bytes address = 1; - bytes storageLocation = 2; -} - -message BlockHeader { - bytes beneficiary = 1; - bytes difficulty = 2; - bytes number = 3; - bytes gasLimit = 4; - int64 unixTimestamp = 5; -} - -message EthereumConfig { - bytes frontierBlockNumber = 1; - bytes homesteadBlockNumber = 2; - bytes eip150BlockNumber = 3; - bytes eip160BlockNumber = 4; - bytes eip161BlockNumber = 5; - bytes byzantiumBlockNumber = 6; - bytes constantinopleBlockNumber = 7; - bytes petersburgBlockNumber = 8; - bytes istanbulBlockNumber = 9; - bytes berlinBlockNumber = 10; - bytes maxCodeSize = 11; - bytes accountStartNonce = 12; - bytes chainId = 13; -} - -message IeleConfig { - bytes danseBlockNumber = 1; -} - -message GetAccount { - bytes address = 1; -} - -message Account { - // if account does not exist, nonce and balance will be empty - // if account exists but is empty, nonce and balance will be equivalent to numeric zeroes - bytes nonce = 1; - bytes balance = 2; - bool codeEmpty = 3; -} - -message GetStorageData { - bytes address = 1; - bytes offset = 2; -} - -message StorageData { - bytes data = 1; -} - -message GetCode { - bytes address = 1; -} - -message Code { - bytes code = 1; -} - -message GetBlockhash { - int32 offset = 1; -} - -message Blockhash { - bytes hash = 1; -} - -message CallResult { - bytes returnData = 1; - // required for IELE VM - bytes returnCode = 2; - bytes gasRemaining = 3; - bytes gasRefund = 4; - bool error = 5; - repeated ModifiedAccount modifiedAccounts = 6; - repeated bytes deletedAccounts = 7; - // touchedAccounts is specific Ethereum's EIP-161. VMs that do not follow these rules may ignore this field - repeated bytes touchedAccounts = 8; - repeated LogEntry logs = 9; - AccessListData accessList = 10; -} - -message ModifiedAccount { - bytes address = 1; - bytes nonce = 2; - bytes balance = 3; - repeated StorageUpdate storageUpdates = 4; - // empty value indicates that no code has been assigned to this account - bytes code = 5; -} - -message StorageUpdate { - bytes offset = 1; - bytes data = 2; -} - -message LogEntry { - bytes address = 1; - repeated bytes topics = 2; - bytes data = 3; -} - -message VMQuery { - oneof query { - GetAccount getAccount = 1; - GetStorageData getStorageData = 2; - GetCode getCode = 3; - GetBlockhash getBlockhash = 4; - CallResult callResult = 5; - } -} diff --git a/node/vm/init.cpp b/node/vm/init.cpp deleted file mode 100644 index 54c97ab466..0000000000 --- a/node/vm/init.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "runtime/header.h" -#include "runtime/alloc.h" - -#include "init.h" - -int init(int port, in_addr host) { - initStaticObjects(); - - int sock = socket(AF_INET, SOCK_STREAM, 0); - if (sock == -1) { - perror("socket"); - exit(1); - } - sockaddr_in addr; - addr.sin_family = AF_INET; - addr.sin_port = htons(port); - addr.sin_addr = host; - int sec = 0; - int ret; - do { - if (sec > 0) { - std::cerr << "Socket in use, retrying in " << sec << "..." << std::endl; - } - sleep(sec); - ret = bind(sock, (sockaddr *)&addr, sizeof(addr)); - sec++; - } while(ret == -1 && errno == EADDRINUSE); - if (ret) { - perror("bind"); - exit(1); - } - if (listen(sock, 50)) { - perror("listen"); - exit(1); - } - return sock; -} - -block* configvar(const char *name) { - stringinj* inj = (stringinj*)koreAlloc(sizeof(stringinj)); - inj->data = makeString(name); - static uint32_t tag = getTagForSymbolName("inj{SortKConfigVar{}, SortKItem{}}"); - inj->h = getBlockHeaderForSymbol(tag); - return (block*)inj; -} - - diff --git a/node/vm/init.h b/node/vm/init.h deleted file mode 100644 index 74687d90d2..0000000000 --- a/node/vm/init.h +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef INIT_H -#define INIT_H - -#include -#include "runtime/header.h" -#include - -extern "C" { - void initStaticObjects(void); - size_t hook_LIST_size_long(list *l); - block* hook_LIST_get_long(list *l, size_t i); - list hook_MAP_values(map *m); - list hook_MAP_keys_list(map *m); - block* hook_MAP_lookup(map *m, block* key); - map hook_MAP_element(block*, block*); - map hook_MAP_update(map *, block*, block*); - block* take_steps(uint32_t, block*); - string* makeString(const char *, ssize_t len=-1); - string *hook_STRING_int2string(mpz_ptr); -} - -int init(int port, in_addr host); -block *configvar(const char *name); - -struct kseq { - blockheader h; - block* hd; - uint64_t tl; -}; - -struct zinj { - blockheader h; - mpz_ptr data; -}; - -struct mapinj { - blockheader h; - map data; -}; - -struct inj { - blockheader h; - block* data; -}; - -struct stringinj { - blockheader h; - string *data; -}; - -typedef struct boolinj { - struct blockheader h; - bool data; -} boolinj; - -struct jsonlist { - blockheader h; - block *hd; - jsonlist* tl; -}; - -struct json { - blockheader h; - jsonlist *data; -}; - -struct jsonmember { - blockheader h; - block *key; - block *val; -}; - -#endif diff --git a/node/vm/kevm/semantics.cpp b/node/vm/kevm/semantics.cpp deleted file mode 100644 index 99ecbcd9d4..0000000000 --- a/node/vm/kevm/semantics.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include "proto/msg.pb.h" -#include "runtime/header.h" -#include "semantics.h" -#include "world.h" -#include "vm.h" -#include "init.h" -#include - -using namespace org::kframework::kevm::extvm; - -bool get_error(mpz_ptr status) { - return mpz_sgn(status) == 0; -} - -std::string get_output_data(string **sptr) { - string* s = *sptr; - return std::string(s->data, len(s)); -} - -#define HEADER(tag) ((((uint64_t)(tag)) << 32) | 1) - -uint64_t get_schedule(mpz_ptr number, CallContext *ctx) { - static uint64_t berlin_tag = HEADER(getTagForSymbolName("LblBERLIN'Unds'EVM{}")); - static uint64_t istanbul_tag = HEADER(getTagForSymbolName("LblISTANBUL'Unds'EVM{}")); - static uint64_t petersburg_tag = HEADER(getTagForSymbolName("LblPETERSBURG'Unds'EVM{}")); - static uint64_t constantinople_tag = HEADER(getTagForSymbolName("LblCONSTANTINOPLE'Unds'EVM{}")); - static uint64_t byzantium_tag = HEADER(getTagForSymbolName("LblBYZANTIUM'Unds'EVM{}")); - static uint64_t spuriousDragon_tag = HEADER(getTagForSymbolName("LblSPURIOUS'Unds'DRAGON'Unds'EVM{}")); - static uint64_t tangerineWhistle_tag = HEADER(getTagForSymbolName("LblTANGERINE'Unds'WHISTLE'Unds'EVM{}")); - static uint64_t homestead_tag = HEADER(getTagForSymbolName("LblHOMESTEAD'Unds'EVM{}")); - static uint64_t frontier_tag = HEADER(getTagForSymbolName("LblFRONTIER'Unds'EVM{}")); - - mpz_ptr blockNum = to_z(ctx->ethereumconfig().berlinblocknumber()); - if (mpz_cmp(number, blockNum) >= 0) { - return berlin_tag; - } - blockNum = to_z(ctx->ethereumconfig().istanbulblocknumber()); - if (mpz_cmp(number, blockNum) >= 0) { - return istanbul_tag; - } - blockNum = to_z(ctx->ethereumconfig().petersburgblocknumber()); - if (mpz_cmp(number, blockNum) >= 0) { - return petersburg_tag; - } - blockNum = to_z(ctx->ethereumconfig().constantinopleblocknumber()); - if (mpz_cmp(number, blockNum) >= 0) { - return constantinople_tag; - } - blockNum = to_z(ctx->ethereumconfig().byzantiumblocknumber()); - if (mpz_cmp(number, blockNum) >= 0) { - return byzantium_tag; - } - blockNum = to_z(ctx->ethereumconfig().eip161blocknumber()); - if (mpz_cmp(number, blockNum) >= 0) { - return spuriousDragon_tag; - } - blockNum = to_z(ctx->ethereumconfig().eip150blocknumber()); - if (mpz_cmp(number, blockNum) >= 0) { - return tangerineWhistle_tag; - } - blockNum = to_z(ctx->ethereumconfig().homesteadblocknumber()); - if (mpz_cmp(number, blockNum) >= 0) { - return homestead_tag; - } - return frontier_tag; -} - -input_data unpack_input(bool iscreate, std::string data) { - input_data res; - res.args = (block *)makeString(data.c_str(), data.size()); - res.code = makeString(""); - res.function = makeString(""); - return res; -} - -uint32_t zinjTag = getTagForSymbolName("inj{SortInt{}, SortKItem{}}"); -uint32_t unparseByteStack = getTagForSymbolName("LblunparseByteStack{}"); diff --git a/node/vm/kevm/semantics.h b/node/vm/kevm/semantics.h deleted file mode 100644 index 93de72187a..0000000000 --- a/node/vm/kevm/semantics.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef SEMANTICS_H -#define SEMANTICS_H - -struct json; -struct jsonlist; -struct stringinj; -struct zinj; -struct inj; -struct mapinj; - -struct account { - blockheader h; - zinj* acctID; - zinj* balance; - inj* code; - mapinj *storage; - mapinj *origStorage; - zinj *nonce; -}; - -struct log { - blockheader h; - mpz_ptr acct; - list topics; - block *data; -}; - -struct input_data { - string* code; - block* args; - string* function; -}; - -struct accounts; - -struct tx_result { - blockheader h; - string* rets; - mpz_ptr gas; - mpz_ptr refund; - mpz_ptr status; - set selfdestruct; - list logs; - accounts* accounts_ptr; - set touched; - string* statuscode; -}; - -struct accesslist_result { - blockheader h; - set addresses; - set locations; -}; - -std::string get_output_data(string**); - -extern uint32_t zinjTag; -extern uint32_t unparseByteStack; - -#define logData(log) log->data - -#endif diff --git a/node/vm/main.cpp b/node/vm/main.cpp deleted file mode 100644 index df420d41f4..0000000000 --- a/node/vm/main.cpp +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include -#include -#include "proto/msg.pb.h" -#include "runtime/alloc.h" -#include "version.h" -#include "init.h" - -extern FILE *vm_out_chan; -extern FILE *vm_in_chan; - -using namespace org::kframework::kevm::extvm; - -CallResult run_transaction(CallContext ctx); - -extern "C" { - void freeAllKoreMem(void); -} - -int init(int port, in_addr host); - -int main(int argc, char **argv) { - std::string usage = std::string("Usage: ") + argv[0] + " PORT BIND_ADDRESS"; - if (argc == 2 && argv[1] == std::string("--help")) { - std::cout << usage << std::endl; - return 0; - } else if (argc == 2 && argv[1] == std::string("--version")) { - std::cout << argv[0] << " version " << VM_VERSION << std::endl; - return 0; - } else if (argc != 3) { - std::cerr << "Incorrect number of arguments" << std::endl; - std::cerr << usage << std::endl; - return 1; - } - int port = std::stoi(argv[1]); - in_addr host; - if (!inet_aton(argv[2], &host)) { - std::cerr << "Invalid bind address" << std::endl; - return 1; - } - - int sock = init(port, host); - - sockaddr_in peer; - while(1) { - socklen_t len = sizeof(peer); - int clientsock = accept(sock, (sockaddr *)&peer, &len); - if (clientsock == -1) { - perror("accept"); - return 1; - } - FILE *_if = fdopen(clientsock, "r"); - if (!_if) { - perror("fdopen"); - return 1; - } - vm_in_chan = _if; - - FILE *of = fdopen(clientsock, "w"); - if (!of) { - perror("fdopen"); - return 1; - } - vm_out_chan = of; - - fread((char *)&len, 4, 1, _if); - len = ntohl(len); - std::string buf(len, '\000'); - fread(&buf[0], 1, len, _if); - Hello h; - bool success = h.ParseFromString(buf); - if (success && h.version() == "2.2") { - while(1) { - fread((char *)&len, 4, 1, _if); - if (feof(_if)) { - break; - } - len = ntohl(len); - std::string buf2(len, '\000'); - fread(&buf2[0], len, 1, _if); - if (feof(_if)) { - break; - } - CallContext ctx; - if (!ctx.ParseFromString(buf2)) { - break; - } - CallResult result = run_transaction(ctx); - freeAllKoreMem(); - VMQuery q; - *q.mutable_callresult() = result; - std::string buf3; - q.SerializeToString(&buf3); - len = htonl(buf3.size()); - fwrite((char *)&len, 4, 1, of); - fwrite(buf3.c_str(), 1, buf3.length(), of); - fflush(of); - } - } else if (success) { - std::cerr << "Invalid protobuf version, found " << h.version() << std::endl; - } - if(shutdown(clientsock, SHUT_WR)) { - perror("shutdown"); - return 1; - } - fclose(_if); - fclose(of); - } -} diff --git a/node/vm/vm.cpp b/node/vm/vm.cpp deleted file mode 100644 index 954485ef51..0000000000 --- a/node/vm/vm.cpp +++ /dev/null @@ -1,355 +0,0 @@ -#include -#include "proto/msg.pb.h" -#include "runtime/header.h" -#include "runtime/alloc.h" -#include "vm.h" -#include "init.h" -#include "semantics.h" -#include "world.h" - -using namespace org::kframework::kevm::extvm; - -std::vector k_to_zs(list* l) { - std::vector result; - for (size_t i = 0; i < hook_LIST_size_long(l); i++) { - zinj* elem = (zinj*) hook_LIST_get_long(l, i); - result.push_back(elem->data); - } - return result; -} - -std::vector set_to_zs(set* s) { - std::vector result; - - setiter i = set_iterator(s); - while(zinj *elem = (zinj*) set_iterator_next(&i)) { - result.push_back(elem->data); - } - return result; -} - -std::vector set_to_storagelocs(set *s) { - std::vector result; - - setiter i = set_iterator(s); - while(storageloc * elem = (storageloc *) set_iterator_next(&i)) { - result.push_back(elem); - } - return result; -} - -std::vector k_to_accts(map* m) { - list l = hook_MAP_values(m); - std::vector result; - for (size_t i = 0; i < hook_LIST_size_long(&l); i++) { - account* elem = (account*) hook_LIST_get_long(&l, i); - result.push_back(elem); - } - std::sort(result.begin(), result.end(), [](account *a, account *b) { - return mpz_cmp(a->acctID->data, b->acctID->data) < 0; - }); - return result; -} - -std::vector k_to_logs(list* l) { - std::vector result; - for (size_t i = 0; i < hook_LIST_size_long(l); i++) { - loginj* elem = (loginj*) hook_LIST_get_long(l, i); - result.push_back(elem->data); - } - return result; -} - -void k_to_log(struct log* log, LogEntry *pb) { - std::string address = of_z_width(20, log->acct); - std::vector topics = k_to_zs(&log->topics); - void *arr[1]; - arr[0] = logData(log); - string* token = (string*)evaluateFunctionSymbol(unparseByteStack, arr); - pb->set_address(address); - for (mpz_ptr topic : topics) { - pb->add_topics(of_z_width(32, topic)); - } - pb->set_data(std::string(token->data, len(token))); -} - -inj* make_runvm(bool iscreate, mpz_ptr to, mpz_ptr from, string *code, block *args, mpz_ptr value, mpz_ptr gasprice, mpz_ptr gas, mpz_ptr beneficiary, mpz_ptr difficulty, mpz_ptr number, mpz_ptr gaslimit, mpz_ptr timestamp, string *function) { - inj *kinj = (inj *)koreAlloc(sizeof(inj)); - static uint32_t tag = getTagForSymbolName("inj{SortEthereumSimulation{}, SortKItem{}}"); - kinj->h = getBlockHeaderForSymbol(tag); - runvm* runvmsymbol = (runvm *)koreAlloc(sizeof(runvm)); - kinj->data = (block *)runvmsymbol; - static uint32_t tag2 = getTagForSymbolName("LblrunVM{}"); - runvmsymbol->h = getBlockHeaderForSymbol(tag2); - runvmsymbol->iscreate = iscreate; - runvmsymbol->to = to; - runvmsymbol->from = from; - runvmsymbol->code = code; - runvmsymbol->args = args; - runvmsymbol->value = value; - runvmsymbol->gasprice = gasprice; - runvmsymbol->gas = gas; - runvmsymbol->beneficiary = beneficiary; - runvmsymbol->difficulty = difficulty; - runvmsymbol->number = number; - runvmsymbol->gaslimit = gaslimit; - runvmsymbol->timestamp = timestamp; - runvmsymbol->function = function; - return kinj; -} - -block* make_accesslist(AccessListData accessList, runvm *runvmsymbol) { - static blockheader zinjHeader = getBlockHeaderForSymbol(zinjTag); - set addresses = set(); - set storages = set(); - - for (auto address : accessList.addresses()) { - zinj *addressinj = (zinj *)koreAlloc(sizeof(zinj)); - addressinj->h = zinjHeader; - addressinj->data = to_z_unsigned(address); - - addresses = addresses.insert((block *)addressinj); - } - - for (auto entry : accessList.storagelocations()) { - mpz_ptr address = to_z_unsigned(entry.address()); - mpz_ptr location = to_z_unsigned(entry.storagelocation()); - - storageloc *storageentry = (storageloc *)koreAlloc(sizeof(storageloc)); - static uint32_t tag = getTagForSymbolName("LblstorageLocation{}"); - storageentry->h = getBlockHeaderForSymbol(tag); - storageentry->address = address; - storageentry->location = location; - - storages = storages.insert((block *)storageentry); - } - - accesslist *res = (accesslist *)koreAlloc(sizeof(accesslist)); - static uint32_t tag = getTagForSymbolName("LblmakeAccessList{}"); - res->h = getBlockHeaderForSymbol(tag); - res->addresses = addresses; - res->storage = storages; - res->runvm_ptr = runvmsymbol; - return (block *)res; -} - -bool storage_is_modified(mpz_ptr acctID, map* storage) { - list keys = hook_MAP_keys_list(storage); - std::vector sorted_keys; - for (size_t i = 0; i < hook_LIST_size_long(&keys); i++) { - sorted_keys.push_back((zinj *)hook_LIST_get_long(&keys, i)); - } - std::sort(sorted_keys.begin(), sorted_keys.end(), [](zinj *a, zinj *b) { - return mpz_cmp(a->data, b->data) < 0; - }); - for (zinj *key : sorted_keys) { - zinj* value = (zinj*)hook_MAP_lookup(storage, (block*)key); - if (mpz_cmp(hook_BLOCKCHAIN_getStorageData(acctID, key->data), value->data) != 0) { - return true; - } - } - return false; -} - -bool code_is_modified(mpz_ptr acctID, block* code) { - static uint32_t tag = getTagForSymbolName("LblaccountEmpty{}"); - void* arr[3]; - mpz_t zero; - mpz_init(zero); - arr[0] = code; - arr[1] = zero; - arr[2] = zero; - bool *isCodeEmptyPtr = (bool *)evaluateFunctionSymbol(tag, arr); - bool isCodeEmpty = *isCodeEmptyPtr; - free(isCodeEmptyPtr); - return (!hook_BLOCKCHAIN_accountExists(acctID) || hook_BLOCKCHAIN_isCodeEmpty(acctID)) && !isCodeEmpty; -} - -bool account_is_modified(std::vector selfdestruct, account *acct) { - for (mpz_ptr deleted : selfdestruct) { - if (mpz_cmp(deleted, acct->acctID->data) == 0) { - return false; - } - } - if (!hook_BLOCKCHAIN_accountExists(acct->acctID->data)) { - return true; - } - if (mpz_cmp(hook_BLOCKCHAIN_getBalance(acct->acctID->data), acct->balance->data) != 0) { - return true; - } - if (mpz_cmp(hook_BLOCKCHAIN_getNonce(acct->acctID->data), acct->nonce->data) != 0) { - return true; - } - if (code_is_modified(acct->acctID->data, acct->code->data)) { - return true; - } - if (storage_is_modified(acct->acctID->data, &acct->storage->data)) { - return true; - } - return false; -} - -std::string get_code_bytes(block* code) { - static uint32_t tag = getTagForSymbolName("LblcontractBytes{}"); - void* arr[1]; - arr[0] = code; - string *token = (string*)evaluateFunctionSymbol(tag, arr); - return std::string(token->data, len(token)); -} - -void k_to_mod_acct(account* acct, ModifiedAccount* mod_acct) { - std::string address = of_z_width(20, acct->acctID->data); - std::string nonce = of_z(acct->nonce->data); - std::string balance = of_z(acct->balance->data); - std::string code; - if (code_is_modified(acct->acctID->data, acct->code->data)) { - code = get_code_bytes(acct->code->data); - } else { - code = ""; - } - map* storage = &acct->storage->data; - list keys = hook_MAP_keys_list(storage); - std::vector sorted_keys; - for (size_t i = 0; i < hook_LIST_size_long(&keys); i++) { - sorted_keys.push_back((zinj *)hook_LIST_get_long(&keys, i)); - } - std::sort(sorted_keys.begin(), sorted_keys.end(), [](zinj *a, zinj *b) { - return mpz_cmp(a->data, b->data) < 0; - }); - for (zinj *key : sorted_keys) { - zinj* value = (zinj*)hook_MAP_lookup(storage, (block*)key); - if (mpz_cmp(hook_BLOCKCHAIN_getStorageData(acct->acctID->data, key->data), value->data) != 0) { - StorageUpdate *update = mod_acct->add_storageupdates(); - update->set_offset(of_z(key->data)); - update->set_data(of_z(value->data)); - } - } - mod_acct->set_address(address); - mod_acct->set_nonce(nonce); - mod_acct->set_balance(balance); - mod_acct->set_code(code); -} - -input_data unpack_input(bool, std::string); -uint64_t get_schedule(mpz_ptr, CallContext*); -bool get_error(mpz_ptr); - -CallResult run_transaction(CallContext ctx) { - std::cerr << ctx.DebugString() << std::endl; - - bool iscreate = ctx.recipientaddr().size() == 0; - mpz_ptr to = to_z_unsigned(ctx.recipientaddr()); - mpz_ptr from = to_z_unsigned(ctx.calleraddr()); - input_data in = unpack_input(iscreate, ctx.inputdata()); - mpz_ptr value = to_z_unsigned(ctx.callvalue()); - mpz_ptr gasprice = to_z_unsigned(ctx.gasprice()); - mpz_ptr gas = to_z_unsigned(ctx.gasprovided()); - mpz_ptr beneficiary = to_z_unsigned(ctx.blockheader().beneficiary()); - mpz_ptr difficulty = to_z_unsigned(ctx.blockheader().difficulty()); - mpz_ptr number = to_z_unsigned(ctx.blockheader().number()); - mpz_ptr gaslimit = to_z_unsigned(ctx.blockheader().gaslimit()); - mpz_t timestamp; - mpz_init_set_ui(timestamp, ctx.blockheader().unixtimestamp()); - - static uint64_t mode = (((uint64_t)getTagForSymbolName("LblNORMAL{}")) << 32) | 1; - inj *modeinj = (inj *)koreAlloc(sizeof(inj)); - static blockheader hdr = getBlockHeaderForSymbol(getTagForSymbolName("inj{SortMode{}, SortKItem{}}")); - modeinj->h = hdr; - modeinj->data = (block*)mode; - - uint64_t schedule = get_schedule(number, &ctx); - inj *scheduleinj = (inj *)koreAlloc(sizeof(inj)); - static blockheader hdr2 = getBlockHeaderForSymbol(getTagForSymbolName("inj{SortSchedule{}, SortKItem{}}")); - scheduleinj->h = hdr2; - scheduleinj->data = (block*)schedule; - - static blockheader injHeaderInt = getBlockHeaderForSymbol(zinjTag); - mpz_ptr chainid_z = to_z(ctx.ethereumconfig().chainid()); - zinj *chainidinj = (zinj *)koreAlloc(sizeof(zinj)); - chainidinj->h = injHeaderInt; - chainidinj->data = chainid_z; - - inj* inj = make_runvm(iscreate, to, from, in.code, in.args, value, gasprice, gas, beneficiary, difficulty, number, gaslimit, move_int(timestamp), in.function); - - switch (ctx.txtype()) { - case CallContext::ACCESSLIST: - assert(ctx.has_accesslist()); - inj->data = make_accesslist(ctx.accesslist(), (runvm *)inj->data); - break; - case CallContext::LEGACY: - default: - break; - } - - map withSched = hook_MAP_element(configvar("$SCHEDULE"), (block *)scheduleinj); - map withMode = hook_MAP_update(&withSched, configvar("$MODE"), (block *)modeinj); - map withChainid = hook_MAP_update(&withMode, configvar("$CHAINID"), (block *)chainidinj); - map init = hook_MAP_update(&withChainid, configvar("$PGM"), (block *)inj); - static uint32_t tag2 = getTagForSymbolName("LblinitGeneratedTopCell{}"); - void *arr[1]; - arr[0] = &init; - block* init_config = (block *)evaluateFunctionSymbol(tag2, arr); - block* final_config = take_steps(-1, init_config); - - static uint32_t tag3 = getTagForSymbolName("LblextractConfig{}"); - arr[0] = final_config; - tx_result* extracted = (tx_result *)evaluateFunctionSymbol(tag3, arr); - std::string ret_data = get_output_data(&extracted->rets); - std::string gasLeft = of_z(extracted->gas); - std::string refund = of_z(extracted->refund); - std::string status = of_z(extracted->status); - std::string statusCode = std::string(extracted->statuscode->data, len(extracted->statuscode)); - bool error = get_error(extracted->status); - auto selfdestruct = set_to_zs(&extracted->selfdestruct); - auto touched = set_to_zs(&extracted->touched); - auto accounts = k_to_accts(&extracted->accounts_ptr->data); - auto logs = k_to_logs(&extracted->logs); - - CallResult result; - result.set_returndata(ret_data); - result.set_returncode(status); - result.set_gasremaining(gasLeft); - result.set_gasrefund(refund); - result.set_error(error); - for (mpz_ptr acct : selfdestruct) { - result.add_deletedaccounts(of_z_width(20, acct)); - } - for (mpz_ptr acct : touched) { - result.add_touchedaccounts(of_z_width(20, acct)); - } - for (account *acct : accounts) { - if (account_is_modified(selfdestruct, acct)) { - auto mod = result.add_modifiedaccounts(); - k_to_mod_acct(acct, mod); - } - } - for (struct log *log : logs) { - auto log_pb = result.add_logs(); - k_to_log(log, log_pb); - } - - if (ctx.txtype() == CallContext::ACCESSLIST) { - AccessListData *accessListResult = result.mutable_accesslist(); - static uint32_t extractAccessListTag = getTagForSymbolName("LblextractAccessList{}"); - accesslist_result *extractedAccessList = (accesslist_result *)evaluateFunctionSymbol(extractAccessListTag, arr); - - auto addresses = set_to_zs(&extractedAccessList->addresses); - for (mpz_ptr acct : addresses) { - accessListResult->add_addresses(of_z_width(20, acct)); - } - - auto storagelocs = set_to_storagelocs(&extractedAccessList->locations); - for (storageloc *location : storagelocs) { - StorageEntry *entry = accessListResult->add_storagelocations(); - entry->set_address(of_z_width(20, location->address)); - entry->set_storagelocation(of_z_width(32, location->location)); - } - } - - std::cerr << result.DebugString() << std::endl; - - clear_cache(); - - return result; -} - diff --git a/node/vm/vm.h b/node/vm/vm.h deleted file mode 100644 index 25b1b4f4bc..0000000000 --- a/node/vm/vm.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef VM_H -#define VM_H - -extern "C" { - mpz_ptr hook_BLOCKCHAIN_getBalance(mpz_ptr); - mpz_ptr hook_BLOCKCHAIN_getNonce(mpz_ptr); - mpz_ptr hook_BLOCKCHAIN_getStorageData(mpz_ptr, mpz_ptr); - bool hook_BLOCKCHAIN_accountExists(mpz_ptr); - bool hook_BLOCKCHAIN_isCodeEmpty(mpz_ptr); -} - -void clear_cache(void); - -struct account; - -struct acctinj { - blockheader h; - account* data; -}; - -struct log; - -struct loginj { - blockheader h; - struct log* data; -}; - -struct accounts { - blockheader h; - map data; -}; - -struct runvm { - blockheader h; - bool iscreate; - mpz_ptr to; - mpz_ptr from; - string* code; - block* args; - mpz_ptr value; - mpz_ptr gasprice; - mpz_ptr gas; - mpz_ptr beneficiary; - mpz_ptr difficulty; - mpz_ptr number; - mpz_ptr gaslimit; - mpz_ptr timestamp; - string* function; -}; - -struct accesslist { - blockheader h; - set addresses; - set storage; - runvm* runvm_ptr; -}; - -struct storageloc { - blockheader h; - mpz_ptr address; - mpz_ptr location; -}; - -#endif diff --git a/optimizer/build-spec.py b/optimizer/build-spec.py deleted file mode 100755 index d1f144aec3..0000000000 --- a/optimizer/build-spec.py +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/env python3 - -import pyk -import sys - -### arguments: - # - json encoding of haskell KEVM definition - # - opcode to summarize - # - number of elements the opcode needs off the wordstack - # - counterexample of negative-case proof generated by Haskell backend - -json_defn = sys.argv[1] -opcode = pyk.KToken(sys.argv[2], 'OpCode') -wordstack_number = sys.argv[3] -json_out = sys.argv[4] - -### KEVM specific - -kevm_json = pyk.readKastTerm(json_defn) -kevm_symbols = pyk.buildSymbolTable(kevm_json) -kevm_symbols [ '...' ] = lambda l: l + ' ...' -kevm_symbols [ '_andBool_' ] = lambda b1, b2: b1 + '\nandBool ' + b2 -kevm_symbols [ '_+Int_' ] = lambda i1, i2: '( ' + i1 + ' +Int ' + i2 + ' )' -kevm_symbols [ '_*Int_' ] = lambda i1, i2: '( ' + i1 + ' *Int ' + i2 + ' )' -kevm_symbols [ '_-Int_' ] = lambda i1, i2: '( ' + i1 + ' -Int ' + i2 + ' )' -kevm_symbols [ 'infGas' ] = lambda g: '#gas( ' + g + ' )' -kevm_symbols [ 'parens' ] = lambda p: '( ' + p + ' )' -kevm_symbols [ '_[_:=_]_EVM-TYPES_WordStack_WordStack_Int_Int' ] = lambda ws, i, w: '( ' + ws + ' [ ' + i + ' := ' + w + ' ] )' -printKEVM = lambda term: pyk.prettyPrintKast(term, kevm_symbols) - -rdots = lambda l: pyk.KApply('...', [l]) -leqInt = lambda i1, i2: pyk.KApply('_<=Int_', [i1, i2]) -plusInt = lambda i1, i2: pyk.KApply('_+Int_' , [i1, i2]) -mulInt = lambda i1, i2: pyk.KApply('_*Int_' , [i1, i2]) -minusInt = lambda i1, i2: pyk.KApply('_-Int_' , [i1, i2]) - -empt_word = pyk.KConstant('.WordStack_EVM-TYPES_WordStack') -cons_word = lambda w, ws: pyk.KApply('_:__EVM-TYPES_WordStack_Int_WordStack', [w, ws]) - -infGas = lambda g: pyk.KApply('infGas', [g]) - -sizeWordStack = lambda ws: pyk.KApply('#sizeWordStack(_)_EVM-TYPES_Int_WordStack', [ws]) -stackNeeded = lambda op : pyk.KApply('#stackNeeded(_)_EVM_Int_OpCode', [op]) -stackOverflow = lambda op, ws: pyk.KApply('#stackOverflow(_,_)_EVM_Bool_WordStack_OpCode', [ws, op]) -stackUnderflow = lambda op, ws: pyk.KApply('#stackUnderflow(_,_)_EVM_Bool_WordStack_OpCode', [ws, op]) - -### utilities - -vi1 = pyk.KVariable('I1') -vi2 = pyk.KVariable('I2') -vi3 = pyk.KVariable('I3') -vi4 = pyk.KVariable('I4') - -assoc_right_rules = [ (plusInt(plusInt(vi1, vi2), vi3) , plusInt(vi1, plusInt(vi2, vi3))) # (X + Y) + Z => X + (Y + Z) - , (plusInt(minusInt(vi1, vi2), vi3) , minusInt(vi1, minusInt(vi2, vi3))) # (X - Y) + Z => X - (Y - Z) - , (minusInt(plusInt(vi1, vi2), vi3) , plusInt(vi1, minusInt(vi2, vi3))) # (X + Y) - Z => X + (Y - Z) - , (minusInt(minusInt(vi1, vi2), vi3) , minusInt(vi1, plusInt(vi2, vi3))) # (X - Y) - Z => X - (Y + Z) - ] -assoc_left_rules = [ (r, l) for (l, r) in assoc_right_rules ] - -def assoc_right(k): - newK = k - for i in range(3): - for rule in assoc_right_rules: - newK = pyk.rewriteAnywhereWith(rule, newK) - return newK - -def assoc_left(k): - newK = k - for i in range(3): - for rule in assoc_left_rules: - newK = pyk.rewriteAnywhereWith(rule, newK) - return newK - -### Build initial and final states - -wordstack_before = pyk.KVariable("WS") -for i in range(int(wordstack_number) - 1, -1, -1): - wordstack_before = cons_word(pyk.KVariable('W' + str(i)), wordstack_before) - -final_state = pyk.readKastTerm(json_out) -final_config = None -final_cond = pyk.KToken('true', 'Bool') -for conj in pyk.flattenLabel('#And', final_state): - if pyk.isKApply(conj) and conj['label'] == '': - final_config = conj['args'][0] - else: - final_cond = pyk.KApply('_andBool_', [final_cond, pyk.unsafeMlPredToBool(conj)]) -if final_config is None: - print('// [ERROR] Could not extract config/cond: ' + printKEVM(opcode)) -(empty_config, final_subst) = pyk.splitConfigFrom(final_config) -final_gas = final_subst['GAS_CELL'] -final_wordstack = final_subst['WORDSTACK_CELL'] - -### Extract gas expression - -final_gas = assoc_right(final_gas) -gas_pattern = infGas(minusInt(vi1, vi2)) -gas_subst = pyk.match(gas_pattern, final_gas) -if gas_subst is None: - print('// [ERROR] Could not extract gas expression: ' + printKEVM(opcode)) - sys.exit(1) -gas_used = gas_subst[vi2['name']] -gas_used = assoc_left(gas_used) - -### build the new claim - -k_claim = { 'K_CELL' : rdots(pyk.KRewrite(pyk.KApply('#next[_]_EVM_InternalOp_OpCode', [opcode]), pyk.KConstant('#EmptyK'))) - , 'WORDSTACK_CELL' : pyk.KRewrite(wordstack_before, final_wordstack) - , 'GAS_CELL' : pyk.KRewrite(pyk.KVariable('GAVAIL'), minusInt(pyk.KVariable('GAVAIL'), gas_used)) - , 'LOCALMEM_CELL' : pyk.KRewrite(pyk.KVariable('LM'), final_subst['LOCALMEM_CELL']) - , 'PC_CELL' : pyk.KRewrite(pyk.KVariable('PCOUNT'), final_subst['PC_CELL']) - , 'SCHEDULE_CELL' : pyk.KRewrite(pyk.KVariable('SCHED'), final_subst['SCHEDULE_CELL']) - , 'MEMORYUSED_CELL' : pyk.KRewrite(pyk.KVariable('MU'), final_subst['MEMORYUSED_CELL']) - , 'PROGRAM_CELL' : pyk.KVariable('PGM') - } - -requires_clauses = [ leqInt(gas_used, pyk.KVariable('GAVAIL')) - , leqInt(sizeWordStack(final_wordstack) , pyk.KToken('1024', 'Int')) - ] -claim_requires = pyk.KToken('true', 'Bool') -for r in sys.argv[5:]: - claim_requires = pyk.KApply('_andBool_', [claim_requires, pyk.KToken(r, 'Bool')]) -for r in requires_clauses: - claim_requires = pyk.KApply('_andBool_', [claim_requires, pyk.KApply('parens', [r])]) -claim_requires = pyk.simplifyBool(claim_requires) - -### minimize and display it - -claim_body = pyk.pushDownRewrites(pyk.substitute(empty_config, k_claim)) -new_claim = pyk.minimizeRule(pyk.KClaim(claim_body, requires = claim_requires)) - -print(printKEVM(new_claim)) diff --git a/optimizer/optimizations.md b/optimizer/optimizations.md deleted file mode 100644 index 3674d15986..0000000000 --- a/optimizer/optimizations.md +++ /dev/null @@ -1,30 +0,0 @@ -KEVM Optimizations -================== - -These optimizations work on the LLVM and Haskell backend and are generated by the script `./optimizer/optimizations.sh`. - -```k -requires "evm.md" -requires "lemmas/int-simplification.k" - -module EVM-OPTIMIZATIONS-LEMMAS [kore, symbolic] - imports EVM - - rule #sizeWordStack(WS , N) => #sizeWordStack(WS, 0) +Int N requires N =/=Int 0 [simplification] - rule #sizeWordStack(WS [ I := _ ], N) => #sizeWordStack(WS, N) requires I true [simplification] - rule #sizeWordStack(_ , 0) false requires N <=Int 0 [simplification] - -endmodule - -module EVM-OPTIMIZATIONS [kore] - imports EVM - imports EVM-OPTIMIZATIONS-LEMMAS - imports INT-SIMPLIFICATION - - -// {OPTIMIZATIONS} - - -endmodule -``` diff --git a/optimizer/optimizations/index.html b/optimizer/optimizations/index.html new file mode 100644 index 0000000000..1424bd952b --- /dev/null +++ b/optimizer/optimizations/index.html @@ -0,0 +1,216 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + +

+ + +
+
+
+ + +
+ +
+

KEVM Optimizations

+

These optimizations work on the LLVM and Haskell backend and are generated by the script ./optimizer/optimizations.sh.

+
requires "evm.md"
+requires "lemmas/int-simplification.k"
+
+module EVM-OPTIMIZATIONS-LEMMAS [kore, symbolic]
+    imports EVM
+
+    rule #sizeWordStack(WS           , N) => #sizeWordStack(WS, 0) +Int N requires N =/=Int 0                [simplification]
+    rule #sizeWordStack(WS [ I := _ ], N) => #sizeWordStack(WS, N)        requires I <Int #sizeWordStack(WS) [simplification]
+    rule 0 <=Int #sizeWordStack(_ , 0)    => true                                                            [simplification]
+    rule #sizeWordStack(_ , 0) <Int N     => false                        requires N <=Int 0                 [simplification]
+
+endmodule
+
+module EVM-OPTIMIZATIONS [kore]
+    imports EVM
+    imports EVM-OPTIMIZATIONS-LEMMAS
+    imports INT-SIMPLIFICATION
+
+
+// {OPTIMIZATIONS}
+
+
+endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/optimizer/optimize-spec.k.tmpl b/optimizer/optimize-spec.k.tmpl deleted file mode 100644 index 10deb8c211..0000000000 --- a/optimizer/optimize-spec.k.tmpl +++ /dev/null @@ -1,24 +0,0 @@ -requires "lemmas/infinite-gas.k" - -module OPTIMIZE - imports INT - imports EVM-OPTIMIZATIONS-LEMMAS - imports EVM - imports INFINITE-GAS -endmodule - -module {MODULE}-SPEC - imports OPTIMIZE - - claim (#next [ {OPCODE} ] => #halt) ~> #execute ... - SCHED - PGM - PCOUNT => PCOUNT +Int #widthOp({OPCODE}) - {WORD_STACK} => ?_ - LM => ?_ - #gas(GAVAIL) => ?_ - MU => ?_ - requires #sizeWordStack({WORD_STACK}) +Int #stackDelta({OPCODE}) <=Int 1024 - {EXTRA_REQUIRES} - -endmodule diff --git a/optimizer/optimize.sh b/optimizer/optimize.sh deleted file mode 100755 index f8b140ec5c..0000000000 --- a/optimizer/optimize.sh +++ /dev/null @@ -1,179 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -export PATH=$(pwd)/.build/usr/bin:$PATH -export PYTHONPATH=$(pwd)/.build/usr/lib/kevm/kframework/lib/kframework - -kevm_json_defn=$(pwd)/.build/usr/lib/kevm/haskell/compiled.json - -notif() { echo "$@" >&2 ; } - -buildWordStack() { - local number wordstack i - - number="$1" ; shift - - wordstack="WS" - for i in $(seq 0 $((number - 1)) | tac); do - wordstack="W${i} : ${wordstack}" - done - echo "${wordstack}" -} - -buildSpec() { - local opcode wordstack_number wordstack module extra_requires - - opcode="$1" ; shift - wordstack_number="$1" ; shift - - wordstack="$(buildWordStack ${wordstack_number})" - module="$(echo ${opcode} | tr -d '()')" - - extra_requires='' - while [[ "$#" -gt '0' ]]; do - extra_requires="${extra_requires} andBool ( ${1} )" - shift - done - - cat optimizer/optimize-spec.k.tmpl \ - | sed "s/{EXTRA_REQUIRES}/${extra_requires}/g" \ - | sed "s/{MODULE}/${module}/g" \ - | sed "s/{OPCODE}/${opcode}/g" \ - | sed "s/{WORD_STACK}/${wordstack}/g" -} - -inject_optimization() { - local search_string contents_file - - contents_file="$1" ; shift - - search_string='// {OPTIMIZATIONS}' - ( IFS='' - while read line; do - if [[ "${line}" == "${search_string}" ]]; then - cat "${contents_file}" - echo "${line}" - else - echo "${line}" - fi - done - ) -} - -runProve() { - local spec - - spec="$1" ; shift - - kevm prove --backend haskell ${spec} --verif-module OPTIMIZE "$@" -} - -doOptimization() { - local opcode wordstack_number depth opcode_lower spec_file json_out claim_file rule_file optimize_file - - opcode="$1" ; shift - wordstack_number="$1" ; shift - depth="$1" ; shift - priority="$1" ; shift - - opcode_lower="$(echo ${opcode} | tr '[:upper:]' '[:lower:]' | tr -d '()')" - spec_file="optimizer/${opcode_lower}-spec.k" - json_out="optimizer/${opcode_lower}.out.json" - claim_file="optimizer/${opcode_lower}-claim.k" - rule_file="optimizer/${opcode_lower}.k" - optimize_file="optimizer/optimize-spec.k" - - make build-haskell -j8 - - notif "Building: ${spec_file}" - buildSpec "${opcode}" "${wordstack_number}" "$@" > "${spec_file}" - - notif "Building: ${json_out}" - runProve "${spec_file}" --depth "${depth}" --output json | jq . > "${json_out}" || true - - notif "Building: ${claim_file}" - ./optimizer/build-spec.py "${kevm_json_defn}" "${opcode}" "${wordstack_number}" "${json_out}" "$@" > "${claim_file}" - - notif "Building: ${rule_file}" - cat "${claim_file}" | sed 's/^claim /rule /g' | sed '/^[[:space:]]*$/d' > "${rule_file}" - echo " [priority(${priority})]" >> "${rule_file}" - echo >> "${rule_file}" - echo >> "${rule_file}" - - notif "Building: ${optimize_file}" - echo '' > "${optimize_file}" - echo 'module OPTIMIZE' >> "${optimize_file}" - echo ' imports INT' >> "${optimize_file}" - echo ' imports EVM-OPTIMIZATIONS-LEMMAS' >> "${optimize_file}" - echo ' imports EVM' >> "${optimize_file}" - echo 'endmodule' >> "${optimize_file}" - echo '' >> "${optimize_file}" - echo "module OPTIMIZE-SPEC" >> "${optimize_file}" - echo ' imports OPTIMIZE' >> "${optimize_file}" - echo '' >> "${optimize_file}" - cat "${claim_file}" >> "${optimize_file}" - echo '' >> "${optimize_file}" - echo 'endmodule' >> "${optimize_file}" - - if runProve "${optimize_file}"; then - notif "Claim passed: ${opcode}" - cat optimizations.md | inject_optimization "${rule_file}" > optimizations.md.tmp - cp optimizations.md.tmp optimizations.md - git add optimizations.md - git commit -m "optimizations: optimize ${opcode} ${priority}" - else - notif "Claim failed: ${opcode}" - fi -} - -cp optimizer/optimizations.md optimizations.md -git add optimizations.md -git commit -m 'optimizations: clear optimizations' || true - -# score: (number with speedup >7%) - (number with slowdown >7%), for both (exec, spec) - -# were consistently positive -doOptimization "PUSH(N)" 0 10 40 # 73 65 (53 , 9 ) -doOptimization "DUP(N)" 0 10 40 '#stackNeeded(DUP(N)) <=Int #sizeWordStack(WS)' # 14 16 (0 , 8 ) -doOptimization "SWAP(N)" 1 10 40 '#stackNeeded(SWAP(N)) <=Int #sizeWordStack(W0 : WS)' # 14 16 (13 , 2 ) -doOptimization ADD 2 10 40 # 8 5 (39 , 9 ) -doOptimization SUB 2 10 40 # 0 0 (18 , 4 ) -doOptimization AND 2 10 40 # 0 2 (25 , 4 ) -doOptimization LT 2 10 40 # 7 3 (1 , 0 ) -doOptimization GT 2 10 40 # 0 0 (12 , 2 ) - -# not sure it's worth it to include these ones -# doOptimization MSTORE 2 14 40 # -18 11 (-23 , -2) -# doOptimization POP 1 10 40 # 5 5 (-9 , 2 ) -# doOptimization MSTORE8 2 14 40 # 0 5 (-15 , -9) -# doOptimization MOD 2 10 40 # 0 3 (-7 , 0 ) -# doOptimization EQ 2 10 40 # -1 2 (-3 , 8 ) -# doOptimization MUL 2 10 40 # -1 1 (-16 , -2) -# doOptimization NOT 1 10 40 # -4 1 (-10 , -8) -# doOptimization XOR 2 10 40 # -9 0 (-6 , 0 ) -# doOptimization SIGNEXTEND 2 10 40 # 0 0 (9 , 0 ) -# doOptimization SGT 2 10 40 # 0 0 (-22 , 0 ) -# doOptimization DIV 2 10 40 # 0 0 (4 , 7 ) -# doOptimization ADDMOD 3 10 40 # -1 0 (1 , 0 ) -# doOptimization SLT 2 10 40 # 0 -1 (0 , 0 ) -# doOptimization EVMOR 2 10 40 # 0 -1 (4 , 0 ) -# doOptimization ISZERO 1 10 40 # -3 -3 (9 , 1 ) -# doOptimization MULMOD 3 10 40 # 1 -4 (-4 , 0 ) -# doOptimization MLOAD 1 14 40 # -9 -4 (14 , 6 ) - -# spec requires multiple branches -# doOptimization EXP 2 10 - -# could not prove the generated rule (involve non-total functions) -# doOptimization SDIV 2 10 -# doOptimization SMOD 2 10 -# doOptimization SHL 2 10 -# doOptimization SHR 2 10 -# doOptimization SAR 2 10 -# doOptimization BYTE 2 10 -# doOptimization SHA3 2 10 - -# could not prove the generated rule (involve cells that are not mentioned) -# doOptimization JUMP 1 10 -# doOptimization JUMPI 2 10 diff --git a/package/debian/Dockerfile.test b/package/debian/Dockerfile.test deleted file mode 100644 index 25cda71b58..0000000000 --- a/package/debian/Dockerfile.test +++ /dev/null @@ -1,34 +0,0 @@ -FROM ghcr.io/foundry-rs/foundry:nightly-aeba75e4799f1e11e3daba98d967b83e286b0c4a as FOUNDRY - -FROM ubuntu:jammy - -ENV TZ=America/Chicago -ENV DEBIAN_FRONTEND=noninteractive - -COPY --from=FOUNDRY /usr/local/bin/forge /usr/local/bin/forge -COPY --from=FOUNDRY /usr/local/bin/anvil /usr/local/bin/anvil -COPY --from=FOUNDRY /usr/local/bin/cast /usr/local/bin/cast - -RUN apt-get update \ - && apt-get upgrade --yes \ - && apt-get install --yes \ - git \ - make \ - sudo \ - wget - -RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers - -ARG USER_ID=1000 -ARG GROUP_ID=1000 -RUN groupadd -g $GROUP_ID user \ - && useradd -m -u $USER_ID -s /bin/sh -g user user -G sudo - -USER $USER_ID:$GROUP_ID -WORKDIR /home/user - -ARG K_VERSION -RUN wget https://github.com/runtimeverification/k/releases/download/v${K_VERSION}/kframework_${K_VERSION}_amd64_ubuntu_jammy.deb -RUN sudo apt-get update \ - && sudo apt-get upgrade --yes \ - && sudo apt-get install --yes ./kframework_${K_VERSION}_amd64_ubuntu_jammy.deb diff --git a/package/debian/changelog b/package/debian/changelog deleted file mode 100644 index 1b4274e9e0..0000000000 --- a/package/debian/changelog +++ /dev/null @@ -1,6 +0,0 @@ -kevm (1.0.276) unstable; urgency=medium - - * Initial Release. - - -- Everett Hildenbrandt Tue, 16 Jul 2019 00:14:12 -0700 - \ No newline at end of file diff --git a/package/debian/compat b/package/debian/compat deleted file mode 100644 index f599e28b8a..0000000000 --- a/package/debian/compat +++ /dev/null @@ -1 +0,0 @@ -10 diff --git a/package/debian/control.jammy b/package/debian/control.jammy deleted file mode 100644 index 4621f68378..0000000000 --- a/package/debian/control.jammy +++ /dev/null @@ -1,16 +0,0 @@ -Source: kevm -Section: devel -Priority: optional -Maintainer: Everett Hildenbrandt -Build-Depends: cmake , debhelper , kframework , libboost-test-dev , llvm-14 , llvm-14-dev , llvm-14-tools , pkg-config , python3-pip , zlib1g-dev -Standards-Version: 3.9.6 -Homepage: https://github.com/runtimeverification/evm-semantics - -Package: kevm -Architecture: any -Section: devel -Priority: optional -Depends: clang-14 , flex , kframework , gcc , libcrypto++-dev , libffi-dev , libgmp-dev , libjemalloc-dev , libmpfr-dev , libprocps-dev , libsecp256k1-dev , libssl-dev , libtinfo-dev , libyaml-dev , lld-14 , llvm-12 , llvm-12-tools , llvm-12-dev , python3 , z3 -Description: K Semantics of EVM - Implementation of Ethereum Virtual Machine (EVM) in K. - kevm-vm executable communicates over protobuf to run EVM transactions. diff --git a/package/debian/package b/package/debian/package deleted file mode 100755 index e378f666bc..0000000000 --- a/package/debian/package +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -set -xeuo pipefail - -distro="${1:-jammy}" - -case "$distro" in - jammy) control_file=control.jammy ;; - *) echo "Unknown distro: $distro" ; exti 1 ;; -esac - -rm -rf debian - -cp -r package/debian ./debian -mv debian/$control_file debian/control -dpkg-buildpackage --no-sign diff --git a/package/debian/rules b/package/debian/rules deleted file mode 100755 index a5dfafde08..0000000000 --- a/package/debian/rules +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/make -f -# See debhelper(7) (uncomment to enable) -# output every command that modifies files on the build system. -#export DH_VERBOSE = 1 - - -# see FEATURE AREAS in dpkg-buildflags(1) -#export DEB_BUILD_MAINT_OPTIONS = hardening=+all - -# see ENVIRONMENT in dpkg-buildflags(1) -# package maintainers to append CFLAGS -#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic -# package maintainers to append LDFLAGS -#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed - -%: - dh $@ - -override_dh_auto_build: - make RELEASE=true build-kevm -j3 - make RELEASE=true CXX=clang++-14 plugin-deps kevm-pyk -j3 - make RELEASE=true build-kevm build-haskell build-foundry -j8 KOMPILE_OPTS='--read-only-kompiled-directory' - -override_dh_auto_install: - make RELEASE=true install -j8 KOMPILE_OPTS='--read-only-kompiled-directory' DESTDIR="$(CURDIR)/debian/kevm" INSTALL_PREFIX="/usr" - -override_dh_auto_test: - true - -# dh_make generated override targets -# This is example for Cmake (See https://bugs.debian.org/641051 ) -#override_dh_auto_configure: -# dh_auto_configure -- # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH) - diff --git a/package/docker/Dockerfile b/package/docker/Dockerfile deleted file mode 100644 index 2744bd1f60..0000000000 --- a/package/docker/Dockerfile +++ /dev/null @@ -1,50 +0,0 @@ -FROM ghcr.io/foundry-rs/foundry:nightly-aeba75e4799f1e11e3daba98d967b83e286b0c4a as FOUNDRY - -FROM ubuntu:jammy - -ENV TZ=America/Chicago -ENV DEBIAN_FRONTEND=noninteractive - -COPY --from=FOUNDRY /usr/local/bin/forge /usr/local/bin/forge -COPY --from=FOUNDRY /usr/local/bin/anvil /usr/local/bin/anvil -COPY --from=FOUNDRY /usr/local/bin/cast /usr/local/bin/cast - -RUN apt-get update \ - && apt-get upgrade --yes \ - && apt-get install --yes \ - curl \ - git \ - make \ - python3 \ - python3-pip \ - sudo \ - wget - -RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers - -RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/usr python3 - --version 1.5.1 - -ARG USER=user -ARG USER_ID=1000 -ARG GROUP_ID=1000 -RUN groupadd -g $GROUP_ID $USER \ - && useradd -m -u $USER_ID -s /bin/sh -g $USER $USER -G sudo - -USER $USER_ID:$GROUP_ID -WORKDIR /home/$USER - -ARG K_VERSION -RUN wget https://github.com/runtimeverification/k/releases/download/v${K_VERSION}/kframework_${K_VERSION}_amd64_ubuntu_jammy.deb -RUN sudo apt-get update \ - && sudo apt-get upgrade --yes \ - && sudo apt-get install --yes ./kframework_${K_VERSION}_amd64_ubuntu_jammy.deb - -ADD --chown=$USER:$USER ./kevm_*_amd64.deb ./ -RUN sudo apt-get update \ - && sudo apt-get upgrade --yes \ - && sudo apt-get install --yes ./kevm_*_amd64.deb - -ADD --chown=$USER:$USER ./kevm-pyk /home/$USER/kevm-pyk -RUN cd /home/$USER/kevm-pyk && pip3 install . - -ENV PATH=${PATH}:/home/${USER}/.local/bin diff --git a/package/nix/profile.nix b/package/nix/profile.nix deleted file mode 100644 index 9799f85fe0..0000000000 --- a/package/nix/profile.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ stdenv, writeScriptBin, src, kevm, time, which, kore-exec }: - -let - profile = writeScriptBin "profile" '' - #! ${stdenv.shell} - set -euo pipefail - test_log="$1" ; shift - exit_status='0' - `${which}/bin/which ${time}/bin/time` --quiet --format '%x %es %Us %Ss %MKB %C' --output "$test_log" --append \ - "$@" &>/dev/null \ - || exit_status="$?" - exit "$exit_status" - ''; -in stdenv.mkDerivation { - name = "kevm-profile"; - inherit src; - preferLocalBuild = true; - buildInputs = [ kevm ]; - postPatch = '' - substituteInPlace ./Makefile \ - --replace 'venv: $(VENV_DIR)/pyvenv.cfg' 'venv:' - ''; - - buildPhase = '' - mkdir -p .build/usr - cp -r ${kevm}/* .build/usr/ - ${kore-exec}/bin/kore-exec --version &> log - make build-prove-haskell PYK_ACTIVATE=true -j4 - make test-prove-smoke PYK_ACTIVATE=true TEST_SYMBOLIC_BACKEND=haskell KEVM='${profile}/bin/profile log timeout 600 kevm' -j6 -k - ''; - enableParallelBuilding = true; - installPhase = '' - cp log $out - ''; -} diff --git a/package/nix/profile.py b/package/nix/profile.py deleted file mode 100755 index 8970436a49..0000000000 --- a/package/nix/profile.py +++ /dev/null @@ -1,86 +0,0 @@ -#! /usr/bin/env nix-shell -#! nix-shell -i python3 -p python3 - -import sys - -logfile_1 = sys.argv[1] -logfile_2 = sys.argv[2] -mintime = 2.0 -minchange = 0.035 -if len(sys.argv) > 4: - mintime = float(sys.argv[3]) - minchange = float(sys.argv[4]) - -def readData(file_name): - data_lines = [] - with open(file_name, 'r') as file_data: - for _ in range(2): - next(file_data) - rev = next(file_data).strip('\n').split(':')[1].strip() - next(file_data) - next(file_data) - for line in file_data: - data_line = line.strip('\n').split(' ') - test_index = 0 - if 'prove' in data_line: - test_index = data_line.index('prove') + 1 - elif 'interpret' in data_line: - test_index = data_line.index('interpret') + 1 - data_lines.append(('/'.join(data_line[test_index].split('/')[-3:]), int(data_line[0]), float(data_line[1][0:-1]), int(data_line[4][0:-2]))) - return (rev,data_lines) - -def getCommitLogname(file_name): - if file_name.startswith('.build/logs'): - [_, _, log_name] = file_name.split('/') - return ('HEAD', log_name) - [_, commit, _, log_name] = file_name.split('/') - return (commit, log_name) - -data_entries = {} -(key1, data1) = readData(logfile_1) -data_entries[key1] = { test : ( rc , time , mem ) for (test, rc, time, mem) in data1 } -(key2, data2) = readData(logfile_2) -data_entries[key2] = { test : ( rc , time , mem ) for (test, rc, time, mem) in data2 } - - -common_passing_tests = [] -for test in data_entries[key1].keys(): - if data_entries[key1][test][0] == 0 and test in data_entries[key2].keys() and data_entries[key2][test][0] == 0: - common_passing_tests.append(test) - -def filterEntries(test, t1, t2): - return (t1 != t2) \ - and (t1 > mintime or t2 > mintime) \ - and ((t1 / t2) - 1.0 > minchange or (t2 / t1) - 1.0 > minchange) - -# test , time1 , time2 , time1 / time2 -final_table = [] -for test in common_passing_tests: - (_, time1, _) = data_entries[key1][test] - (_, time2, _) = data_entries[key2][test] - if filterEntries(test, time1, time2): - final_table.append((test, time1, time2, time1 / time2)) -final_table.sort(key = lambda e: e[3]) -if len(final_table) == 0: - print("Identical runs") - sys.exit(0) -total_time_1 = sum([e[1] for e in final_table]) -total_time_2 = sum([e[2] for e in final_table]) -if total_time_2 > 0.0: - final_table.append(('TOTAL', total_time_1, total_time_2, total_time_1 / total_time_2)) -final_table = [ (str(e0), str(e1), str(e2), str(e3)) for (e0, e1, e2, e3) in final_table ] -final_table.insert(0, ('Test', key1 + ' time', key2 + ' time', '(' + key1 + '/' + key2 + ') time')) -final_table.insert(1, ('', '', '', '')) - -column_width0 = max([len(c[0]) for c in final_table]) -column_width1 = max([len(c[1]) for c in final_table]) -column_width2 = max([len(c[2]) for c in final_table]) -column_width3 = max([len(c[3]) for c in final_table]) - -def mkColumn(c, w): - return ' ' + c.ljust(w) + ' ' - -columns = ['|'.join((mkColumn(c0, column_width0), mkColumn(c1, column_width1), mkColumn(c2, column_width2), mkColumn(c3, column_width3))) for (c0, c1, c2, c3) in final_table] -columns[1] = columns[1].replace(' ', '-') - -print('\n'.join(columns)) diff --git a/package/test-package.sh b/package/test-package.sh deleted file mode 100755 index 5c03447e70..0000000000 --- a/package/test-package.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env bash - -set -xueo pipefail - -which kevm -kevm --help -kevm version - -kevm run tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/add0.json --target llvm \ - --mode VMTESTS --schedule DEFAULT --chainid 1 \ - > tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/add0.json.llvm-out \ - || git --no-pager diff --no-index --ignore-all-space -R tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/add0.json.llvm-out tests/templates/output-success-llvm.json -rm -rf tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/add0.json.llvm-out - -kevm run tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmSystemOperations/TestNameRegistrator.json \ - --target llvm --mode VMTESTS --schedule DEFAULT --chainid 1 - -kevm run tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmSystemOperations/TestNameRegistrator.json \ - --target haskell-standalone --mode VMTESTS --schedule DEFAULT --chainid 1 - -kevm kast tests/interactive/log3_MaxTopic_d0g0v0.json --target llvm > tests/interactive/log3_MaxTopic_d0g0v0.json.parse-out -git --no-pager diff --no-index --ignore-all-space -R tests/interactive/log3_MaxTopic_d0g0v0.json.parse-out tests/interactive/log3_MaxTopic_d0g0v0.json.parse-expected -rm tests/interactive/log3_MaxTopic_d0g0v0.json.parse-out - -# This test currently segfaults on M1 Macs -if ! ${APPLE_SILICON:-false}; then - kevm run tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json --target llvm \ - --mode NORMAL --schedule BERLIN --chainid 1 \ - > tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.llvm-out \ - || git --no-pager diff --no-index --ignore-all-space -R tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.llvm-out tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.expected - rm -rf tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.llvm-out -fi - - -kevm solc-to-k tests/specs/examples/ERC20.sol ERC20 --target haskell --main-module ERC20-VERIFICATION > tests/specs/examples/erc20-bin-runtime.k -kevm kompile tests/specs/examples/erc20-spec.md \ - --target haskell \ - --output-definition tests/specs/examples/erc20-spec/haskell \ - --main-module VERIFICATION \ - --syntax-module VERIFICATION \ - --verbose -kevm prove tests/specs/examples/erc20-spec.md --definition tests/specs/examples/erc20-spec/haskell - -# Commented because of https://github.com/foundry-rs/foundry/issues/545, and we can't install solc 0.8.13 -# forge build --root tests/foundry --no-auto-detect -# kevm foundry-kompile --foundry-project-root tests/foundry --verbose -# kevm foundry-prove --foundry-project-root tests/foundry --verbose --test AssertTest.test_assert_true_branch diff --git a/package/version b/package/version deleted file mode 100644 index 6c946f9174..0000000000 --- a/package/version +++ /dev/null @@ -1 +0,0 @@ -1.0.276 diff --git a/package/version.sh b/package/version.sh deleted file mode 100755 index c33b9d8cec..0000000000 --- a/package/version.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env bash - -set -xeuo pipefail - -notif() { echo "== $@" >&2 ; } -fatal() { echo "[FATAL] $@" ; exit 1 ; } - -version_file="package/version" - -version_bump() { - local version release_commit version_major version_minor version_patch new_version current_version current_version_major current_version_minor current_version_patch - version="$1" ; shift - version_major="$(echo ${version} | cut --delimiter '.' --field 1)" - version_minor="$(echo ${version} | cut --delimiter '.' --field 2)" - version_patch="$(echo ${version} | cut --delimiter '.' --field 3)" - current_version="$(cat ${version_file})" - current_version_major="$(echo ${current_version} | cut --delimiter '.' --field 1)" - current_version_minor="$(echo ${current_version} | cut --delimiter '.' --field 2)" - current_version_patch="$(echo ${current_version} | cut --delimiter '.' --field 3)" - new_version="${version}" - if [[ "${version_major}" == "${current_version_major}" ]] && [[ "${version_minor}" == "${current_version_minor}" ]]; then - new_version="${version_major}.${version_minor}.$((version_patch + 1))" - fi - echo "${new_version}" > "${version_file}" - notif "Version: ${new_version}" -} - -version_sub() { - local version - version="$(cat $version_file)" - sed --in-place 's/^version = ".*"$/version = "'${version}'"/' kevm-pyk/pyproject.toml - sed --in-place 's/^kevm (.*) unstable; urgency=medium$/kevm ('${version}') unstable; urgency=medium/' package/debian/changelog -} - -version_command="$1" ; shift - -case "${version_command}" in - bump) version_bump "$@" ;; - sub) version_sub "$@" ;; - *) fatal "No command: ${version_command}" ;; -esac diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000000..e517f98474 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,111 @@ + + + + https://jellopaper.org/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/INSTALL/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/VERIFICATION/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/include/kframework/network/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/include/kframework/json-rpc/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/include/kframework/evm-types/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/include/kframework/serialization/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/include/kframework/evm/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/include/kframework/gas/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/include/kframework/schedule/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/include/kframework/buf/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/include/kframework/abi/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/include/kframework/hashed-locations/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/include/kframework/edsl/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/include/kframework/foundry/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/include/kframework/state-utils/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/include/kframework/driver/ + 1.0 + 2023-08-24 + monthly + + + https://jellopaper.org/tests/specs/examples/erc20-spec/ + 1.0 + 2023-08-24 + monthly + + \ No newline at end of file diff --git a/tests/failing-symbolic.haskell b/tests/failing-symbolic.haskell deleted file mode 100644 index 8818f62266..0000000000 --- a/tests/failing-symbolic.haskell +++ /dev/null @@ -1,7 +0,0 @@ -tests/specs/benchmarks/ecrecoverloop00-sig1-invalid-spec.k -tests/specs/bihu/collectToken-spec.k -tests/specs/mcd/flapper-tend-guy-diff-pass-rough-spec.k -tests/specs/mcd/vat-frob-diff-zero-dart-pass-rough-spec.k -tests/specs/mcd/vow-cage-deficit-pass-rough-spec.k -tests/specs/mcd/vow-cage-surplus-pass-rough-spec.k -tests/specs/opcodes/create-spec.k \ No newline at end of file diff --git a/tests/failing-symbolic.haskell-dry-run b/tests/failing-symbolic.haskell-dry-run deleted file mode 100644 index 8b13789179..0000000000 --- a/tests/failing-symbolic.haskell-dry-run +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/failing-symbolic.pyk b/tests/failing-symbolic.pyk deleted file mode 100644 index ff9eb0e291..0000000000 --- a/tests/failing-symbolic.pyk +++ /dev/null @@ -1,26 +0,0 @@ -tests/specs/benchmarks/functional-spec.k -tests/specs/bihu/forwardToHotWallet-failure-1-spec.k -tests/specs/bihu/forwardToHotWallet-failure-3-spec.k -tests/specs/bihu/forwardToHotWallet-failure-4-spec.k -tests/specs/bihu/forwardToHotWallet-success-1-spec.k -tests/specs/bihu/forwardToHotWallet-success-2-spec.k -tests/specs/erc20/ds/transferFrom-failure-1-d-spec.k -tests/specs/erc20/ds/transferFrom-failure-2-a-spec.k -tests/specs/erc20/ds/transferFrom-failure-2-c-spec.k -tests/specs/erc20/hkg/approve-spec.k -tests/specs/erc20/hkg/transferFrom-failure-1-spec.k -tests/specs/erc20/hkg/transferFrom-failure-2-spec.k -tests/specs/erc20/hkg/transferFrom-success-2-spec.k -tests/specs/erc20/hkg/transfer-success-1-spec.k -tests/specs/erc20/hkg/transfer-success-2-spec.k -tests/specs/examples/sum-to-n-spec.k -tests/specs/examples/sum-to-n-foundry-spec.k -tests/specs/functional/int-simplifications-spec.k -tests/specs/functional/lemmas-no-smt-spec.k -tests/specs/functional/lemmas-spec.k -tests/specs/functional/merkle-spec.k -tests/specs/functional/storageRoot-spec.k -tests/specs/mcd/vat-move-diff-rough-spec.k -tests/specs/mcd/vow-fess-fail-rough-spec.k -tests/specs/mcd/vow-flog-fail-rough-spec.k -tests/specs/opcodes/evm-optimizations-spec.md diff --git a/tests/failing.haskell b/tests/failing.haskell deleted file mode 100644 index 2c9a84ce29..0000000000 --- a/tests/failing.haskell +++ /dev/null @@ -1,2 +0,0 @@ -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmSystemOperations/suicide0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmSystemOperations/suicideSendEtherToMe.json diff --git a/tests/failing.llvm b/tests/failing.llvm deleted file mode 100644 index c19bc91189..0000000000 --- a/tests/failing.llvm +++ /dev/null @@ -1 +0,0 @@ -tests/ethereum-tests/BlockchainTests/GeneralStateTests/stCreate2/CREATE2_HighNonceDelegatecall.json \ No newline at end of file diff --git a/tests/failing/ContractCreationSpam_d0g0v0.json b/tests/failing/ContractCreationSpam_d0g0v0.json deleted file mode 100644 index b8564c020e..0000000000 --- a/tests/failing/ContractCreationSpam_d0g0v0.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "ContractCreationSpam_d0g0v0_Byzantium" : { - "_info" : { - "comment" : "", - "filledwith" : "testeth 1.6.0-alpha.0-11+commit.978e68d2", - "lllcversion" : "Version: 0.5.0-develop.2018.11.9+commit.9709dfe0.Linux.g++", - "source" : "src/BlockchainTestsFiller/GeneralStateTests/stAttackTest/ContractCreationSpam_d0g0v0Filler.json", - "sourceHash" : "8e54d77b3795f787463c4360e0b7bf53424c2fec8560d61418c7cffd3e7eedf9" - }, - "blocks" : [ - { - "blockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "", - "gasLimit" : "0x174876e800", - "gasUsed" : "0x0c3500", - "hash" : "0x395c1b94f8f4fe9f239719e27d11c86cec9b0c5ae063482fe187e7cdbc9ca9fa", - "mixHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce" : "0x0000000000000000", - "number" : "0x01", - "parentHash" : "0x24a30e4305ac41674b26493c800c05f507e98d3b8bceb0a314f9b9bc43622736", - "receiptTrie" : "0x1723da285b2c748c2ca379879c0cc2319ff26a9feb6d0779c6821ebe1a8122f6", - "stateRoot" : "0x0344321ea672cbc56b9b51fa730cb2e67fe4b5a7f8c4a14a291ce4d0292e2352", - "timestamp" : "0x03e8", - "transactionsTrie" : "0x202c09237fc2d6599e3cce6c9775000e3714d184832789143ef1ec871492f7fa", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "rlp" : "0xf90262f901faa024a30e4305ac41674b26493c800c05f507e98d3b8bceb0a314f9b9bc43622736a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00344321ea672cbc56b9b51fa730cb2e67fe4b5a7f8c4a14a291ce4d0292e2352a0202c09237fc2d6599e3cce6c9775000e3714d184832789143ef1ec871492f7faa01723da285b2c748c2ca379879c0cc2319ff26a9feb6d0779c6821ebe1a8122f6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000185174876e800830c35008203e880a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f8608001830c3500946a0a0fc761c612c340a0e98d33b37a75e526847280801ba0aca0d145ae5d27ed427ff0e463b8a46181d4786c437d6efb9937a6990694af7aa00f9bd68ece8f38ef2836153cd0bb85ec92f8386177f6e68d5437ab7b7d0d6361c0", - "transactions" : [ - { - "data" : "0x", - "gasLimit" : "0x0c3500", - "gasPrice" : "0x01", - "nonce" : "0x00", - "r" : "0xaca0d145ae5d27ed427ff0e463b8a46181d4786c437d6efb9937a6990694af7a", - "s" : "0x0f9bd68ece8f38ef2836153cd0bb85ec92f8386177f6e68d5437ab7b7d0d6361", - "to" : "0x6a0a0fc761c612c340a0e98d33b37a75e5268472", - "v" : "0x1b", - "value" : "0x00" - } - ], - "uncleHeaders" : [ - ] - } - ], - "genesisBlockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "0x42", - "gasLimit" : "0x174876e800", - "gasUsed" : "0x00", - "hash" : "0x24a30e4305ac41674b26493c800c05f507e98d3b8bceb0a314f9b9bc43622736", - "mixHash" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "nonce" : "0x0102030405060708", - "number" : "0x00", - "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "receiptTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot" : "0xd54ec35ca872c653659ad91eaa355665c286183b541a0519b3ab765a2d6733c3", - "timestamp" : "0x03b6", - "transactionsTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d54ec35ca872c653659ad91eaa355665c286183b541a0519b3ab765a2d6733c3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008085174876e800808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", - "lastblockhash" : "0x395c1b94f8f4fe9f239719e27d11c86cec9b0c5ae063482fe187e7cdbc9ca9fa", - "network" : "Byzantium", - "postState" : { - "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "0x29a2341af6383500", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - }, - "0x6a0a0fc761c612c340a0e98d33b37a75e5268472" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "0x7f6004600c60003960046000f3600035ff00000000000000000000000000000000600052602060006000f0600054805b6001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1505a616000106200002f57600055", - "nonce" : "0x00", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0xe8d498db00", - "code" : "", - "nonce" : "0x01", - "storage" : { - } - } - }, - "pre" : { - "0x6a0a0fc761c612c340a0e98d33b37a75e5268472" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "0x7f6004600c60003960046000f3600035ff00000000000000000000000000000000600052602060006000f0600054805b6001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1505a616000106200002f57600055", - "nonce" : "0x00", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0xe8d4a51000", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - } - }, - "sealEngine" : "NoProof" - } -} diff --git a/tests/failing/ContractCreationSpam_d0g0v0.json.expected b/tests/failing/ContractCreationSpam_d0g0v0.json.expected deleted file mode 100644 index a76c2d18fc..0000000000 --- a/tests/failing/ContractCreationSpam_d0g0v0.json.expected +++ /dev/null @@ -1,299 +0,0 @@ - - - check "account" : { 244687034288125203496486448490407391986876152250 : { "balance" : 3000017592186844416 , .JSONs } , .JSONs } ~> check "account" : { 244687034288125203496486448490407391986876152250 : { "code" : "" , "nonce" : "0x00" , "storage" : { .JSONs } , .JSONs } , .JSONs } ~> check "account" : { "0x6a0a0fc761c612c340a0e98d33b37a75e5268472" : { "balance" : "0x0de0b6b3a7640000" , "code" : "0x7f6004600c60003960046000f3600035ff00000000000000000000000000000000600052602060006000f0600054805b6001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1506001018060005260008060208180876006f1505a616000106200002f57600055" , "nonce" : "0x00" , "storage" : { .JSONs } , .JSONs } , "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { "balance" : "0xe8d498db00" , "code" : "" , "nonce" : "0x01" , "storage" : { .JSONs } , .JSONs } , .JSONs } ~> failure "ContractCreationSpam_d0g0v0_Byzantium" ~> check "ContractCreationSpam_d0g0v0_Byzantium" : { "genesisBlockHeader" : { "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" , "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" , "difficulty" : "0x020000" , "extraData" : "0x42" , "gasLimit" : "0x174876e800" , "gasUsed" : "0x00" , "hash" : "0x24a30e4305ac41674b26493c800c05f507e98d3b8bceb0a314f9b9bc43622736" , "mixHash" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" , "nonce" : "0x0102030405060708" , "number" : "0x00" , "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000" , "receiptTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" , "stateRoot" : "0xd54ec35ca872c653659ad91eaa355665c286183b541a0519b3ab765a2d6733c3" , "timestamp" : "0x03b6" , "transactionsTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" , "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" , .JSONs } , .JSONs } ~> check "ContractCreationSpam_d0g0v0_Byzantium" : { "blockHeader" : { "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" , "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" , "difficulty" : "0x020000" , "extraData" : "" , "gasLimit" : "0x174876e800" , "gasUsed" : "0x0c3500" , "hash" : "0x395c1b94f8f4fe9f239719e27d11c86cec9b0c5ae063482fe187e7cdbc9ca9fa" , "mixHash" : "0x0000000000000000000000000000000000000000000000000000000000000000" , "nonce" : "0x0000000000000000" , "number" : "0x01" , "parentHash" : "0x24a30e4305ac41674b26493c800c05f507e98d3b8bceb0a314f9b9bc43622736" , "receiptTrie" : "0x1723da285b2c748c2ca379879c0cc2319ff26a9feb6d0779c6821ebe1a8122f6" , "stateRoot" : "0x0344321ea672cbc56b9b51fa730cb2e67fe4b5a7f8c4a14a291ce4d0292e2352" , "timestamp" : "0x03e8" , "transactionsTrie" : "0x202c09237fc2d6599e3cce6c9775000e3714d184832789143ef1ec871492f7fa" , "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" , .JSONs } , .JSONs } ~> check "ContractCreationSpam_d0g0v0_Byzantium" : { "transactions" : [ { "data" : "0x" , "gasLimit" : "0x0c3500" , "gasPrice" : "0x01" , "nonce" : "0x00" , "r" : "0xaca0d145ae5d27ed427ff0e463b8a46181d4786c437d6efb9937a6990694af7a" , "s" : "0x0f9bd68ece8f38ef2836153cd0bb85ec92f8386177f6e68d5437ab7b7d0d6361" , "to" : "0x6a0a0fc761c612c340a0e98d33b37a75e5268472" , "v" : "0x1b" , "value" : "0x00" , .JSONs } , .JSONs ] , .JSONs } ~> check "ContractCreationSpam_d0g0v0_Byzantium" : { "uncleHeaders" : [ .JSONs ] , .JSONs } ~> clear ~> run { .JSONs } ~> success .EthereumSimulation ~> . - - - 1 - - - NORMAL - - - BYZANTIUM - - - - - b"" - - - EVMC_OUT_OF_GAS - - - .List - - - .List - - - SetItem ( 244687034288125203496486448490407391986876152250 ) - SetItem ( 605377403689755860392575400028894927315383256178 ) - SetItem ( 966588469268559010541288244128342317224451555083 ) - SetItem ( 1167766894475069270441227884904096439843862160299 ) - - - - b"" - - - .Set - - - .Account - - - .Account - - - b"" - - - 0 - - - .WordStack - - - b"" - - - 0 - - - 0 - - - 0 - - - 779000 - - - false - - - -1 - - - - - .Set - - - .List - - - 0 - - - .Set - - - .Map - - - - 1 - - - 966588469268559010541288244128342317224451555083 - - - ListItem ( 16571357051919171647812252688150536926893680553418066239369932048252618811190 ) - ListItem ( 0 ) - - - - 16571357051919171647812252688150536926893680553418066239369932048252618811190 - - - 13478047122767188135818125966132228187941283477090363246179690878162135454535 - - - 244687034288125203496486448490407391986876152250 - - - 1477430059799533586754885186927219234403198845911817080209357323761022280530 - - - 14551815498284840264014857837325028947526850354915646895726655739316204140538 - - - 10466540833385543789724272542100884313025723654884224509797710346113521885942 - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - 131072 - - - 1 - - - 100000000000 - - - 800000 - - - 1000 - - - b"" - - - 0 - - - 0 - - - 0 - - - [ .JSONs ] - - - - - - 1 - - - - - 244687034288125203496486448490407391986876152250 - - - 3000000000000800000 - - - b"" - - - .Map - - - .Map - - - 0 - - - - 605377403689755860392575400028894927315383256178 - - - 1000000000000000000 - - - b"\x7f`\x04`\f`\x009`\x04`\x00\xf3`\x005\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00R` `\x00`\x00\xf0`\x00T\x80[`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1P`\x01\x01\x80`\x00R`\x00\x80` \x81\x80\x87`\x06\xf1PZa`\x00\x10b\x00\x00/W`\x00U" - - - .Map - - - .Map - - - 0 - - - - 966588469268559010541288244128342317224451555083 - - - 999999200000 - - - b"" - - - .Map - - - .Map - - - 1 - - - - 1167766894475069270441227884904096439843862160299 - - - 0 - - - b"" - - - .Map - - - .Map - - - 0 - - - - - ListItem ( 0 ) - - - .List - - - - - 0 - - - 0 - - - 1 - - - 800000 - - - 605377403689755860392575400028894927315383256178 - - - 0 - - - 27 - - - b"\xac\xa0\xd1E\xae]'\xedB\x7f\xf0\xe4c\xb8\xa4a\x81\xd4xlC}n\xfb\x997\xa6\x99\x06\x94\xafz" - - - b"\x0f\x9b\xd6\x8e\xce\x8f8\xef(6\x15<\xd0\xbb\x85\xec\x92\xf88aw\xf6\xe6\x8dT7\xab{}\rca" - - - b"" - - - [ .JSONs ] - - - 1 - - - 1 - - - 1 - - - Legacy - - - - - - diff --git a/tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json b/tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json deleted file mode 100644 index 750608ce67..0000000000 --- a/tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0_Byzantium" : { - "_info" : { - "comment" : "", - "filledwith" : "testeth 1.6.0-alpha.0-11+commit.978e68d2", - "lllcversion" : "Version: 0.5.0-develop.2018.11.9+commit.9709dfe0.Linux.g++", - "source" : "src/BlockchainTestsFiller/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0Filler.json", - "sourceHash" : "aeb994c6f3decded15e070bd3424e7b2daff83e639cc72d65e1613f7e42cff6f" - }, - "blocks" : [ - { - "blockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "", - "gasLimit" : "0x989680", - "gasUsed" : "0x01a182", - "hash" : "0xa55121a4c4b8dc109c35f7c3d2f4aaa5db579623cfd91c4feacc636dba8a36d3", - "mixHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce" : "0x0000000000000000", - "number" : "0x01", - "parentHash" : "0x0a7e2b8a4aa7775ef54a4f52912179dce2f358c63ce1d83b8d5c727383c87b97", - "receiptTrie" : "0x993daa0d1aa166aeb2a97f5e76f060900b886275a482549346d5f5c6540e8534", - "stateRoot" : "0xb0cfe94047cb81299ce49bae362d3097c76722f11e9b5b97307abe0eefa40a41", - "timestamp" : "0x03e8", - "transactionsTrie" : "0xa9196e82a3a9d85d7bcc420dbac78c908768ad2d33a3655ba2e493e2d6dc055e", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "rlp" : "0xf90260f901f8a00a7e2b8a4aa7775ef54a4f52912179dce2f358c63ce1d83b8d5c727383c87b97a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b0cfe94047cb81299ce49bae362d3097c76722f11e9b5b97307abe0eefa40a41a0a9196e82a3a9d85d7bcc420dbac78c908768ad2d33a3655ba2e493e2d6dc055ea0993daa0d1aa166aeb2a97f5e76f060900b886275a482549346d5f5c6540e8534b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001839896808301a1828203e880a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800183029fe094100000000000000000000000000000000000000080801ba0baf8a8f59325064cb79441e4e78350cedcb7f76317c4f8d9ed321025db52916ba04cc988db9cec57eda456bb242201bb41c723f2427ff750123f11af6b759547e2c0", - "transactions" : [ - { - "data" : "0x", - "gasLimit" : "0x029fe0", - "gasPrice" : "0x01", - "nonce" : "0x00", - "r" : "0xbaf8a8f59325064cb79441e4e78350cedcb7f76317c4f8d9ed321025db52916b", - "s" : "0x4cc988db9cec57eda456bb242201bb41c723f2427ff750123f11af6b759547e2", - "to" : "0x1000000000000000000000000000000000000000", - "v" : "0x1b", - "value" : "0x00" - } - ], - "uncleHeaders" : [ - ] - } - ], - "genesisBlockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "0x42", - "gasLimit" : "0x989680", - "gasUsed" : "0x00", - "hash" : "0x0a7e2b8a4aa7775ef54a4f52912179dce2f358c63ce1d83b8d5c727383c87b97", - "mixHash" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "nonce" : "0x0102030405060708", - "number" : "0x00", - "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "receiptTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot" : "0xc88416a824e0fab43548e2b3650663c6d3559644f5eb3cfec3a36e2683f28c3c", - "timestamp" : "0x03b6", - "transactionsTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "genesisRLP" : "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c88416a824e0fab43548e2b3650663c6d3559644f5eb3cfec3a36e2683f28c3ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008083989680808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", - "lastblockhash" : "0xa55121a4c4b8dc109c35f7c3d2f4aaa5db579623cfd91c4feacc636dba8a36d3", - "network" : "Byzantium", - "postState" : { - "0x1000000000000000000000000000000000000000" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "0x604060006040600073100000000000000000000000000000000000000161eaf6f46000555a600155", - "nonce" : "0x00", - "storage" : { - "0x01" : "0x014c81" - } - }, - "0x1000000000000000000000000000000000000001" : { - "balance" : "0x00", - "code" : "0x6040600060406000731000000000000000000000000000000000000002619c90f4505b61c3506080511015603e5760013b506001608051016080526022565b", - "nonce" : "0x00", - "storage" : { - } - }, - "0x1000000000000000000000000000000000000002" : { - "balance" : "0x00", - "code" : "0x6040600060406000731000000000000000000000000000000000000003614e34fa", - "nonce" : "0x00", - "storage" : { - } - }, - "0x1000000000000000000000000000000000000003" : { - "balance" : "0x00", - "code" : "0x6001600352", - "nonce" : "0x00", - "storage" : { - } - }, - "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "0x29a2241af62da182", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0de7b6b3a7625e7e", - "code" : "", - "nonce" : "0x01", - "storage" : { - } - } - }, - "pre" : { - "0x1000000000000000000000000000000000000000" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "0x604060006040600073100000000000000000000000000000000000000161eaf6f46000555a600155", - "nonce" : "0x00", - "storage" : { - } - }, - "0x1000000000000000000000000000000000000001" : { - "balance" : "0x00", - "code" : "0x6040600060406000731000000000000000000000000000000000000002619c90f4505b61c3506080511015603e5760013b506001608051016080526022565b", - "nonce" : "0x00", - "storage" : { - } - }, - "0x1000000000000000000000000000000000000002" : { - "balance" : "0x00", - "code" : "0x6040600060406000731000000000000000000000000000000000000003614e34fa", - "nonce" : "0x00", - "storage" : { - } - }, - "0x1000000000000000000000000000000000000003" : { - "balance" : "0x00", - "code" : "0x6001600352", - "nonce" : "0x00", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - } - }, - "sealEngine" : "NoProof" - } -} diff --git a/tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.expected b/tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.expected deleted file mode 100644 index 8c3c46f13c..0000000000 --- a/tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.expected +++ /dev/null @@ -1,339 +0,0 @@ - - - check "account" : { 966588469268559010541288244128342317224451555083 : { "balance" : 1001970324836867710 , .JSONs } , .JSONs } ~> check "account" : { 966588469268559010541288244128342317224451555083 : { "code" : "" , "nonce" : "0x01" , "storage" : { .JSONs } , .JSONs } , .JSONs } ~> failure "static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0_Byzantium" ~> check "static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0_Byzantium" : { "genesisBlockHeader" : { "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" , "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" , "difficulty" : "0x020000" , "extraData" : "0x42" , "gasLimit" : "0x989680" , "gasUsed" : "0x00" , "hash" : "0x0a7e2b8a4aa7775ef54a4f52912179dce2f358c63ce1d83b8d5c727383c87b97" , "mixHash" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" , "nonce" : "0x0102030405060708" , "number" : "0x00" , "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000" , "receiptTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" , "stateRoot" : "0xc88416a824e0fab43548e2b3650663c6d3559644f5eb3cfec3a36e2683f28c3c" , "timestamp" : "0x03b6" , "transactionsTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" , "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" , .JSONs } , .JSONs } ~> check "static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0_Byzantium" : { "blockHeader" : { "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" , "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" , "difficulty" : "0x020000" , "extraData" : "" , "gasLimit" : "0x989680" , "gasUsed" : "0x01a182" , "hash" : "0xa55121a4c4b8dc109c35f7c3d2f4aaa5db579623cfd91c4feacc636dba8a36d3" , "mixHash" : "0x0000000000000000000000000000000000000000000000000000000000000000" , "nonce" : "0x0000000000000000" , "number" : "0x01" , "parentHash" : "0x0a7e2b8a4aa7775ef54a4f52912179dce2f358c63ce1d83b8d5c727383c87b97" , "receiptTrie" : "0x993daa0d1aa166aeb2a97f5e76f060900b886275a482549346d5f5c6540e8534" , "stateRoot" : "0xb0cfe94047cb81299ce49bae362d3097c76722f11e9b5b97307abe0eefa40a41" , "timestamp" : "0x03e8" , "transactionsTrie" : "0xa9196e82a3a9d85d7bcc420dbac78c908768ad2d33a3655ba2e493e2d6dc055e" , "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" , .JSONs } , .JSONs } ~> check "static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0_Byzantium" : { "transactions" : [ { "data" : "0x" , "gasLimit" : "0x029fe0" , "gasPrice" : "0x01" , "nonce" : "0x00" , "r" : "0xbaf8a8f59325064cb79441e4e78350cedcb7f76317c4f8d9ed321025db52916b" , "s" : "0x4cc988db9cec57eda456bb242201bb41c723f2427ff750123f11af6b759547e2" , "to" : "0x1000000000000000000000000000000000000000" , "v" : "0x1b" , "value" : "0x00" , .JSONs } , .JSONs ] , .JSONs } ~> check "static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0_Byzantium" : { "uncleHeaders" : [ .JSONs ] , .JSONs } ~> clear ~> run { .JSONs } ~> success .EthereumSimulation ~> . - - - 1 - - - NORMAL - - - BYZANTIUM - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - SetItem ( 91343852333181432387730302044767688728495783936 ) - SetItem ( 91343852333181432387730302044767688728495783939 ) - SetItem ( 244687034288125203496486448490407391986876152250 ) - SetItem ( 966588469268559010541288244128342317224451555083 ) - - - - b"" - - - .Set - - - .Account - - - .Account - - - b"" - - - 0 - - - .WordStack - - - b"" - - - 0 - - - 65118 - - - 0 - - - 151000 - - - false - - - -1 - - - - - .Set - - - .List - - - 0 - - - .Set - - - .Map - - - - 1 - - - 966588469268559010541288244128342317224451555083 - - - ListItem ( 4746051719422293590722610549793911264493366370041112137154393734119990786967 ) - ListItem ( 0 ) - - - - 4746051719422293590722610549793911264493366370041112137154393734119990786967 - - - 13478047122767188135818125966132228187941283477090363246179690878162135454535 - - - 244687034288125203496486448490407391986876152250 - - - 79974408532960288429899711134176742740713630382614279690056500896445772335681 - - - 76485805301318466729876335615587142838948560282354297614116042271634807850334 - - - 69312817154354016080117022606382753832604457950659495524378586854807032464692 - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - 131072 - - - 1 - - - 10000000 - - - 106882 - - - 1000 - - - b"" - - - 0 - - - 0 - - - 0 - - - [ .JSONs ] - - - - - - 1 - - - - - 91343852333181432387730302044767688728495783936 - - - 1000000000000000000 - - - b"`@`\x00`@`\x00s\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01a\xea\xf6\xf4`\x00UZ`\x01U" - - - 0 |-> 0 - 1 |-> 85121 - - - 0 |-> 0 - 1 |-> 85121 - - - 0 - - - - 91343852333181432387730302044767688728495783937 - - - 0 - - - b"`@`\x00`@`\x00s\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02a\x9c\x90\xf4P[a\xc3P`\x80Q\x10\x15`>W`\x01;P`\x01`\x80Q\x01`\x80R`\"V[" - - - .Map - - - .Map - - - 0 - - - - 91343852333181432387730302044767688728495783938 - - - 0 - - - b"`@`\x00`@`\x00s\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03aN4\xfa" - - - .Map - - - .Map - - - 0 - - - - 91343852333181432387730302044767688728495783939 - - - 0 - - - b"`\x01`\x03R" - - - .Map - - - .Map - - - 0 - - - - 244687034288125203496486448490407391986876152250 - - - 3000000000000106882 - - - b"" - - - .Map - - - .Map - - - 0 - - - - 966588469268559010541288244128342317224451555083 - - - 999999999999893118 - - - b"" - - - .Map - - - .Map - - - 1 - - - - - ListItem ( 0 ) - - - .List - - - - - 0 - - - 0 - - - 1 - - - 172000 - - - 91343852333181432387730302044767688728495783936 - - - 0 - - - 27 - - - b"\xba\xf8\xa8\xf5\x93%\x06L\xb7\x94A\xe4\xe7\x83P\xce\xdc\xb7\xf7c\x17\xc4\xf8\xd9\xed2\x10%\xdbR\x91k" - - - b"L\xc9\x88\xdb\x9c\xecW\xed\xa4V\xbb$\"\x01\xbbA\xc7#\xf2B\x7f\xf7P\x12?\x11\xafku\x95G\xe2" - - - b"" - - - [ .JSONs ] - - - 1 - - - 1 - - - 1 - - - Legacy - - - - - - diff --git a/tests/foundry/bmc-tests b/tests/foundry/bmc-tests deleted file mode 100644 index dd2dca691f..0000000000 --- a/tests/foundry/bmc-tests +++ /dev/null @@ -1,3 +0,0 @@ -BMCLoopsTest.test_bmc -BMCLoopsTest.test_countdown_concrete -BMCLoopsTest.test_countdown_symbolic diff --git a/tests/foundry/checkoutput b/tests/foundry/checkoutput deleted file mode 100644 index 1003967514..0000000000 --- a/tests/foundry/checkoutput +++ /dev/null @@ -1,13 +0,0 @@ -AssertTest.test_assert_false() -AssertTest.test_assert_true() -AssertTest.testFail_assert_false() -AssertTest.testFail_assert_true() -AssertTest.testFail_expect_revert() -AssertTest.test_revert_branch(uint256,uint256) -AssertTest.test_failing_branch(uint256) -AssumeTest.testFail_assume_false(uint256,uint256) -AssumeTest.testFail_assume_true(uint256,uint256) -AssumeTest.test_assume_false(uint256,uint256) -LoopsTest.sum_N(uint256) -SetUpDeployTest.test_extcodesize() -FreshIntTest.testFail_int128() diff --git a/tests/foundry/contracts.k.check.expected b/tests/foundry/contracts.k.check.expected deleted file mode 100644 index 4eae453d73..0000000000 --- a/tests/foundry/contracts.k.check.expected +++ /dev/null @@ -1,7465 +0,0 @@ -requires "foundry.md" - -module AccountParamsTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMAccountParamsTestContract - - syntax KEVMAccountParamsTestContract ::= "KEVMAccountParamsTest" [symbol(), klabel(contract_AccountParamsTest)] - - - - syntax Field ::= AccountParamsTestField - - syntax AccountParamsTestField ::= "IS_TEST" [symbol(), klabel(field_AccountParamsTest_IS_TEST)] - - syntax AccountParamsTestField ::= "_failed" [symbol(), klabel(field_AccountParamsTest__failed)] - - syntax AccountParamsTestField ::= "IS_SCRIPT" [symbol(), klabel(field_AccountParamsTest_IS_SCRIPT)] - - syntax AccountParamsTestField ::= "stdstore" [symbol(), klabel(field_AccountParamsTest_stdstore)] - - rule ( #loc ( KEVMAccountParamsTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMAccountParamsTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMAccountParamsTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMAccountParamsTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMAccountParamsTestContract "." KEVMAccountParamsTestMethod [function(), symbol(), klabel(method_AccountParamsTest)] - - syntax KEVMAccountParamsTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_AccountParamsTest_method-IS_SCRIPT_)] - - syntax KEVMAccountParamsTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_AccountParamsTest_method-IS_TEST_)] - - syntax KEVMAccountParamsTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_AccountParamsTest_method-failed_)] - - syntax KEVMAccountParamsTestMethod ::= "method-testDealConcrete" "(" ")" [symbol(), klabel(method_AccountParamsTest_method-testDealConcrete_)] - - syntax KEVMAccountParamsTestMethod ::= "method-testDealSymbolic" "(" Int ":" "uint256" ")" [symbol(), klabel(method_AccountParamsTest_method-testDealSymbolic_uint256)] - - syntax KEVMAccountParamsTestMethod ::= "method-testEtchConcrete" "(" ")" [symbol(), klabel(method_AccountParamsTest_method-testEtchConcrete_)] - - syntax KEVMAccountParamsTestMethod ::= "method-testEtchSymbolic" "(" Bytes ":" "bytes" ")" [symbol(), klabel(method_AccountParamsTest_method-testEtchSymbolic_bytes)] - - syntax KEVMAccountParamsTestMethod ::= "method-testFail_GetNonce_false" "(" ")" [symbol(), klabel(method_AccountParamsTest_method-testFail_GetNonce_false_)] - - syntax KEVMAccountParamsTestMethod ::= "method-testFail_GetNonce_true" "(" ")" [symbol(), klabel(method_AccountParamsTest_method-testFail_GetNonce_true_)] - - syntax KEVMAccountParamsTestMethod ::= "method-testNonceSymbolic" "(" Int ":" "uint64" ")" [symbol(), klabel(method_AccountParamsTest_method-testNonceSymbolic_uint64)] - - syntax KEVMAccountParamsTestMethod ::= "method-test_GetNonce_false" "(" ")" [symbol(), klabel(method_AccountParamsTest_method-test_GetNonce_false_)] - - syntax KEVMAccountParamsTestMethod ::= "method-test_GetNonce_true" "(" ")" [symbol(), klabel(method_AccountParamsTest_method-test_GetNonce_true_)] - - syntax KEVMAccountParamsTestMethod ::= "method-test_Nonce_ExistentAddress" "(" ")" [symbol(), klabel(method_AccountParamsTest_method-test_Nonce_ExistentAddress_)] - - syntax KEVMAccountParamsTestMethod ::= "method-test_Nonce_NonExistentAddress" "(" ")" [symbol(), klabel(method_AccountParamsTest_method-test_Nonce_NonExistentAddress_)] - - syntax KEVMAccountParamsTestMethod ::= "method-test_getNonce_unknownSymbolic" "(" Int ":" "address" ")" [symbol(), klabel(method_AccountParamsTest_method-test_getNonce_unknownSymbolic_address)] - - syntax KEVMAccountParamsTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_AccountParamsTest_method-vm_)] - - rule ( KEVMAccountParamsTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMAccountParamsTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMAccountParamsTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMAccountParamsTest . method-testDealConcrete ( ) => #abiCallData ( "testDealConcrete" , .TypedArgs ) ) - - - rule ( KEVMAccountParamsTest . method-testDealSymbolic ( V0_value : uint256 ) => #abiCallData ( "testDealSymbolic" , #uint256 ( V0_value ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_value ) - - - rule ( KEVMAccountParamsTest . method-testEtchConcrete ( ) => #abiCallData ( "testEtchConcrete" , .TypedArgs ) ) - - - rule ( KEVMAccountParamsTest . method-testEtchSymbolic ( V0_code : bytes ) => #abiCallData ( "testEtchSymbolic" , #bytes ( V0_code ) , .TypedArgs ) ) - ensures #rangeUInt ( 128 , lengthBytes ( V0_code ) ) - - - rule ( KEVMAccountParamsTest . method-testFail_GetNonce_false ( ) => #abiCallData ( "testFail_GetNonce_false" , .TypedArgs ) ) - - - rule ( KEVMAccountParamsTest . method-testFail_GetNonce_true ( ) => #abiCallData ( "testFail_GetNonce_true" , .TypedArgs ) ) - - - rule ( KEVMAccountParamsTest . method-testNonceSymbolic ( V0_newNonce : uint64 ) => #abiCallData ( "testNonceSymbolic" , #uint64 ( V0_newNonce ) , .TypedArgs ) ) - ensures #rangeUInt ( 64 , V0_newNonce ) - - - rule ( KEVMAccountParamsTest . method-test_GetNonce_false ( ) => #abiCallData ( "test_GetNonce_false" , .TypedArgs ) ) - - - rule ( KEVMAccountParamsTest . method-test_GetNonce_true ( ) => #abiCallData ( "test_GetNonce_true" , .TypedArgs ) ) - - - rule ( KEVMAccountParamsTest . method-test_Nonce_ExistentAddress ( ) => #abiCallData ( "test_Nonce_ExistentAddress" , .TypedArgs ) ) - - - rule ( KEVMAccountParamsTest . method-test_Nonce_NonExistentAddress ( ) => #abiCallData ( "test_Nonce_NonExistentAddress" , .TypedArgs ) ) - - - rule ( KEVMAccountParamsTest . method-test_getNonce_unknownSymbolic ( V0_addr : address ) => #abiCallData ( "test_getNonce_unknownSymbolic" , #address ( V0_addr ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_addr ) - - - rule ( KEVMAccountParamsTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testDealConcrete()" ) => 530093250 ) - - - rule ( selector ( "testDealSymbolic(uint256)" ) => 2584982624 ) - - - rule ( selector ( "testEtchConcrete()" ) => 807503996 ) - - - rule ( selector ( "testEtchSymbolic(bytes)" ) => 2109411263 ) - - - rule ( selector ( "testFail_GetNonce_false()" ) => 2393877859 ) - - - rule ( selector ( "testFail_GetNonce_true()" ) => 1067907152 ) - - - rule ( selector ( "testNonceSymbolic(uint64)" ) => 1310260491 ) - - - rule ( selector ( "test_GetNonce_false()" ) => 3545243759 ) - - - rule ( selector ( "test_GetNonce_true()" ) => 3968101798 ) - - - rule ( selector ( "test_Nonce_ExistentAddress()" ) => 1598387740 ) - - - rule ( selector ( "test_Nonce_NonExistentAddress()" ) => 2985064833 ) - - - rule ( selector ( "test_getNonce_unknownSymbolic(address)" ) => 3941547284 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module AddrTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMAddrTestContract - - syntax KEVMAddrTestContract ::= "KEVMAddrTest" [symbol(), klabel(contract_AddrTest)] - - - - syntax Field ::= AddrTestField - - syntax AddrTestField ::= "IS_TEST" [symbol(), klabel(field_AddrTest_IS_TEST)] - - syntax AddrTestField ::= "_failed" [symbol(), klabel(field_AddrTest__failed)] - - syntax AddrTestField ::= "IS_SCRIPT" [symbol(), klabel(field_AddrTest_IS_SCRIPT)] - - syntax AddrTestField ::= "stdstore" [symbol(), klabel(field_AddrTest_stdstore)] - - rule ( #loc ( KEVMAddrTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMAddrTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMAddrTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMAddrTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMAddrTestContract "." KEVMAddrTestMethod [function(), symbol(), klabel(method_AddrTest)] - - syntax KEVMAddrTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_AddrTest_method-IS_SCRIPT_)] - - syntax KEVMAddrTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_AddrTest_method-IS_TEST_)] - - syntax KEVMAddrTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_AddrTest_method-failed_)] - - syntax KEVMAddrTestMethod ::= "method-kevm" "(" ")" [symbol(), klabel(method_AddrTest_method-kevm_)] - - syntax KEVMAddrTestMethod ::= "method-testFail_addr_false" "(" ")" [symbol(), klabel(method_AddrTest_method-testFail_addr_false_)] - - syntax KEVMAddrTestMethod ::= "method-testFail_addr_true" "(" ")" [symbol(), klabel(method_AddrTest_method-testFail_addr_true_)] - - syntax KEVMAddrTestMethod ::= "method-test_addr_false" "(" ")" [symbol(), klabel(method_AddrTest_method-test_addr_false_)] - - syntax KEVMAddrTestMethod ::= "method-test_addr_symbolic" "(" Int ":" "uint256" ")" [symbol(), klabel(method_AddrTest_method-test_addr_symbolic_uint256)] - - syntax KEVMAddrTestMethod ::= "method-test_addr_true" "(" ")" [symbol(), klabel(method_AddrTest_method-test_addr_true_)] - - syntax KEVMAddrTestMethod ::= "method-test_builtInAddresses" "(" ")" [symbol(), klabel(method_AddrTest_method-test_builtInAddresses_)] - - syntax KEVMAddrTestMethod ::= "method-test_notBuiltinAddress_concrete" "(" ")" [symbol(), klabel(method_AddrTest_method-test_notBuiltinAddress_concrete_)] - - syntax KEVMAddrTestMethod ::= "method-test_notBuiltinAddress_symbolic" "(" Int ":" "address" ")" [symbol(), klabel(method_AddrTest_method-test_notBuiltinAddress_symbolic_address)] - - syntax KEVMAddrTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_AddrTest_method-vm_)] - - rule ( KEVMAddrTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMAddrTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMAddrTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMAddrTest . method-kevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( KEVMAddrTest . method-testFail_addr_false ( ) => #abiCallData ( "testFail_addr_false" , .TypedArgs ) ) - - - rule ( KEVMAddrTest . method-testFail_addr_true ( ) => #abiCallData ( "testFail_addr_true" , .TypedArgs ) ) - - - rule ( KEVMAddrTest . method-test_addr_false ( ) => #abiCallData ( "test_addr_false" , .TypedArgs ) ) - - - rule ( KEVMAddrTest . method-test_addr_symbolic ( V0_pk : uint256 ) => #abiCallData ( "test_addr_symbolic" , #uint256 ( V0_pk ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_pk ) - - - rule ( KEVMAddrTest . method-test_addr_true ( ) => #abiCallData ( "test_addr_true" , .TypedArgs ) ) - - - rule ( KEVMAddrTest . method-test_builtInAddresses ( ) => #abiCallData ( "test_builtInAddresses" , .TypedArgs ) ) - - - rule ( KEVMAddrTest . method-test_notBuiltinAddress_concrete ( ) => #abiCallData ( "test_notBuiltinAddress_concrete" , .TypedArgs ) ) - - - rule ( KEVMAddrTest . method-test_notBuiltinAddress_symbolic ( V0_addr : address ) => #abiCallData ( "test_notBuiltinAddress_symbolic" , #address ( V0_addr ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_addr ) - - - rule ( KEVMAddrTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - - rule ( selector ( "testFail_addr_false()" ) => 3302866643 ) - - - rule ( selector ( "testFail_addr_true()" ) => 2486005453 ) - - - rule ( selector ( "test_addr_false()" ) => 4124294109 ) - - - rule ( selector ( "test_addr_symbolic(uint256)" ) => 3071220939 ) - - - rule ( selector ( "test_addr_true()" ) => 809049819 ) - - - rule ( selector ( "test_builtInAddresses()" ) => 3220291840 ) - - - rule ( selector ( "test_notBuiltinAddress_concrete()" ) => 2409208231 ) - - - rule ( selector ( "test_notBuiltinAddress_symbolic(address)" ) => 2160641203 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module AllowChangesTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMAllowChangesTestContract - - syntax KEVMAllowChangesTestContract ::= "KEVMAllowChangesTest" [symbol(), klabel(contract_AllowChangesTest)] - - - - syntax Field ::= AllowChangesTestField - - syntax AllowChangesTestField ::= "IS_TEST" [symbol(), klabel(field_AllowChangesTest_IS_TEST)] - - syntax AllowChangesTestField ::= "_failed" [symbol(), klabel(field_AllowChangesTest__failed)] - - syntax AllowChangesTestField ::= "IS_SCRIPT" [symbol(), klabel(field_AllowChangesTest_IS_SCRIPT)] - - syntax AllowChangesTestField ::= "stdstore" [symbol(), klabel(field_AllowChangesTest_stdstore)] - - rule ( #loc ( KEVMAllowChangesTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMAllowChangesTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMAllowChangesTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMAllowChangesTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMAllowChangesTestContract "." KEVMAllowChangesTestMethod [function(), symbol(), klabel(method_AllowChangesTest)] - - syntax KEVMAllowChangesTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_AllowChangesTest_method-IS_SCRIPT_)] - - syntax KEVMAllowChangesTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_AllowChangesTest_method-IS_TEST_)] - - syntax KEVMAllowChangesTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_AllowChangesTest_method-failed_)] - - syntax KEVMAllowChangesTestMethod ::= "method-kevm" "(" ")" [symbol(), klabel(method_AllowChangesTest_method-kevm_)] - - syntax KEVMAllowChangesTestMethod ::= "method-test" "(" ")" [symbol(), klabel(method_AllowChangesTest_method-test_)] - - syntax KEVMAllowChangesTestMethod ::= "method-testAllow" "(" ")" [symbol(), klabel(method_AllowChangesTest_method-testAllow_)] - - syntax KEVMAllowChangesTestMethod ::= "method-testAllow_fail" "(" ")" [symbol(), klabel(method_AllowChangesTest_method-testAllow_fail_)] - - syntax KEVMAllowChangesTestMethod ::= "method-testFailAllowCallsToAddress" "(" ")" [symbol(), klabel(method_AllowChangesTest_method-testFailAllowCallsToAddress_)] - - syntax KEVMAllowChangesTestMethod ::= "method-testFailAllowChangesToStorage" "(" ")" [symbol(), klabel(method_AllowChangesTest_method-testFailAllowChangesToStorage_)] - - syntax KEVMAllowChangesTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_AllowChangesTest_method-vm_)] - - rule ( KEVMAllowChangesTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMAllowChangesTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMAllowChangesTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMAllowChangesTest . method-kevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( KEVMAllowChangesTest . method-test ( ) => #abiCallData ( "test" , .TypedArgs ) ) - - - rule ( KEVMAllowChangesTest . method-testAllow ( ) => #abiCallData ( "testAllow" , .TypedArgs ) ) - - - rule ( KEVMAllowChangesTest . method-testAllow_fail ( ) => #abiCallData ( "testAllow_fail" , .TypedArgs ) ) - - - rule ( KEVMAllowChangesTest . method-testFailAllowCallsToAddress ( ) => #abiCallData ( "testFailAllowCallsToAddress" , .TypedArgs ) ) - - - rule ( KEVMAllowChangesTest . method-testFailAllowChangesToStorage ( ) => #abiCallData ( "testFailAllowChangesToStorage" , .TypedArgs ) ) - - - rule ( KEVMAllowChangesTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - - rule ( selector ( "test()" ) => 4171824493 ) - - - rule ( selector ( "testAllow()" ) => 3693132891 ) - - - rule ( selector ( "testAllow_fail()" ) => 4129570225 ) - - - rule ( selector ( "testFailAllowCallsToAddress()" ) => 1262828121 ) - - - rule ( selector ( "testFailAllowChangesToStorage()" ) => 1529992487 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module ValueStore-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMValueStoreContract - - syntax KEVMValueStoreContract ::= "KEVMValueStore" [symbol(), klabel(contract_ValueStore)] - - - - syntax Field ::= ValueStoreField - - syntax ValueStoreField ::= "value1" [symbol(), klabel(field_ValueStore_value1)] - - syntax ValueStoreField ::= "value2" [symbol(), klabel(field_ValueStore_value2)] - - rule ( #loc ( KEVMValueStore . value1 ) => 0 ) - - - rule ( #loc ( KEVMValueStore . value2 ) => 1 ) - - - syntax Bytes ::= KEVMValueStoreContract "." KEVMValueStoreMethod [function(), symbol(), klabel(method_ValueStore)] - - syntax KEVMValueStoreMethod ::= "method-changeValue1" "(" Int ":" "uint256" ")" [symbol(), klabel(method_ValueStore_method-changeValue1_uint256)] - - syntax KEVMValueStoreMethod ::= "method-changeValue2" "(" Int ":" "uint256" ")" [symbol(), klabel(method_ValueStore_method-changeValue2_uint256)] - - syntax KEVMValueStoreMethod ::= "method-value1" "(" ")" [symbol(), klabel(method_ValueStore_method-value1_)] - - syntax KEVMValueStoreMethod ::= "method-value2" "(" ")" [symbol(), klabel(method_ValueStore_method-value2_)] - - rule ( KEVMValueStore . method-changeValue1 ( V0_newValue : uint256 ) => #abiCallData ( "changeValue1" , #uint256 ( V0_newValue ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_newValue ) - - - rule ( KEVMValueStore . method-changeValue2 ( V0_newValue : uint256 ) => #abiCallData ( "changeValue2" , #uint256 ( V0_newValue ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_newValue ) - - - rule ( KEVMValueStore . method-value1 ( ) => #abiCallData ( "value1" , .TypedArgs ) ) - - - rule ( KEVMValueStore . method-value2 ( ) => #abiCallData ( "value2" , .TypedArgs ) ) - - - rule ( selector ( "changeValue1(uint256)" ) => 1634438405 ) - - - rule ( selector ( "changeValue2(uint256)" ) => 367426214 ) - - - rule ( selector ( "value1()" ) => 808665403 ) - - - rule ( selector ( "value2()" ) => 1563665023 ) - - -endmodule - -module ArithmeticTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMArithmeticTestContract - - syntax KEVMArithmeticTestContract ::= "KEVMArithmeticTest" [symbol(), klabel(contract_ArithmeticTest)] - - - - syntax Field ::= ArithmeticTestField - - syntax ArithmeticTestField ::= "IS_TEST" [symbol(), klabel(field_ArithmeticTest_IS_TEST)] - - syntax ArithmeticTestField ::= "_failed" [symbol(), klabel(field_ArithmeticTest__failed)] - - syntax ArithmeticTestField ::= "IS_SCRIPT" [symbol(), klabel(field_ArithmeticTest_IS_SCRIPT)] - - syntax ArithmeticTestField ::= "stdstore" [symbol(), klabel(field_ArithmeticTest_stdstore)] - - rule ( #loc ( KEVMArithmeticTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMArithmeticTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMArithmeticTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMArithmeticTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMArithmeticTestContract "." KEVMArithmeticTestMethod [function(), symbol(), klabel(method_ArithmeticTest)] - - syntax KEVMArithmeticTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_ArithmeticTest_method-IS_SCRIPT_)] - - syntax KEVMArithmeticTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_ArithmeticTest_method-IS_TEST_)] - - syntax KEVMArithmeticTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_ArithmeticTest_method-failed_)] - - syntax KEVMArithmeticTestMethod ::= "method-test_decreasing_div" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_method-test_decreasing_div_uint256_uint256)] - - syntax KEVMArithmeticTestMethod ::= "method-test_max1" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_method-test_max1_uint256_uint256)] - - syntax KEVMArithmeticTestMethod ::= "method-test_max1_broken" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_method-test_max1_broken_uint256_uint256)] - - syntax KEVMArithmeticTestMethod ::= "method-test_max2" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_method-test_max2_uint256_uint256)] - - syntax KEVMArithmeticTestMethod ::= "method-test_wdiv_rounding" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_method-test_wdiv_rounding_uint256_uint256)] - - syntax KEVMArithmeticTestMethod ::= "method-test_wmul_increasing" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_method-test_wmul_increasing_uint256_uint256)] - - syntax KEVMArithmeticTestMethod ::= "method-test_wmul_increasing_gt_one" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_method-test_wmul_increasing_gt_one_uint256_uint256)] - - syntax KEVMArithmeticTestMethod ::= "method-test_wmul_increasing_overflow" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_method-test_wmul_increasing_overflow_uint256_uint256)] - - syntax KEVMArithmeticTestMethod ::= "method-test_wmul_increasing_positive" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_method-test_wmul_increasing_positive_uint256_uint256)] - - syntax KEVMArithmeticTestMethod ::= "method-test_wmul_rounding" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_method-test_wmul_rounding_uint256_uint256)] - - syntax KEVMArithmeticTestMethod ::= "method-test_wmul_wdiv_inverse" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_method-test_wmul_wdiv_inverse_uint256_uint256)] - - syntax KEVMArithmeticTestMethod ::= "method-test_wmul_wdiv_inverse_underflow" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_method-test_wmul_wdiv_inverse_underflow_uint256_uint256)] - - syntax KEVMArithmeticTestMethod ::= "method-test_wmul_weakly_increasing_positive" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_ArithmeticTest_method-test_wmul_weakly_increasing_positive_uint256_uint256)] - - syntax KEVMArithmeticTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_ArithmeticTest_method-vm_)] - - rule ( KEVMArithmeticTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMArithmeticTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMArithmeticTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMArithmeticTest . method-test_decreasing_div ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_decreasing_div" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMArithmeticTest . method-test_max1 ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_max1" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMArithmeticTest . method-test_max1_broken ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_max1_broken" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMArithmeticTest . method-test_max2 ( V0_x : uint256 , V1_y : uint256 ) => #abiCallData ( "test_max2" , #uint256 ( V0_x ) , #uint256 ( V1_y ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_x ) - andBool ( #rangeUInt ( 256 , V1_y ) - )) - - - rule ( KEVMArithmeticTest . method-test_wdiv_rounding ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wdiv_rounding" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMArithmeticTest . method-test_wmul_increasing ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_increasing" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMArithmeticTest . method-test_wmul_increasing_gt_one ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_increasing_gt_one" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMArithmeticTest . method-test_wmul_increasing_overflow ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_increasing_overflow" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMArithmeticTest . method-test_wmul_increasing_positive ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_increasing_positive" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMArithmeticTest . method-test_wmul_rounding ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_rounding" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMArithmeticTest . method-test_wmul_wdiv_inverse ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_wdiv_inverse" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMArithmeticTest . method-test_wmul_wdiv_inverse_underflow ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_wdiv_inverse_underflow" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMArithmeticTest . method-test_wmul_weakly_increasing_positive ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_wmul_weakly_increasing_positive" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMArithmeticTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "test_decreasing_div(uint256,uint256)" ) => 1011519306 ) - - - rule ( selector ( "test_max1(uint256,uint256)" ) => 1625765100 ) - - - rule ( selector ( "test_max1_broken(uint256,uint256)" ) => 2809107068 ) - - - rule ( selector ( "test_max2(uint256,uint256)" ) => 434746443 ) - - - rule ( selector ( "test_wdiv_rounding(uint256,uint256)" ) => 345004095 ) - - - rule ( selector ( "test_wmul_increasing(uint256,uint256)" ) => 2784670501 ) - - - rule ( selector ( "test_wmul_increasing_gt_one(uint256,uint256)" ) => 899022695 ) - - - rule ( selector ( "test_wmul_increasing_overflow(uint256,uint256)" ) => 1123042280 ) - - - rule ( selector ( "test_wmul_increasing_positive(uint256,uint256)" ) => 490103800 ) - - - rule ( selector ( "test_wmul_rounding(uint256,uint256)" ) => 4261140569 ) - - - rule ( selector ( "test_wmul_wdiv_inverse(uint256,uint256)" ) => 3719613508 ) - - - rule ( selector ( "test_wmul_wdiv_inverse_underflow(uint256,uint256)" ) => 2736038219 ) - - - rule ( selector ( "test_wmul_weakly_increasing_positive(uint256,uint256)" ) => 1421647895 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module AssumeTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMAssumeTestContract - - syntax KEVMAssumeTestContract ::= "KEVMAssumeTest" [symbol(), klabel(contract_AssumeTest)] - - - - syntax Field ::= AssumeTestField - - syntax AssumeTestField ::= "IS_TEST" [symbol(), klabel(field_AssumeTest_IS_TEST)] - - syntax AssumeTestField ::= "_failed" [symbol(), klabel(field_AssumeTest__failed)] - - syntax AssumeTestField ::= "IS_SCRIPT" [symbol(), klabel(field_AssumeTest_IS_SCRIPT)] - - syntax AssumeTestField ::= "stdstore" [symbol(), klabel(field_AssumeTest_stdstore)] - - rule ( #loc ( KEVMAssumeTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMAssumeTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMAssumeTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMAssumeTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMAssumeTestContract "." KEVMAssumeTestMethod [function(), symbol(), klabel(method_AssumeTest)] - - syntax KEVMAssumeTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_AssumeTest_method-IS_SCRIPT_)] - - syntax KEVMAssumeTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_AssumeTest_method-IS_TEST_)] - - syntax KEVMAssumeTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_AssumeTest_method-failed_)] - - syntax KEVMAssumeTestMethod ::= "method-testFail_assume_false" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_AssumeTest_method-testFail_assume_false_uint256_uint256)] - - syntax KEVMAssumeTestMethod ::= "method-testFail_assume_true" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_AssumeTest_method-testFail_assume_true_uint256_uint256)] - - syntax KEVMAssumeTestMethod ::= "method-test_assume_false" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_AssumeTest_method-test_assume_false_uint256_uint256)] - - syntax KEVMAssumeTestMethod ::= "method-test_assume_staticCall" "(" Int ":" "bool" ")" [symbol(), klabel(method_AssumeTest_method-test_assume_staticCall_bool)] - - syntax KEVMAssumeTestMethod ::= "method-test_assume_true" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_AssumeTest_method-test_assume_true_uint256_uint256)] - - syntax KEVMAssumeTestMethod ::= "method-test_multi_assume" "(" Int ":" "address" "," Int ":" "address" ")" [symbol(), klabel(method_AssumeTest_method-test_multi_assume_address_address)] - - syntax KEVMAssumeTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_AssumeTest_method-vm_)] - - rule ( KEVMAssumeTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMAssumeTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMAssumeTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMAssumeTest . method-testFail_assume_false ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "testFail_assume_false" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMAssumeTest . method-testFail_assume_true ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "testFail_assume_true" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMAssumeTest . method-test_assume_false ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_assume_false" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMAssumeTest . method-test_assume_staticCall ( V0_a : bool ) => #abiCallData ( "test_assume_staticCall" , #bool ( V0_a ) , .TypedArgs ) ) - ensures #rangeBool ( V0_a ) - - - rule ( KEVMAssumeTest . method-test_assume_true ( V0_a : uint256 , V1_b : uint256 ) => #abiCallData ( "test_assume_true" , #uint256 ( V0_a ) , #uint256 ( V1_b ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_a ) - andBool ( #rangeUInt ( 256 , V1_b ) - )) - - - rule ( KEVMAssumeTest . method-test_multi_assume ( V0_alice : address , V1_bob : address ) => #abiCallData ( "test_multi_assume" , #address ( V0_alice ) , #address ( V1_bob ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_alice ) - andBool ( #rangeAddress ( V1_bob ) - )) - - - rule ( KEVMAssumeTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testFail_assume_false(uint256,uint256)" ) => 1596879099 ) - - - rule ( selector ( "testFail_assume_true(uint256,uint256)" ) => 246830810 ) - - - rule ( selector ( "test_assume_false(uint256,uint256)" ) => 3827036084 ) - - - rule ( selector ( "test_assume_staticCall(bool)" ) => 1479621703 ) - - - rule ( selector ( "test_assume_true(uint256,uint256)" ) => 1861181564 ) - - - rule ( selector ( "test_multi_assume(address,address)" ) => 2625007844 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module BMCLoopsTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMBMCLoopsTestContract - - syntax KEVMBMCLoopsTestContract ::= "KEVMBMCLoopsTest" [symbol(), klabel(contract_BMCLoopsTest)] - - - - syntax Field ::= BMCLoopsTestField - - syntax BMCLoopsTestField ::= "IS_TEST" [symbol(), klabel(field_BMCLoopsTest_IS_TEST)] - - syntax BMCLoopsTestField ::= "_failed" [symbol(), klabel(field_BMCLoopsTest__failed)] - - syntax BMCLoopsTestField ::= "IS_SCRIPT" [symbol(), klabel(field_BMCLoopsTest_IS_SCRIPT)] - - syntax BMCLoopsTestField ::= "stdstore" [symbol(), klabel(field_BMCLoopsTest_stdstore)] - - rule ( #loc ( KEVMBMCLoopsTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMBMCLoopsTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMBMCLoopsTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMBMCLoopsTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMBMCLoopsTestContract "." KEVMBMCLoopsTestMethod [function(), symbol(), klabel(method_BMCLoopsTest)] - - syntax KEVMBMCLoopsTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_BMCLoopsTest_method-IS_SCRIPT_)] - - syntax KEVMBMCLoopsTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_BMCLoopsTest_method-IS_TEST_)] - - syntax KEVMBMCLoopsTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_BMCLoopsTest_method-failed_)] - - syntax KEVMBMCLoopsTestMethod ::= "method-test_bmc" "(" Int ":" "uint256" ")" [symbol(), klabel(method_BMCLoopsTest_method-test_bmc_uint256)] - - syntax KEVMBMCLoopsTestMethod ::= "method-test_countdown_concrete" "(" ")" [symbol(), klabel(method_BMCLoopsTest_method-test_countdown_concrete_)] - - syntax KEVMBMCLoopsTestMethod ::= "method-test_countdown_symbolic" "(" Int ":" "uint256" ")" [symbol(), klabel(method_BMCLoopsTest_method-test_countdown_symbolic_uint256)] - - syntax KEVMBMCLoopsTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_BMCLoopsTest_method-vm_)] - - rule ( KEVMBMCLoopsTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMBMCLoopsTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMBMCLoopsTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMBMCLoopsTest . method-test_bmc ( V0_n : uint256 ) => #abiCallData ( "test_bmc" , #uint256 ( V0_n ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_n ) - - - rule ( KEVMBMCLoopsTest . method-test_countdown_concrete ( ) => #abiCallData ( "test_countdown_concrete" , .TypedArgs ) ) - - - rule ( KEVMBMCLoopsTest . method-test_countdown_symbolic ( V0_n : uint256 ) => #abiCallData ( "test_countdown_symbolic" , #uint256 ( V0_n ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_n ) - - - rule ( KEVMBMCLoopsTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "test_bmc(uint256)" ) => 2531276689 ) - - - rule ( selector ( "test_countdown_concrete()" ) => 1189516988 ) - - - rule ( selector ( "test_countdown_symbolic(uint256)" ) => 3183316184 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module BlockParamsTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMBlockParamsTestContract - - syntax KEVMBlockParamsTestContract ::= "KEVMBlockParamsTest" [symbol(), klabel(contract_BlockParamsTest)] - - - - syntax Field ::= BlockParamsTestField - - syntax BlockParamsTestField ::= "IS_TEST" [symbol(), klabel(field_BlockParamsTest_IS_TEST)] - - syntax BlockParamsTestField ::= "_failed" [symbol(), klabel(field_BlockParamsTest__failed)] - - syntax BlockParamsTestField ::= "IS_SCRIPT" [symbol(), klabel(field_BlockParamsTest_IS_SCRIPT)] - - syntax BlockParamsTestField ::= "stdstore" [symbol(), klabel(field_BlockParamsTest_stdstore)] - - rule ( #loc ( KEVMBlockParamsTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMBlockParamsTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMBlockParamsTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMBlockParamsTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMBlockParamsTestContract "." KEVMBlockParamsTestMethod [function(), symbol(), klabel(method_BlockParamsTest)] - - syntax KEVMBlockParamsTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_BlockParamsTest_method-IS_SCRIPT_)] - - syntax KEVMBlockParamsTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_BlockParamsTest_method-IS_TEST_)] - - syntax KEVMBlockParamsTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_BlockParamsTest_method-failed_)] - - syntax KEVMBlockParamsTestMethod ::= "method-testBlockNumber" "(" ")" [symbol(), klabel(method_BlockParamsTest_method-testBlockNumber_)] - - syntax KEVMBlockParamsTestMethod ::= "method-testChainId" "(" Int ":" "uint256" ")" [symbol(), klabel(method_BlockParamsTest_method-testChainId_uint256)] - - syntax KEVMBlockParamsTestMethod ::= "method-testCoinBase" "(" ")" [symbol(), klabel(method_BlockParamsTest_method-testCoinBase_)] - - syntax KEVMBlockParamsTestMethod ::= "method-testFee" "(" Int ":" "uint256" ")" [symbol(), klabel(method_BlockParamsTest_method-testFee_uint256)] - - syntax KEVMBlockParamsTestMethod ::= "method-testRoll" "(" Int ":" "uint256" ")" [symbol(), klabel(method_BlockParamsTest_method-testRoll_uint256)] - - syntax KEVMBlockParamsTestMethod ::= "method-testWarp" "(" Int ":" "uint256" ")" [symbol(), klabel(method_BlockParamsTest_method-testWarp_uint256)] - - syntax KEVMBlockParamsTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_BlockParamsTest_method-vm_)] - - rule ( KEVMBlockParamsTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMBlockParamsTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMBlockParamsTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMBlockParamsTest . method-testBlockNumber ( ) => #abiCallData ( "testBlockNumber" , .TypedArgs ) ) - - - rule ( KEVMBlockParamsTest . method-testChainId ( V0_newChainId : uint256 ) => #abiCallData ( "testChainId" , #uint256 ( V0_newChainId ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_newChainId ) - - - rule ( KEVMBlockParamsTest . method-testCoinBase ( ) => #abiCallData ( "testCoinBase" , .TypedArgs ) ) - - - rule ( KEVMBlockParamsTest . method-testFee ( V0_newFee : uint256 ) => #abiCallData ( "testFee" , #uint256 ( V0_newFee ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_newFee ) - - - rule ( KEVMBlockParamsTest . method-testRoll ( V0_newHeight : uint256 ) => #abiCallData ( "testRoll" , #uint256 ( V0_newHeight ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_newHeight ) - - - rule ( KEVMBlockParamsTest . method-testWarp ( V0_time : uint256 ) => #abiCallData ( "testWarp" , #uint256 ( V0_time ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_time ) - - - rule ( KEVMBlockParamsTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testBlockNumber()" ) => 3916490861 ) - - - rule ( selector ( "testChainId(uint256)" ) => 486990902 ) - - - rule ( selector ( "testCoinBase()" ) => 2231467180 ) - - - rule ( selector ( "testFee(uint256)" ) => 687351365 ) - - - rule ( selector ( "testRoll(uint256)" ) => 3832502715 ) - - - rule ( selector ( "testWarp(uint256)" ) => 1957961066 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module BroadcastTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMBroadcastTestContract - - syntax KEVMBroadcastTestContract ::= "KEVMBroadcastTest" [symbol(), klabel(contract_BroadcastTest)] - - - - syntax Field ::= BroadcastTestField - - syntax BroadcastTestField ::= "IS_TEST" [symbol(), klabel(field_BroadcastTest_IS_TEST)] - - syntax BroadcastTestField ::= "_failed" [symbol(), klabel(field_BroadcastTest__failed)] - - syntax BroadcastTestField ::= "IS_SCRIPT" [symbol(), klabel(field_BroadcastTest_IS_SCRIPT)] - - syntax BroadcastTestField ::= "stdstore" [symbol(), klabel(field_BroadcastTest_stdstore)] - - syntax BroadcastTestField ::= "ACCOUNT_A" [symbol(), klabel(field_BroadcastTest_ACCOUNT_A)] - - syntax BroadcastTestField ::= "ACCOUNT_B" [symbol(), klabel(field_BroadcastTest_ACCOUNT_B)] - - rule ( #loc ( KEVMBroadcastTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMBroadcastTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMBroadcastTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMBroadcastTest . stdstore ) => 1 ) - - - rule ( #loc ( KEVMBroadcastTest . ACCOUNT_A ) => 8 ) - - - rule ( #loc ( KEVMBroadcastTest . ACCOUNT_B ) => 9 ) - - - syntax Bytes ::= KEVMBroadcastTestContract "." KEVMBroadcastTestMethod [function(), symbol(), klabel(method_BroadcastTest)] - - syntax KEVMBroadcastTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_BroadcastTest_method-IS_SCRIPT_)] - - syntax KEVMBroadcastTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_BroadcastTest_method-IS_TEST_)] - - syntax KEVMBroadcastTestMethod ::= "method-deployNoArgs" "(" ")" [symbol(), klabel(method_BroadcastTest_method-deployNoArgs_)] - - syntax KEVMBroadcastTestMethod ::= "method-deployOther" "(" ")" [symbol(), klabel(method_BroadcastTest_method-deployOther_)] - - syntax KEVMBroadcastTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_BroadcastTest_method-failed_)] - - syntax KEVMBroadcastTestMethod ::= "method-setUp" "(" ")" [symbol(), klabel(method_BroadcastTest_method-setUp_)] - - syntax KEVMBroadcastTestMethod ::= "method-testDeploy" "(" ")" [symbol(), klabel(method_BroadcastTest_method-testDeploy_)] - - syntax KEVMBroadcastTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_BroadcastTest_method-vm_)] - - rule ( KEVMBroadcastTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMBroadcastTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMBroadcastTest . method-deployNoArgs ( ) => #abiCallData ( "deployNoArgs" , .TypedArgs ) ) - - - rule ( KEVMBroadcastTest . method-deployOther ( ) => #abiCallData ( "deployOther" , .TypedArgs ) ) - - - rule ( KEVMBroadcastTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMBroadcastTest . method-setUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( KEVMBroadcastTest . method-testDeploy ( ) => #abiCallData ( "testDeploy" , .TypedArgs ) ) - - - rule ( KEVMBroadcastTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "deployNoArgs()" ) => 1902058844 ) - - - rule ( selector ( "deployOther()" ) => 4254441026 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testDeploy()" ) => 894117685 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Constants-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMConstantsContract - - syntax KEVMConstantsContract ::= "KEVMConstants" [symbol(), klabel(contract_Constants)] - - - -endmodule - -module Contract-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMContractContract - - syntax KEVMContractContract ::= "KEVMContract" [symbol(), klabel(contract_Contract)] - - - -endmodule - -module ContractTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMContractTestContract - - syntax KEVMContractTestContract ::= "KEVMContractTest" [symbol(), klabel(contract_ContractTest)] - - - - syntax Field ::= ContractTestField - - syntax ContractTestField ::= "IS_TEST" [symbol(), klabel(field_ContractTest_IS_TEST)] - - syntax ContractTestField ::= "_failed" [symbol(), klabel(field_ContractTest__failed)] - - syntax ContractTestField ::= "IS_SCRIPT" [symbol(), klabel(field_ContractTest_IS_SCRIPT)] - - syntax ContractTestField ::= "stdstore" [symbol(), klabel(field_ContractTest_stdstore)] - - rule ( #loc ( KEVMContractTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMContractTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMContractTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMContractTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMContractTestContract "." KEVMContractTestMethod [function(), symbol(), klabel(method_ContractTest)] - - syntax KEVMContractTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_ContractTest_method-IS_SCRIPT_)] - - syntax KEVMContractTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_ContractTest_method-IS_TEST_)] - - syntax KEVMContractTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_ContractTest_method-failed_)] - - syntax KEVMContractTestMethod ::= "method-testExample" "(" ")" [symbol(), klabel(method_ContractTest_method-testExample_)] - - syntax KEVMContractTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_ContractTest_method-vm_)] - - rule ( KEVMContractTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMContractTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMContractTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMContractTest . method-testExample ( ) => #abiCallData ( "testExample" , .TypedArgs ) ) - - - rule ( KEVMContractTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testExample()" ) => 1062881834 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module ContractBTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMContractBTestContract - - syntax KEVMContractBTestContract ::= "KEVMContractBTest" [symbol(), klabel(contract_ContractBTest)] - - - - syntax Field ::= ContractBTestField - - syntax ContractBTestField ::= "IS_TEST" [symbol(), klabel(field_ContractBTest_IS_TEST)] - - syntax ContractBTestField ::= "_failed" [symbol(), klabel(field_ContractBTest__failed)] - - syntax ContractBTestField ::= "IS_SCRIPT" [symbol(), klabel(field_ContractBTest_IS_SCRIPT)] - - syntax ContractBTestField ::= "stdstore" [symbol(), klabel(field_ContractBTest_stdstore)] - - syntax ContractBTestField ::= "testNumber" [symbol(), klabel(field_ContractBTest_testNumber)] - - rule ( #loc ( KEVMContractBTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMContractBTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMContractBTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMContractBTest . stdstore ) => 1 ) - - - rule ( #loc ( KEVMContractBTest . testNumber ) => 8 ) - - - syntax Bytes ::= KEVMContractBTestContract "." KEVMContractBTestMethod [function(), symbol(), klabel(method_ContractBTest)] - - syntax KEVMContractBTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_ContractBTest_method-IS_SCRIPT_)] - - syntax KEVMContractBTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_ContractBTest_method-IS_TEST_)] - - syntax KEVMContractBTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_ContractBTest_method-failed_)] - - syntax KEVMContractBTestMethod ::= "method-setUp" "(" ")" [symbol(), klabel(method_ContractBTest_method-setUp_)] - - syntax KEVMContractBTestMethod ::= "method-testCannotSubtract43" "(" ")" [symbol(), klabel(method_ContractBTest_method-testCannotSubtract43_)] - - syntax KEVMContractBTestMethod ::= "method-testFailSubtract43" "(" ")" [symbol(), klabel(method_ContractBTest_method-testFailSubtract43_)] - - syntax KEVMContractBTestMethod ::= "method-testNumberIs42" "(" ")" [symbol(), klabel(method_ContractBTest_method-testNumberIs42_)] - - syntax KEVMContractBTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_ContractBTest_method-vm_)] - - rule ( KEVMContractBTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMContractBTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMContractBTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMContractBTest . method-setUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( KEVMContractBTest . method-testCannotSubtract43 ( ) => #abiCallData ( "testCannotSubtract43" , .TypedArgs ) ) - - - rule ( KEVMContractBTest . method-testFailSubtract43 ( ) => #abiCallData ( "testFailSubtract43" , .TypedArgs ) ) - - - rule ( KEVMContractBTest . method-testNumberIs42 ( ) => #abiCallData ( "testNumberIs42" , .TypedArgs ) ) - - - rule ( KEVMContractBTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testCannotSubtract43()" ) => 932201548 ) - - - rule ( selector ( "testFailSubtract43()" ) => 1021814620 ) - - - rule ( selector ( "testNumberIs42()" ) => 795542700 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Counter-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMCounterContract - - syntax KEVMCounterContract ::= "KEVMCounter" [symbol(), klabel(contract_Counter)] - - - - syntax Field ::= CounterField - - syntax CounterField ::= "number" [symbol(), klabel(field_Counter_number)] - - rule ( #loc ( KEVMCounter . number ) => 0 ) - - - syntax Bytes ::= KEVMCounterContract "." KEVMCounterMethod [function(), symbol(), klabel(method_Counter)] - - syntax KEVMCounterMethod ::= "method-increment" "(" ")" [symbol(), klabel(method_Counter_method-increment_)] - - syntax KEVMCounterMethod ::= "method-number" "(" ")" [symbol(), klabel(method_Counter_method-number_)] - - syntax KEVMCounterMethod ::= "method-setNumber" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Counter_method-setNumber_uint256)] - - rule ( KEVMCounter . method-increment ( ) => #abiCallData ( "increment" , .TypedArgs ) ) - - - rule ( KEVMCounter . method-number ( ) => #abiCallData ( "number" , .TypedArgs ) ) - - - rule ( KEVMCounter . method-setNumber ( V0_newNumber : uint256 ) => #abiCallData ( "setNumber" , #uint256 ( V0_newNumber ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_newNumber ) - - - rule ( selector ( "increment()" ) => 3500007562 ) - - - rule ( selector ( "number()" ) => 2206332298 ) - - - rule ( selector ( "setNumber(uint256)" ) => 1068876235 ) - - -endmodule - -module CounterTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMCounterTestContract - - syntax KEVMCounterTestContract ::= "KEVMCounterTest" [symbol(), klabel(contract_CounterTest)] - - - - syntax Field ::= CounterTestField - - syntax CounterTestField ::= "IS_TEST" [symbol(), klabel(field_CounterTest_IS_TEST)] - - syntax CounterTestField ::= "_failed" [symbol(), klabel(field_CounterTest__failed)] - - syntax CounterTestField ::= "IS_SCRIPT" [symbol(), klabel(field_CounterTest_IS_SCRIPT)] - - syntax CounterTestField ::= "stdstore" [symbol(), klabel(field_CounterTest_stdstore)] - - syntax CounterTestField ::= "counter" [symbol(), klabel(field_CounterTest_counter)] - - rule ( #loc ( KEVMCounterTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMCounterTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMCounterTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMCounterTest . stdstore ) => 1 ) - - - rule ( #loc ( KEVMCounterTest . counter ) => 8 ) - - - syntax Bytes ::= KEVMCounterTestContract "." KEVMCounterTestMethod [function(), symbol(), klabel(method_CounterTest)] - - syntax KEVMCounterTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_CounterTest_method-IS_SCRIPT_)] - - syntax KEVMCounterTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_CounterTest_method-IS_TEST_)] - - syntax KEVMCounterTestMethod ::= "method-counter" "(" ")" [symbol(), klabel(method_CounterTest_method-counter_)] - - syntax KEVMCounterTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_CounterTest_method-failed_)] - - syntax KEVMCounterTestMethod ::= "method-kevm" "(" ")" [symbol(), klabel(method_CounterTest_method-kevm_)] - - syntax KEVMCounterTestMethod ::= "method-testIncrement" "(" ")" [symbol(), klabel(method_CounterTest_method-testIncrement_)] - - syntax KEVMCounterTestMethod ::= "method-testSetNumber" "(" Int ":" "uint256" ")" [symbol(), klabel(method_CounterTest_method-testSetNumber_uint256)] - - syntax KEVMCounterTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_CounterTest_method-vm_)] - - rule ( KEVMCounterTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMCounterTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMCounterTest . method-counter ( ) => #abiCallData ( "counter" , .TypedArgs ) ) - - - rule ( KEVMCounterTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMCounterTest . method-kevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( KEVMCounterTest . method-testIncrement ( ) => #abiCallData ( "testIncrement" , .TypedArgs ) ) - - - rule ( KEVMCounterTest . method-testSetNumber ( V0_x : uint256 ) => #abiCallData ( "testSetNumber" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMCounterTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "counter()" ) => 1639719450 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - - rule ( selector ( "testIncrement()" ) => 3105072586 ) - - - rule ( selector ( "testSetNumber(uint256)" ) => 1895400894 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module DynamicTypes-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMDynamicTypesContract - - syntax KEVMDynamicTypesContract ::= "KEVMDynamicTypes" [symbol(), klabel(contract_DynamicTypes)] - - - - syntax Field ::= DynamicTypesField - - syntax DynamicTypesField ::= "IS_TEST" [symbol(), klabel(field_DynamicTypes_IS_TEST)] - - syntax DynamicTypesField ::= "_failed" [symbol(), klabel(field_DynamicTypes__failed)] - - syntax DynamicTypesField ::= "IS_SCRIPT" [symbol(), klabel(field_DynamicTypes_IS_SCRIPT)] - - syntax DynamicTypesField ::= "stdstore" [symbol(), klabel(field_DynamicTypes_stdstore)] - - rule ( #loc ( KEVMDynamicTypes . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMDynamicTypes . _failed ) => 0 ) - - - rule ( #loc ( KEVMDynamicTypes . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMDynamicTypes . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMDynamicTypesContract "." KEVMDynamicTypesMethod [function(), symbol(), klabel(method_DynamicTypes)] - - syntax KEVMDynamicTypesMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_DynamicTypes_method-IS_SCRIPT_)] - - syntax KEVMDynamicTypesMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_DynamicTypes_method-IS_TEST_)] - - syntax KEVMDynamicTypesMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_DynamicTypes_method-failed_)] - - syntax KEVMDynamicTypesMethod ::= "method-test_dynamic_byte_read" "(" Bytes ":" "bytes" "," Int ":" "uint256" ")" [symbol(), klabel(method_DynamicTypes_method-test_dynamic_byte_read_bytes_uint256)] - - syntax KEVMDynamicTypesMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_DynamicTypes_method-vm_)] - - rule ( KEVMDynamicTypes . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMDynamicTypes . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMDynamicTypes . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMDynamicTypes . method-test_dynamic_byte_read ( V0_data : bytes , V1_offset : uint256 ) => #abiCallData ( "test_dynamic_byte_read" , #bytes ( V0_data ) , #uint256 ( V1_offset ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 128 , lengthBytes ( V0_data ) ) - andBool ( #rangeUInt ( 256 , V1_offset ) - )) - - - rule ( KEVMDynamicTypes . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "test_dynamic_byte_read(bytes,uint256)" ) => 4003228173 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module ExpectEmit-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMExpectEmitContract - - syntax KEVMExpectEmitContract ::= "KEVMExpectEmit" [symbol(), klabel(contract_ExpectEmit)] - - - - syntax Bytes ::= KEVMExpectEmitContract "." KEVMExpectEmitMethod [function(), symbol(), klabel(method_ExpectEmit)] - - syntax KEVMExpectEmitMethod ::= "method-t" "(" ")" [symbol(), klabel(method_ExpectEmit_method-t_)] - - rule ( KEVMExpectEmit . method-t ( ) => #abiCallData ( "t" , .TypedArgs ) ) - - - rule ( selector ( "t()" ) => 2463158611 ) - - -endmodule - -module EmitContractTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMEmitContractTestContract - - syntax KEVMEmitContractTestContract ::= "KEVMEmitContractTest" [symbol(), klabel(contract_EmitContractTest)] - - - - syntax Field ::= EmitContractTestField - - syntax EmitContractTestField ::= "IS_TEST" [symbol(), klabel(field_EmitContractTest_IS_TEST)] - - syntax EmitContractTestField ::= "_failed" [symbol(), klabel(field_EmitContractTest__failed)] - - syntax EmitContractTestField ::= "IS_SCRIPT" [symbol(), klabel(field_EmitContractTest_IS_SCRIPT)] - - syntax EmitContractTestField ::= "stdstore" [symbol(), klabel(field_EmitContractTest_stdstore)] - - rule ( #loc ( KEVMEmitContractTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMEmitContractTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMEmitContractTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMEmitContractTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMEmitContractTestContract "." KEVMEmitContractTestMethod [function(), symbol(), klabel(method_EmitContractTest)] - - syntax KEVMEmitContractTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_EmitContractTest_method-IS_SCRIPT_)] - - syntax KEVMEmitContractTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_EmitContractTest_method-IS_TEST_)] - - syntax KEVMEmitContractTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_EmitContractTest_method-failed_)] - - syntax KEVMEmitContractTestMethod ::= "method-testExpectEmit" "(" ")" [symbol(), klabel(method_EmitContractTest_method-testExpectEmit_)] - - syntax KEVMEmitContractTestMethod ::= "method-testExpectEmitCheckEmitter" "(" ")" [symbol(), klabel(method_EmitContractTest_method-testExpectEmitCheckEmitter_)] - - syntax KEVMEmitContractTestMethod ::= "method-testExpectEmitDoNotCheckData" "(" ")" [symbol(), klabel(method_EmitContractTest_method-testExpectEmitDoNotCheckData_)] - - syntax KEVMEmitContractTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_EmitContractTest_method-vm_)] - - rule ( KEVMEmitContractTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMEmitContractTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMEmitContractTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMEmitContractTest . method-testExpectEmit ( ) => #abiCallData ( "testExpectEmit" , .TypedArgs ) ) - - - rule ( KEVMEmitContractTest . method-testExpectEmitCheckEmitter ( ) => #abiCallData ( "testExpectEmitCheckEmitter" , .TypedArgs ) ) - - - rule ( KEVMEmitContractTest . method-testExpectEmitDoNotCheckData ( ) => #abiCallData ( "testExpectEmitDoNotCheckData" , .TypedArgs ) ) - - - rule ( KEVMEmitContractTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testExpectEmit()" ) => 2385562937 ) - - - rule ( selector ( "testExpectEmitCheckEmitter()" ) => 3822672185 ) - - - rule ( selector ( "testExpectEmitDoNotCheckData()" ) => 4244930061 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module EnvTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMEnvTestContract - - syntax KEVMEnvTestContract ::= "KEVMEnvTest" [symbol(), klabel(contract_EnvTest)] - - - - syntax Field ::= EnvTestField - - syntax EnvTestField ::= "IS_TEST" [symbol(), klabel(field_EnvTest_IS_TEST)] - - syntax EnvTestField ::= "_failed" [symbol(), klabel(field_EnvTest__failed)] - - syntax EnvTestField ::= "IS_SCRIPT" [symbol(), klabel(field_EnvTest_IS_SCRIPT)] - - syntax EnvTestField ::= "stdstore" [symbol(), klabel(field_EnvTest_stdstore)] - - rule ( #loc ( KEVMEnvTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMEnvTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMEnvTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMEnvTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMEnvTestContract "." KEVMEnvTestMethod [function(), symbol(), klabel(method_EnvTest)] - - syntax KEVMEnvTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_EnvTest_method-IS_SCRIPT_)] - - syntax KEVMEnvTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_EnvTest_method-IS_TEST_)] - - syntax KEVMEnvTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_EnvTest_method-failed_)] - - syntax KEVMEnvTestMethod ::= "method-testEnvAddress" "(" ")" [symbol(), klabel(method_EnvTest_method-testEnvAddress_)] - - syntax KEVMEnvTestMethod ::= "method-testEnvAddresseArray" "(" ")" [symbol(), klabel(method_EnvTest_method-testEnvAddresseArray_)] - - syntax KEVMEnvTestMethod ::= "method-testEnvBool" "(" ")" [symbol(), klabel(method_EnvTest_method-testEnvBool_)] - - syntax KEVMEnvTestMethod ::= "method-testEnvBoolArray" "(" ")" [symbol(), klabel(method_EnvTest_method-testEnvBoolArray_)] - - syntax KEVMEnvTestMethod ::= "method-testEnvBytes" "(" ")" [symbol(), klabel(method_EnvTest_method-testEnvBytes_)] - - syntax KEVMEnvTestMethod ::= "method-testEnvBytes32" "(" ")" [symbol(), klabel(method_EnvTest_method-testEnvBytes32_)] - - syntax KEVMEnvTestMethod ::= "method-testEnvBytes32Array" "(" ")" [symbol(), klabel(method_EnvTest_method-testEnvBytes32Array_)] - - syntax KEVMEnvTestMethod ::= "method-testEnvBytesArray" "(" ")" [symbol(), klabel(method_EnvTest_method-testEnvBytesArray_)] - - syntax KEVMEnvTestMethod ::= "method-testEnvInt" "(" ")" [symbol(), klabel(method_EnvTest_method-testEnvInt_)] - - syntax KEVMEnvTestMethod ::= "method-testEnvIntArray" "(" ")" [symbol(), klabel(method_EnvTest_method-testEnvIntArray_)] - - syntax KEVMEnvTestMethod ::= "method-testEnvString" "(" ")" [symbol(), klabel(method_EnvTest_method-testEnvString_)] - - syntax KEVMEnvTestMethod ::= "method-testEnvStringArray" "(" ")" [symbol(), klabel(method_EnvTest_method-testEnvStringArray_)] - - syntax KEVMEnvTestMethod ::= "method-testEnvUInt" "(" ")" [symbol(), klabel(method_EnvTest_method-testEnvUInt_)] - - syntax KEVMEnvTestMethod ::= "method-testEnvUIntArray" "(" ")" [symbol(), klabel(method_EnvTest_method-testEnvUIntArray_)] - - syntax KEVMEnvTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_EnvTest_method-vm_)] - - rule ( KEVMEnvTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-testEnvAddress ( ) => #abiCallData ( "testEnvAddress" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-testEnvAddresseArray ( ) => #abiCallData ( "testEnvAddresseArray" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-testEnvBool ( ) => #abiCallData ( "testEnvBool" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-testEnvBoolArray ( ) => #abiCallData ( "testEnvBoolArray" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-testEnvBytes ( ) => #abiCallData ( "testEnvBytes" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-testEnvBytes32 ( ) => #abiCallData ( "testEnvBytes32" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-testEnvBytes32Array ( ) => #abiCallData ( "testEnvBytes32Array" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-testEnvBytesArray ( ) => #abiCallData ( "testEnvBytesArray" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-testEnvInt ( ) => #abiCallData ( "testEnvInt" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-testEnvIntArray ( ) => #abiCallData ( "testEnvIntArray" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-testEnvString ( ) => #abiCallData ( "testEnvString" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-testEnvStringArray ( ) => #abiCallData ( "testEnvStringArray" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-testEnvUInt ( ) => #abiCallData ( "testEnvUInt" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-testEnvUIntArray ( ) => #abiCallData ( "testEnvUIntArray" , .TypedArgs ) ) - - - rule ( KEVMEnvTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testEnvAddress()" ) => 2862857531 ) - - - rule ( selector ( "testEnvAddresseArray()" ) => 3294476741 ) - - - rule ( selector ( "testEnvBool()" ) => 894343624 ) - - - rule ( selector ( "testEnvBoolArray()" ) => 2095834153 ) - - - rule ( selector ( "testEnvBytes()" ) => 1439135834 ) - - - rule ( selector ( "testEnvBytes32()" ) => 1818390676 ) - - - rule ( selector ( "testEnvBytes32Array()" ) => 1427447379 ) - - - rule ( selector ( "testEnvBytesArray()" ) => 2593538909 ) - - - rule ( selector ( "testEnvInt()" ) => 446472630 ) - - - rule ( selector ( "testEnvIntArray()" ) => 994678527 ) - - - rule ( selector ( "testEnvString()" ) => 1097637738 ) - - - rule ( selector ( "testEnvStringArray()" ) => 3587215751 ) - - - rule ( selector ( "testEnvUInt()" ) => 2066287170 ) - - - rule ( selector ( "testEnvUIntArray()" ) => 551796351 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Dummy-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMDummyContract - - syntax KEVMDummyContract ::= "KEVMDummy" [symbol(), klabel(contract_Dummy)] - - - - syntax Bytes ::= KEVMDummyContract "." KEVMDummyMethod [function(), symbol(), klabel(method_Dummy)] - - syntax KEVMDummyMethod ::= "method-numberA" "(" ")" [symbol(), klabel(method_Dummy_method-numberA_)] - - rule ( KEVMDummy . method-numberA ( ) => #abiCallData ( "numberA" , .TypedArgs ) ) - - - rule ( selector ( "numberA()" ) => 2571869527 ) - - -endmodule - -module ExpectCallTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMExpectCallTestContract - - syntax KEVMExpectCallTestContract ::= "KEVMExpectCallTest" [symbol(), klabel(contract_ExpectCallTest)] - - - - syntax Field ::= ExpectCallTestField - - syntax ExpectCallTestField ::= "IS_TEST" [symbol(), klabel(field_ExpectCallTest_IS_TEST)] - - syntax ExpectCallTestField ::= "_failed" [symbol(), klabel(field_ExpectCallTest__failed)] - - syntax ExpectCallTestField ::= "IS_SCRIPT" [symbol(), klabel(field_ExpectCallTest_IS_SCRIPT)] - - syntax ExpectCallTestField ::= "stdstore" [symbol(), klabel(field_ExpectCallTest_stdstore)] - - rule ( #loc ( KEVMExpectCallTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMExpectCallTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMExpectCallTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMExpectCallTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMExpectCallTestContract "." KEVMExpectCallTestMethod [function(), symbol(), klabel(method_ExpectCallTest)] - - syntax KEVMExpectCallTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_ExpectCallTest_method-IS_SCRIPT_)] - - syntax KEVMExpectCallTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_ExpectCallTest_method-IS_TEST_)] - - syntax KEVMExpectCallTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_ExpectCallTest_method-failed_)] - - syntax KEVMExpectCallTestMethod ::= "method-kevm" "(" ")" [symbol(), klabel(method_ExpectCallTest_method-kevm_)] - - syntax KEVMExpectCallTestMethod ::= "method-testExpectRegularCall" "(" ")" [symbol(), klabel(method_ExpectCallTest_method-testExpectRegularCall_)] - - syntax KEVMExpectCallTestMethod ::= "method-testExpectStaticCall" "(" ")" [symbol(), klabel(method_ExpectCallTest_method-testExpectStaticCall_)] - - syntax KEVMExpectCallTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_ExpectCallTest_method-vm_)] - - rule ( KEVMExpectCallTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMExpectCallTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMExpectCallTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMExpectCallTest . method-kevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( KEVMExpectCallTest . method-testExpectRegularCall ( ) => #abiCallData ( "testExpectRegularCall" , .TypedArgs ) ) - - - rule ( KEVMExpectCallTest . method-testExpectStaticCall ( ) => #abiCallData ( "testExpectStaticCall" , .TypedArgs ) ) - - - rule ( KEVMExpectCallTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - - rule ( selector ( "testExpectRegularCall()" ) => 676731872 ) - - - rule ( selector ( "testExpectStaticCall()" ) => 3219733999 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module DepthReverter-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMDepthReverterContract - - syntax KEVMDepthReverterContract ::= "KEVMDepthReverter" [symbol(), klabel(contract_DepthReverter)] - - - - syntax Field ::= DepthReverterField - - syntax DepthReverterField ::= "reverter" [symbol(), klabel(field_DepthReverter_reverter)] - - rule ( #loc ( KEVMDepthReverter . reverter ) => 0 ) - - - syntax Bytes ::= KEVMDepthReverterContract "." KEVMDepthReverterMethod [function(), symbol(), klabel(method_DepthReverter)] - - syntax KEVMDepthReverterMethod ::= "method-revertAtNextDepth" "(" ")" [symbol(), klabel(method_DepthReverter_method-revertAtNextDepth_)] - - rule ( KEVMDepthReverter . method-revertAtNextDepth ( ) => #abiCallData ( "revertAtNextDepth" , .TypedArgs ) ) - - - rule ( selector ( "revertAtNextDepth()" ) => 332278727 ) - - -endmodule - -module ExpectRevertTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMExpectRevertTestContract - - syntax KEVMExpectRevertTestContract ::= "KEVMExpectRevertTest" [symbol(), klabel(contract_ExpectRevertTest)] - - - - syntax Field ::= ExpectRevertTestField - - syntax ExpectRevertTestField ::= "IS_TEST" [symbol(), klabel(field_ExpectRevertTest_IS_TEST)] - - syntax ExpectRevertTestField ::= "_failed" [symbol(), klabel(field_ExpectRevertTest__failed)] - - syntax ExpectRevertTestField ::= "IS_SCRIPT" [symbol(), klabel(field_ExpectRevertTest_IS_SCRIPT)] - - syntax ExpectRevertTestField ::= "stdstore" [symbol(), klabel(field_ExpectRevertTest_stdstore)] - - rule ( #loc ( KEVMExpectRevertTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMExpectRevertTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMExpectRevertTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMExpectRevertTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMExpectRevertTestContract "." KEVMExpectRevertTestMethod [function(), symbol(), klabel(method_ExpectRevertTest)] - - syntax KEVMExpectRevertTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_ExpectRevertTest_method-IS_SCRIPT_)] - - syntax KEVMExpectRevertTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_ExpectRevertTest_method-IS_TEST_)] - - syntax KEVMExpectRevertTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_ExpectRevertTest_method-failed_)] - - syntax KEVMExpectRevertTestMethod ::= "method-testFail_ExpectRevert_failAndSuccess" "(" ")" [symbol(), klabel(method_ExpectRevertTest_method-testFail_ExpectRevert_failAndSuccess_)] - - syntax KEVMExpectRevertTestMethod ::= "method-testFail_expectRevert_bytes4" "(" ")" [symbol(), klabel(method_ExpectRevertTest_method-testFail_expectRevert_bytes4_)] - - syntax KEVMExpectRevertTestMethod ::= "method-testFail_expectRevert_empty" "(" ")" [symbol(), klabel(method_ExpectRevertTest_method-testFail_expectRevert_empty_)] - - syntax KEVMExpectRevertTestMethod ::= "method-testFail_expectRevert_false" "(" ")" [symbol(), klabel(method_ExpectRevertTest_method-testFail_expectRevert_false_)] - - syntax KEVMExpectRevertTestMethod ::= "method-testFail_expectRevert_multipleReverts" "(" ")" [symbol(), klabel(method_ExpectRevertTest_method-testFail_expectRevert_multipleReverts_)] - - syntax KEVMExpectRevertTestMethod ::= "method-test_ExpectRevert_increasedDepth" "(" ")" [symbol(), klabel(method_ExpectRevertTest_method-test_ExpectRevert_increasedDepth_)] - - syntax KEVMExpectRevertTestMethod ::= "method-test_expectRevert_bytes4" "(" ")" [symbol(), klabel(method_ExpectRevertTest_method-test_expectRevert_bytes4_)] - - syntax KEVMExpectRevertTestMethod ::= "method-test_expectRevert_encodedSymbolic" "(" Int ":" "address" ")" [symbol(), klabel(method_ExpectRevertTest_method-test_expectRevert_encodedSymbolic_address)] - - syntax KEVMExpectRevertTestMethod ::= "method-test_expectRevert_internalCall" "(" ")" [symbol(), klabel(method_ExpectRevertTest_method-test_expectRevert_internalCall_)] - - syntax KEVMExpectRevertTestMethod ::= "method-test_expectRevert_message" "(" ")" [symbol(), klabel(method_ExpectRevertTest_method-test_expectRevert_message_)] - - syntax KEVMExpectRevertTestMethod ::= "method-test_expectRevert_returnValue" "(" ")" [symbol(), klabel(method_ExpectRevertTest_method-test_expectRevert_returnValue_)] - - syntax KEVMExpectRevertTestMethod ::= "method-test_expectRevert_true" "(" ")" [symbol(), klabel(method_ExpectRevertTest_method-test_expectRevert_true_)] - - syntax KEVMExpectRevertTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_ExpectRevertTest_method-vm_)] - - rule ( KEVMExpectRevertTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMExpectRevertTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMExpectRevertTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMExpectRevertTest . method-testFail_ExpectRevert_failAndSuccess ( ) => #abiCallData ( "testFail_ExpectRevert_failAndSuccess" , .TypedArgs ) ) - - - rule ( KEVMExpectRevertTest . method-testFail_expectRevert_bytes4 ( ) => #abiCallData ( "testFail_expectRevert_bytes4" , .TypedArgs ) ) - - - rule ( KEVMExpectRevertTest . method-testFail_expectRevert_empty ( ) => #abiCallData ( "testFail_expectRevert_empty" , .TypedArgs ) ) - - - rule ( KEVMExpectRevertTest . method-testFail_expectRevert_false ( ) => #abiCallData ( "testFail_expectRevert_false" , .TypedArgs ) ) - - - rule ( KEVMExpectRevertTest . method-testFail_expectRevert_multipleReverts ( ) => #abiCallData ( "testFail_expectRevert_multipleReverts" , .TypedArgs ) ) - - - rule ( KEVMExpectRevertTest . method-test_ExpectRevert_increasedDepth ( ) => #abiCallData ( "test_ExpectRevert_increasedDepth" , .TypedArgs ) ) - - - rule ( KEVMExpectRevertTest . method-test_expectRevert_bytes4 ( ) => #abiCallData ( "test_expectRevert_bytes4" , .TypedArgs ) ) - - - rule ( KEVMExpectRevertTest . method-test_expectRevert_encodedSymbolic ( V0_controller : address ) => #abiCallData ( "test_expectRevert_encodedSymbolic" , #address ( V0_controller ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_controller ) - - - rule ( KEVMExpectRevertTest . method-test_expectRevert_internalCall ( ) => #abiCallData ( "test_expectRevert_internalCall" , .TypedArgs ) ) - - - rule ( KEVMExpectRevertTest . method-test_expectRevert_message ( ) => #abiCallData ( "test_expectRevert_message" , .TypedArgs ) ) - - - rule ( KEVMExpectRevertTest . method-test_expectRevert_returnValue ( ) => #abiCallData ( "test_expectRevert_returnValue" , .TypedArgs ) ) - - - rule ( KEVMExpectRevertTest . method-test_expectRevert_true ( ) => #abiCallData ( "test_expectRevert_true" , .TypedArgs ) ) - - - rule ( KEVMExpectRevertTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testFail_ExpectRevert_failAndSuccess()" ) => 2386222785 ) - - - rule ( selector ( "testFail_expectRevert_bytes4()" ) => 3540765930 ) - - - rule ( selector ( "testFail_expectRevert_empty()" ) => 3691097669 ) - - - rule ( selector ( "testFail_expectRevert_false()" ) => 2152588325 ) - - - rule ( selector ( "testFail_expectRevert_multipleReverts()" ) => 2539873268 ) - - - rule ( selector ( "test_ExpectRevert_increasedDepth()" ) => 910856553 ) - - - rule ( selector ( "test_expectRevert_bytes4()" ) => 1300765909 ) - - - rule ( selector ( "test_expectRevert_encodedSymbolic(address)" ) => 27292786 ) - - - rule ( selector ( "test_expectRevert_internalCall()" ) => 1766536967 ) - - - rule ( selector ( "test_expectRevert_message()" ) => 3706733127 ) - - - rule ( selector ( "test_expectRevert_returnValue()" ) => 4193569282 ) - - - rule ( selector ( "test_expectRevert_true()" ) => 2931127071 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Reverter-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMReverterContract - - syntax KEVMReverterContract ::= "KEVMReverter" [symbol(), klabel(contract_Reverter)] - - - - syntax Bytes ::= KEVMReverterContract "." KEVMReverterMethod [function(), symbol(), klabel(method_Reverter)] - - syntax KEVMReverterMethod ::= "method-noRevert" "(" ")" [symbol(), klabel(method_Reverter_method-noRevert_)] - - syntax KEVMReverterMethod ::= "method-revertWithReason" "(" String ":" "string" ")" [symbol(), klabel(method_Reverter_method-revertWithReason_string)] - - syntax KEVMReverterMethod ::= "method-revertWithoutReason" "(" ")" [symbol(), klabel(method_Reverter_method-revertWithoutReason_)] - - rule ( KEVMReverter . method-noRevert ( ) => #abiCallData ( "noRevert" , .TypedArgs ) ) - - - rule ( KEVMReverter . method-revertWithReason ( V0__a : string ) => #abiCallData ( "revertWithReason" , #string ( V0__a ) , .TypedArgs ) ) - - - rule ( KEVMReverter . method-revertWithoutReason ( ) => #abiCallData ( "revertWithoutReason" , .TypedArgs ) ) - - - rule ( selector ( "noRevert()" ) => 3072618433 ) - - - rule ( selector ( "revertWithReason(string)" ) => 4154655617 ) - - - rule ( selector ( "revertWithoutReason()" ) => 1097275021 ) - - -endmodule - -module ReverterWithReturn-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMReverterWithReturnContract - - syntax KEVMReverterWithReturnContract ::= "KEVMReverterWithReturn" [symbol(), klabel(contract_ReverterWithReturn)] - - - - syntax Bytes ::= KEVMReverterWithReturnContract "." KEVMReverterWithReturnMethod [function(), symbol(), klabel(method_ReverterWithReturn)] - - syntax KEVMReverterWithReturnMethod ::= "method-returnBytesUnless" "(" Int ":" "bool" ")" [symbol(), klabel(method_ReverterWithReturn_method-returnBytesUnless_bool)] - - syntax KEVMReverterWithReturnMethod ::= "method-returnTupleUnless" "(" Int ":" "bool" ")" [symbol(), klabel(method_ReverterWithReturn_method-returnTupleUnless_bool)] - - rule ( KEVMReverterWithReturn . method-returnBytesUnless ( V0_revertInstead : bool ) => #abiCallData ( "returnBytesUnless" , #bool ( V0_revertInstead ) , .TypedArgs ) ) - ensures #rangeBool ( V0_revertInstead ) - - - rule ( KEVMReverterWithReturn . method-returnTupleUnless ( V0_revertInstead : bool ) => #abiCallData ( "returnTupleUnless" , #bool ( V0_revertInstead ) , .TypedArgs ) ) - ensures #rangeBool ( V0_revertInstead ) - - - rule ( selector ( "returnBytesUnless(bool)" ) => 3511402276 ) - - - rule ( selector ( "returnTupleUnless(bool)" ) => 3931056962 ) - - -endmodule - -module FfiTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMFfiTestContract - - syntax KEVMFfiTestContract ::= "KEVMFfiTest" [symbol(), klabel(contract_FfiTest)] - - - - syntax Field ::= FfiTestField - - syntax FfiTestField ::= "IS_TEST" [symbol(), klabel(field_FfiTest_IS_TEST)] - - syntax FfiTestField ::= "_failed" [symbol(), klabel(field_FfiTest__failed)] - - syntax FfiTestField ::= "IS_SCRIPT" [symbol(), klabel(field_FfiTest_IS_SCRIPT)] - - syntax FfiTestField ::= "stdstore" [symbol(), klabel(field_FfiTest_stdstore)] - - rule ( #loc ( KEVMFfiTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMFfiTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMFfiTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMFfiTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMFfiTestContract "." KEVMFfiTestMethod [function(), symbol(), klabel(method_FfiTest)] - - syntax KEVMFfiTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_FfiTest_method-IS_SCRIPT_)] - - syntax KEVMFfiTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_FfiTest_method-IS_TEST_)] - - syntax KEVMFfiTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_FfiTest_method-failed_)] - - syntax KEVMFfiTestMethod ::= "method-setUp" "(" ")" [symbol(), klabel(method_FfiTest_method-setUp_)] - - syntax KEVMFfiTestMethod ::= "method-testFFIFOO" "(" ")" [symbol(), klabel(method_FfiTest_method-testFFIFOO_)] - - syntax KEVMFfiTestMethod ::= "method-testFFIScript" "(" ")" [symbol(), klabel(method_FfiTest_method-testFFIScript_)] - - syntax KEVMFfiTestMethod ::= "method-testFFIScript2" "(" ")" [symbol(), klabel(method_FfiTest_method-testFFIScript2_)] - - syntax KEVMFfiTestMethod ::= "method-testffi" "(" ")" [symbol(), klabel(method_FfiTest_method-testffi_)] - - syntax KEVMFfiTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_FfiTest_method-vm_)] - - rule ( KEVMFfiTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMFfiTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMFfiTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMFfiTest . method-setUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( KEVMFfiTest . method-testFFIFOO ( ) => #abiCallData ( "testFFIFOO" , .TypedArgs ) ) - - - rule ( KEVMFfiTest . method-testFFIScript ( ) => #abiCallData ( "testFFIScript" , .TypedArgs ) ) - - - rule ( KEVMFfiTest . method-testFFIScript2 ( ) => #abiCallData ( "testFFIScript2" , .TypedArgs ) ) - - - rule ( KEVMFfiTest . method-testffi ( ) => #abiCallData ( "testffi" , .TypedArgs ) ) - - - rule ( KEVMFfiTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testFFIFOO()" ) => 2415994822 ) - - - rule ( selector ( "testFFIScript()" ) => 2734086837 ) - - - rule ( selector ( "testFFIScript2()" ) => 4125794598 ) - - - rule ( selector ( "testffi()" ) => 4068116 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module FilesTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMFilesTestContract - - syntax KEVMFilesTestContract ::= "KEVMFilesTest" [symbol(), klabel(contract_FilesTest)] - - - - syntax Field ::= FilesTestField - - syntax FilesTestField ::= "IS_TEST" [symbol(), klabel(field_FilesTest_IS_TEST)] - - syntax FilesTestField ::= "_failed" [symbol(), klabel(field_FilesTest__failed)] - - syntax FilesTestField ::= "IS_SCRIPT" [symbol(), klabel(field_FilesTest_IS_SCRIPT)] - - syntax FilesTestField ::= "stdstore" [symbol(), klabel(field_FilesTest_stdstore)] - - rule ( #loc ( KEVMFilesTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMFilesTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMFilesTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMFilesTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMFilesTestContract "." KEVMFilesTestMethod [function(), symbol(), klabel(method_FilesTest)] - - syntax KEVMFilesTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_FilesTest_method-IS_SCRIPT_)] - - syntax KEVMFilesTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_FilesTest_method-IS_TEST_)] - - syntax KEVMFilesTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_FilesTest_method-failed_)] - - syntax KEVMFilesTestMethod ::= "method-testFailRemoveFile" "(" ")" [symbol(), klabel(method_FilesTest_method-testFailRemoveFile_)] - - syntax KEVMFilesTestMethod ::= "method-testReadWriteFile" "(" ")" [symbol(), klabel(method_FilesTest_method-testReadWriteFile_)] - - syntax KEVMFilesTestMethod ::= "method-testReadWriteLine" "(" ")" [symbol(), klabel(method_FilesTest_method-testReadWriteLine_)] - - syntax KEVMFilesTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_FilesTest_method-vm_)] - - rule ( KEVMFilesTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMFilesTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMFilesTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMFilesTest . method-testFailRemoveFile ( ) => #abiCallData ( "testFailRemoveFile" , .TypedArgs ) ) - - - rule ( KEVMFilesTest . method-testReadWriteFile ( ) => #abiCallData ( "testReadWriteFile" , .TypedArgs ) ) - - - rule ( KEVMFilesTest . method-testReadWriteLine ( ) => #abiCallData ( "testReadWriteLine" , .TypedArgs ) ) - - - rule ( KEVMFilesTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testFailRemoveFile()" ) => 2780725830 ) - - - rule ( selector ( "testReadWriteFile()" ) => 3880869465 ) - - - rule ( selector ( "testReadWriteLine()" ) => 3039298541 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module ForkTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMForkTestContract - - syntax KEVMForkTestContract ::= "KEVMForkTest" [symbol(), klabel(contract_ForkTest)] - - - - syntax Field ::= ForkTestField - - syntax ForkTestField ::= "IS_TEST" [symbol(), klabel(field_ForkTest_IS_TEST)] - - syntax ForkTestField ::= "_failed" [symbol(), klabel(field_ForkTest__failed)] - - syntax ForkTestField ::= "IS_SCRIPT" [symbol(), klabel(field_ForkTest_IS_SCRIPT)] - - syntax ForkTestField ::= "stdstore" [symbol(), klabel(field_ForkTest_stdstore)] - - rule ( #loc ( KEVMForkTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMForkTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMForkTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMForkTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMForkTestContract "." KEVMForkTestMethod [function(), symbol(), klabel(method_ForkTest)] - - syntax KEVMForkTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_ForkTest_method-IS_SCRIPT_)] - - syntax KEVMForkTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_ForkTest_method-IS_TEST_)] - - syntax KEVMForkTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_ForkTest_method-failed_)] - - syntax KEVMForkTestMethod ::= "method-testActiveFork" "(" ")" [symbol(), klabel(method_ForkTest_method-testActiveFork_)] - - syntax KEVMForkTestMethod ::= "method-testAllRPCUrl" "(" ")" [symbol(), klabel(method_ForkTest_method-testAllRPCUrl_)] - - syntax KEVMForkTestMethod ::= "method-testCreateFork" "(" ")" [symbol(), klabel(method_ForkTest_method-testCreateFork_)] - - syntax KEVMForkTestMethod ::= "method-testCreateForkBlock" "(" ")" [symbol(), klabel(method_ForkTest_method-testCreateForkBlock_)] - - syntax KEVMForkTestMethod ::= "method-testCreateSelectFork" "(" ")" [symbol(), klabel(method_ForkTest_method-testCreateSelectFork_)] - - syntax KEVMForkTestMethod ::= "method-testCreateSelectForkBlock" "(" ")" [symbol(), klabel(method_ForkTest_method-testCreateSelectForkBlock_)] - - syntax KEVMForkTestMethod ::= "method-testRPCUrl" "(" ")" [symbol(), klabel(method_ForkTest_method-testRPCUrl_)] - - syntax KEVMForkTestMethod ::= "method-testRPCUrlRevert" "(" ")" [symbol(), klabel(method_ForkTest_method-testRPCUrlRevert_)] - - syntax KEVMForkTestMethod ::= "method-testRollFork" "(" ")" [symbol(), klabel(method_ForkTest_method-testRollFork_)] - - syntax KEVMForkTestMethod ::= "method-testRollForkId" "(" ")" [symbol(), klabel(method_ForkTest_method-testRollForkId_)] - - syntax KEVMForkTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_ForkTest_method-vm_)] - - rule ( KEVMForkTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMForkTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMForkTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMForkTest . method-testActiveFork ( ) => #abiCallData ( "testActiveFork" , .TypedArgs ) ) - - - rule ( KEVMForkTest . method-testAllRPCUrl ( ) => #abiCallData ( "testAllRPCUrl" , .TypedArgs ) ) - - - rule ( KEVMForkTest . method-testCreateFork ( ) => #abiCallData ( "testCreateFork" , .TypedArgs ) ) - - - rule ( KEVMForkTest . method-testCreateForkBlock ( ) => #abiCallData ( "testCreateForkBlock" , .TypedArgs ) ) - - - rule ( KEVMForkTest . method-testCreateSelectFork ( ) => #abiCallData ( "testCreateSelectFork" , .TypedArgs ) ) - - - rule ( KEVMForkTest . method-testCreateSelectForkBlock ( ) => #abiCallData ( "testCreateSelectForkBlock" , .TypedArgs ) ) - - - rule ( KEVMForkTest . method-testRPCUrl ( ) => #abiCallData ( "testRPCUrl" , .TypedArgs ) ) - - - rule ( KEVMForkTest . method-testRPCUrlRevert ( ) => #abiCallData ( "testRPCUrlRevert" , .TypedArgs ) ) - - - rule ( KEVMForkTest . method-testRollFork ( ) => #abiCallData ( "testRollFork" , .TypedArgs ) ) - - - rule ( KEVMForkTest . method-testRollForkId ( ) => #abiCallData ( "testRollForkId" , .TypedArgs ) ) - - - rule ( KEVMForkTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testActiveFork()" ) => 2981024546 ) - - - rule ( selector ( "testAllRPCUrl()" ) => 707490019 ) - - - rule ( selector ( "testCreateFork()" ) => 9848133 ) - - - rule ( selector ( "testCreateForkBlock()" ) => 2820856803 ) - - - rule ( selector ( "testCreateSelectFork()" ) => 2307095206 ) - - - rule ( selector ( "testCreateSelectForkBlock()" ) => 269695700 ) - - - rule ( selector ( "testRPCUrl()" ) => 3938449696 ) - - - rule ( selector ( "testRPCUrlRevert()" ) => 470834373 ) - - - rule ( selector ( "testRollFork()" ) => 3222356361 ) - - - rule ( selector ( "testRollForkId()" ) => 3215996813 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module GasTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMGasTestContract - - syntax KEVMGasTestContract ::= "KEVMGasTest" [symbol(), klabel(contract_GasTest)] - - - - syntax Field ::= GasTestField - - syntax GasTestField ::= "IS_TEST" [symbol(), klabel(field_GasTest_IS_TEST)] - - syntax GasTestField ::= "_failed" [symbol(), klabel(field_GasTest__failed)] - - syntax GasTestField ::= "IS_SCRIPT" [symbol(), klabel(field_GasTest_IS_SCRIPT)] - - syntax GasTestField ::= "stdstore" [symbol(), klabel(field_GasTest_stdstore)] - - rule ( #loc ( KEVMGasTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMGasTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMGasTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMGasTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMGasTestContract "." KEVMGasTestMethod [function(), symbol(), klabel(method_GasTest)] - - syntax KEVMGasTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_GasTest_method-IS_SCRIPT_)] - - syntax KEVMGasTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_GasTest_method-IS_TEST_)] - - syntax KEVMGasTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_GasTest_method-failed_)] - - syntax KEVMGasTestMethod ::= "method-kevm" "(" ")" [symbol(), klabel(method_GasTest_method-kevm_)] - - syntax KEVMGasTestMethod ::= "method-testInfiniteGas" "(" ")" [symbol(), klabel(method_GasTest_method-testInfiniteGas_)] - - syntax KEVMGasTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_GasTest_method-vm_)] - - rule ( KEVMGasTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMGasTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMGasTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMGasTest . method-kevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( KEVMGasTest . method-testInfiniteGas ( ) => #abiCallData ( "testInfiniteGas" , .TypedArgs ) ) - - - rule ( KEVMGasTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - - rule ( selector ( "testInfiniteGas()" ) => 1677640502 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module GetCodeTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMGetCodeTestContract - - syntax KEVMGetCodeTestContract ::= "KEVMGetCodeTest" [symbol(), klabel(contract_GetCodeTest)] - - - - syntax Field ::= GetCodeTestField - - syntax GetCodeTestField ::= "IS_TEST" [symbol(), klabel(field_GetCodeTest_IS_TEST)] - - syntax GetCodeTestField ::= "_failed" [symbol(), klabel(field_GetCodeTest__failed)] - - syntax GetCodeTestField ::= "IS_SCRIPT" [symbol(), klabel(field_GetCodeTest_IS_SCRIPT)] - - syntax GetCodeTestField ::= "stdstore" [symbol(), klabel(field_GetCodeTest_stdstore)] - - syntax GetCodeTestField ::= "myToken" [symbol(), klabel(field_GetCodeTest_myToken)] - - rule ( #loc ( KEVMGetCodeTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMGetCodeTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMGetCodeTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMGetCodeTest . stdstore ) => 1 ) - - - rule ( #loc ( KEVMGetCodeTest . myToken ) => 8 ) - - - syntax Bytes ::= KEVMGetCodeTestContract "." KEVMGetCodeTestMethod [function(), symbol(), klabel(method_GetCodeTest)] - - syntax KEVMGetCodeTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_GetCodeTest_method-IS_SCRIPT_)] - - syntax KEVMGetCodeTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_GetCodeTest_method-IS_TEST_)] - - syntax KEVMGetCodeTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_GetCodeTest_method-failed_)] - - syntax KEVMGetCodeTestMethod ::= "method-setUp" "(" ")" [symbol(), klabel(method_GetCodeTest_method-setUp_)] - - syntax KEVMGetCodeTestMethod ::= "method-testGetCode" "(" ")" [symbol(), klabel(method_GetCodeTest_method-testGetCode_)] - - syntax KEVMGetCodeTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_GetCodeTest_method-vm_)] - - rule ( KEVMGetCodeTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMGetCodeTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMGetCodeTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMGetCodeTest . method-setUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( KEVMGetCodeTest . method-testGetCode ( ) => #abiCallData ( "testGetCode" , .TypedArgs ) ) - - - rule ( KEVMGetCodeTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testGetCode()" ) => 3906163359 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module KEVMCheats-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMKEVMCheatsContract - - syntax KEVMKEVMCheatsContract ::= "KEVMKEVMCheats" [symbol(), klabel(contract_KEVMCheats)] - - - - syntax Bytes ::= KEVMKEVMCheatsContract "." KEVMKEVMCheatsMethod [function(), symbol(), klabel(method_KEVMCheats)] - - syntax KEVMKEVMCheatsMethod ::= "method-kevm" "(" ")" [symbol(), klabel(method_KEVMCheats_method-kevm_)] - - rule ( KEVMKEVMCheats . method-kevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - -endmodule - -module KEVMCheatsBase-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMKEVMCheatsBaseContract - - syntax KEVMKEVMCheatsBaseContract ::= "KEVMKEVMCheatsBase" [symbol(), klabel(contract_KEVMCheatsBase)] - - - - syntax Bytes ::= KEVMKEVMCheatsBaseContract "." KEVMKEVMCheatsBaseMethod [function(), symbol(), klabel(method_KEVMCheatsBase)] - - syntax KEVMKEVMCheatsBaseMethod ::= "method-allowCallsToAddress" "(" Int ":" "address" ")" [symbol(), klabel(method_KEVMCheatsBase_method-allowCallsToAddress_address)] - - syntax KEVMKEVMCheatsBaseMethod ::= "method-allowChangesToStorage" "(" Int ":" "address" "," Int ":" "uint256" ")" [symbol(), klabel(method_KEVMCheatsBase_method-allowChangesToStorage_address_uint256)] - - syntax KEVMKEVMCheatsBaseMethod ::= "method-expectCreate" "(" Int ":" "address" "," Int ":" "uint256" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_KEVMCheatsBase_method-expectCreate_address_uint256_bytes)] - - syntax KEVMKEVMCheatsBaseMethod ::= "method-expectCreate2" "(" Int ":" "address" "," Int ":" "uint256" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_KEVMCheatsBase_method-expectCreate2_address_uint256_bytes)] - - syntax KEVMKEVMCheatsBaseMethod ::= "method-expectDelegateCall" "(" Int ":" "address" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_KEVMCheatsBase_method-expectDelegateCall_address_bytes)] - - syntax KEVMKEVMCheatsBaseMethod ::= "method-expectNoCall" "(" ")" [symbol(), klabel(method_KEVMCheatsBase_method-expectNoCall_)] - - syntax KEVMKEVMCheatsBaseMethod ::= "method-expectRegularCall" "(" Int ":" "address" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_KEVMCheatsBase_method-expectRegularCall_address_bytes)] - - syntax KEVMKEVMCheatsBaseMethod ::= "method-expectRegularCall" "(" Int ":" "address" "," Int ":" "uint256" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_KEVMCheatsBase_method-expectRegularCall_address_uint256_bytes)] - - syntax KEVMKEVMCheatsBaseMethod ::= "method-expectStaticCall" "(" Int ":" "address" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_KEVMCheatsBase_method-expectStaticCall_address_bytes)] - - syntax KEVMKEVMCheatsBaseMethod ::= "method-infiniteGas" "(" ")" [symbol(), klabel(method_KEVMCheatsBase_method-infiniteGas_)] - - syntax KEVMKEVMCheatsBaseMethod ::= "method-symbolicStorage" "(" Int ":" "address" ")" [symbol(), klabel(method_KEVMCheatsBase_method-symbolicStorage_address)] - - rule ( KEVMKEVMCheatsBase . method-allowCallsToAddress ( V0_ : address ) => #abiCallData ( "allowCallsToAddress" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( KEVMKEVMCheatsBase . method-allowChangesToStorage ( V0_ : address , V1_ : uint256 ) => #abiCallData ( "allowChangesToStorage" , #address ( V0_ ) , #uint256 ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - )) - - - rule ( KEVMKEVMCheatsBase . method-expectCreate ( V0_ : address , V1_ : uint256 , V2_ : bytes ) => #abiCallData ( "expectCreate" , #address ( V0_ ) , #uint256 ( V1_ ) , #bytes ( V2_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V2_ ) ) - ))) - - - rule ( KEVMKEVMCheatsBase . method-expectCreate2 ( V0_ : address , V1_ : uint256 , V2_ : bytes ) => #abiCallData ( "expectCreate2" , #address ( V0_ ) , #uint256 ( V1_ ) , #bytes ( V2_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V2_ ) ) - ))) - - - rule ( KEVMKEVMCheatsBase . method-expectDelegateCall ( V0_ : address , V1_ : bytes ) => #abiCallData ( "expectDelegateCall" , #address ( V0_ ) , #bytes ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V1_ ) ) - )) - - - rule ( KEVMKEVMCheatsBase . method-expectNoCall ( ) => #abiCallData ( "expectNoCall" , .TypedArgs ) ) - - - rule ( KEVMKEVMCheatsBase . method-expectRegularCall ( V0_ : address , V1_ : bytes ) => #abiCallData ( "expectRegularCall" , #address ( V0_ ) , #bytes ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V1_ ) ) - )) - - - rule ( KEVMKEVMCheatsBase . method-expectRegularCall ( V0_ : address , V1_ : uint256 , V2_ : bytes ) => #abiCallData ( "expectRegularCall" , #address ( V0_ ) , #uint256 ( V1_ ) , #bytes ( V2_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V2_ ) ) - ))) - - - rule ( KEVMKEVMCheatsBase . method-expectStaticCall ( V0_ : address , V1_ : bytes ) => #abiCallData ( "expectStaticCall" , #address ( V0_ ) , #bytes ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V1_ ) ) - )) - - - rule ( KEVMKEVMCheatsBase . method-infiniteGas ( ) => #abiCallData ( "infiniteGas" , .TypedArgs ) ) - - - rule ( KEVMKEVMCheatsBase . method-symbolicStorage ( V0_ : address ) => #abiCallData ( "symbolicStorage" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( selector ( "allowCallsToAddress(address)" ) => 1850795572 ) - - - rule ( selector ( "allowChangesToStorage(address,uint256)" ) => 4207417100 ) - - - rule ( selector ( "expectCreate(address,uint256,bytes)" ) => 658968394 ) - - - rule ( selector ( "expectCreate2(address,uint256,bytes)" ) => 3854582462 ) - - - rule ( selector ( "expectDelegateCall(address,bytes)" ) => 1030406631 ) - - - rule ( selector ( "expectNoCall()" ) => 3861374088 ) - - - rule ( selector ( "expectRegularCall(address,bytes)" ) => 3178868520 ) - - - rule ( selector ( "expectRegularCall(address,uint256,bytes)" ) => 1973496647 ) - - - rule ( selector ( "expectStaticCall(address,bytes)" ) => 2232945516 ) - - - rule ( selector ( "infiniteGas()" ) => 3986649939 ) - - - rule ( selector ( "symbolicStorage(address)" ) => 769677742 ) - - -endmodule - -module LabelTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMLabelTestContract - - syntax KEVMLabelTestContract ::= "KEVMLabelTest" [symbol(), klabel(contract_LabelTest)] - - - - syntax Field ::= LabelTestField - - syntax LabelTestField ::= "IS_TEST" [symbol(), klabel(field_LabelTest_IS_TEST)] - - syntax LabelTestField ::= "_failed" [symbol(), klabel(field_LabelTest__failed)] - - syntax LabelTestField ::= "IS_SCRIPT" [symbol(), klabel(field_LabelTest_IS_SCRIPT)] - - syntax LabelTestField ::= "stdstore" [symbol(), klabel(field_LabelTest_stdstore)] - - rule ( #loc ( KEVMLabelTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMLabelTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMLabelTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMLabelTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMLabelTestContract "." KEVMLabelTestMethod [function(), symbol(), klabel(method_LabelTest)] - - syntax KEVMLabelTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_LabelTest_method-IS_SCRIPT_)] - - syntax KEVMLabelTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_LabelTest_method-IS_TEST_)] - - syntax KEVMLabelTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_LabelTest_method-failed_)] - - syntax KEVMLabelTestMethod ::= "method-testLabel" "(" ")" [symbol(), klabel(method_LabelTest_method-testLabel_)] - - syntax KEVMLabelTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_LabelTest_method-vm_)] - - rule ( KEVMLabelTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMLabelTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMLabelTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMLabelTest . method-testLabel ( ) => #abiCallData ( "testLabel" , .TypedArgs ) ) - - - rule ( KEVMLabelTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testLabel()" ) => 799101117 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module LoopsTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMLoopsTestContract - - syntax KEVMLoopsTestContract ::= "KEVMLoopsTest" [symbol(), klabel(contract_LoopsTest)] - - - - syntax Field ::= LoopsTestField - - syntax LoopsTestField ::= "IS_TEST" [symbol(), klabel(field_LoopsTest_IS_TEST)] - - syntax LoopsTestField ::= "_failed" [symbol(), klabel(field_LoopsTest__failed)] - - syntax LoopsTestField ::= "IS_SCRIPT" [symbol(), klabel(field_LoopsTest_IS_SCRIPT)] - - syntax LoopsTestField ::= "stdstore" [symbol(), klabel(field_LoopsTest_stdstore)] - - rule ( #loc ( KEVMLoopsTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMLoopsTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMLoopsTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMLoopsTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMLoopsTestContract "." KEVMLoopsTestMethod [function(), symbol(), klabel(method_LoopsTest)] - - syntax KEVMLoopsTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_LoopsTest_method-IS_SCRIPT_)] - - syntax KEVMLoopsTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_LoopsTest_method-IS_TEST_)] - - syntax KEVMLoopsTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_LoopsTest_method-failed_)] - - syntax KEVMLoopsTestMethod ::= "method-sum_N" "(" Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_method-sum_N_uint256)] - - syntax KEVMLoopsTestMethod ::= "method-testIsNotPrime" "(" Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_method-testIsNotPrime_uint256)] - - syntax KEVMLoopsTestMethod ::= "method-testIsPrime" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_method-testIsPrime_uint256_uint256)] - - syntax KEVMLoopsTestMethod ::= "method-testIsPrimeBroken" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_method-testIsPrimeBroken_uint256_uint256)] - - syntax KEVMLoopsTestMethod ::= "method-testIsPrimeOpt" "(" Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_method-testIsPrimeOpt_uint256)] - - syntax KEVMLoopsTestMethod ::= "method-testMax" "(" K ":" "uint256[]" ")" [symbol(), klabel(method_LoopsTest_method-testMax_uint256[])] - - syntax KEVMLoopsTestMethod ::= "method-testMaxBroken" "(" K ":" "uint256[]" ")" [symbol(), klabel(method_LoopsTest_method-testMaxBroken_uint256[])] - - syntax KEVMLoopsTestMethod ::= "method-testNthPrime" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_method-testNthPrime_uint256_uint256)] - - syntax KEVMLoopsTestMethod ::= "method-testSort" "(" K ":" "uint256[]" ")" [symbol(), klabel(method_LoopsTest_method-testSort_uint256[])] - - syntax KEVMLoopsTestMethod ::= "method-testSortBroken" "(" K ":" "uint256[]" ")" [symbol(), klabel(method_LoopsTest_method-testSortBroken_uint256[])] - - syntax KEVMLoopsTestMethod ::= "method-testSqrt" "(" Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_method-testSqrt_uint256)] - - syntax KEVMLoopsTestMethod ::= "method-testSumToN" "(" Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_method-testSumToN_uint256)] - - syntax KEVMLoopsTestMethod ::= "method-testSumToNBroken" "(" Int ":" "uint256" ")" [symbol(), klabel(method_LoopsTest_method-testSumToNBroken_uint256)] - - syntax KEVMLoopsTestMethod ::= "method-test_sum_10" "(" ")" [symbol(), klabel(method_LoopsTest_method-test_sum_10_)] - - syntax KEVMLoopsTestMethod ::= "method-test_sum_100" "(" ")" [symbol(), klabel(method_LoopsTest_method-test_sum_100_)] - - syntax KEVMLoopsTestMethod ::= "method-test_sum_1000" "(" ")" [symbol(), klabel(method_LoopsTest_method-test_sum_1000_)] - - syntax KEVMLoopsTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_LoopsTest_method-vm_)] - - rule ( KEVMLoopsTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMLoopsTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMLoopsTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMLoopsTest . method-sum_N ( V0_n : uint256 ) => #abiCallData ( "sum_N" , #uint256 ( V0_n ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_n ) - - - rule ( KEVMLoopsTest . method-testIsNotPrime ( V0_n : uint256 ) => #abiCallData ( "testIsNotPrime" , #uint256 ( V0_n ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_n ) - - - rule ( KEVMLoopsTest . method-testIsPrime ( V0_n : uint256 , V1_i : uint256 ) => #abiCallData ( "testIsPrime" , #uint256 ( V0_n ) , #uint256 ( V1_i ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_n ) - andBool ( #rangeUInt ( 256 , V1_i ) - )) - - - rule ( KEVMLoopsTest . method-testIsPrimeBroken ( V0_n : uint256 , V1_i : uint256 ) => #abiCallData ( "testIsPrimeBroken" , #uint256 ( V0_n ) , #uint256 ( V1_i ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_n ) - andBool ( #rangeUInt ( 256 , V1_i ) - )) - - - rule ( KEVMLoopsTest . method-testIsPrimeOpt ( V0_n : uint256 ) => #abiCallData ( "testIsPrimeOpt" , #uint256 ( V0_n ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_n ) - - - rule ( KEVMLoopsTest . method-testNthPrime ( V0_n : uint256 , V1_i : uint256 ) => #abiCallData ( "testNthPrime" , #uint256 ( V0_n ) , #uint256 ( V1_i ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_n ) - andBool ( #rangeUInt ( 256 , V1_i ) - )) - - - rule ( KEVMLoopsTest . method-testSqrt ( V0_x : uint256 ) => #abiCallData ( "testSqrt" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMLoopsTest . method-testSumToN ( V0_n : uint256 ) => #abiCallData ( "testSumToN" , #uint256 ( V0_n ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_n ) - - - rule ( KEVMLoopsTest . method-testSumToNBroken ( V0_n : uint256 ) => #abiCallData ( "testSumToNBroken" , #uint256 ( V0_n ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_n ) - - - rule ( KEVMLoopsTest . method-test_sum_10 ( ) => #abiCallData ( "test_sum_10" , .TypedArgs ) ) - - - rule ( KEVMLoopsTest . method-test_sum_100 ( ) => #abiCallData ( "test_sum_100" , .TypedArgs ) ) - - - rule ( KEVMLoopsTest . method-test_sum_1000 ( ) => #abiCallData ( "test_sum_1000" , .TypedArgs ) ) - - - rule ( KEVMLoopsTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "sum_N(uint256)" ) => 2123244496 ) - - - rule ( selector ( "testIsNotPrime(uint256)" ) => 809987623 ) - - - rule ( selector ( "testIsPrime(uint256,uint256)" ) => 111940912 ) - - - rule ( selector ( "testIsPrimeBroken(uint256,uint256)" ) => 1834826207 ) - - - rule ( selector ( "testIsPrimeOpt(uint256)" ) => 404719852 ) - - - rule ( selector ( "testMax(uint256[])" ) => 1575104263 ) - - - rule ( selector ( "testMaxBroken(uint256[])" ) => 1372438930 ) - - - rule ( selector ( "testNthPrime(uint256,uint256)" ) => 2702762242 ) - - - rule ( selector ( "testSort(uint256[])" ) => 2414037741 ) - - - rule ( selector ( "testSortBroken(uint256[])" ) => 3541275661 ) - - - rule ( selector ( "testSqrt(uint256)" ) => 233106198 ) - - - rule ( selector ( "testSumToN(uint256)" ) => 2289979355 ) - - - rule ( selector ( "testSumToNBroken(uint256)" ) => 1318374999 ) - - - rule ( selector ( "test_sum_10()" ) => 1087009050 ) - - - rule ( selector ( "test_sum_100()" ) => 1519953344 ) - - - rule ( selector ( "test_sum_1000()" ) => 222767225 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module MethodDisambiguateTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMMethodDisambiguateTestContract - - syntax KEVMMethodDisambiguateTestContract ::= "KEVMMethodDisambiguateTest" [symbol(), klabel(contract_MethodDisambiguateTest)] - - - - syntax Field ::= MethodDisambiguateTestField - - syntax MethodDisambiguateTestField ::= "IS_TEST" [symbol(), klabel(field_MethodDisambiguateTest_IS_TEST)] - - syntax MethodDisambiguateTestField ::= "_failed" [symbol(), klabel(field_MethodDisambiguateTest__failed)] - - syntax MethodDisambiguateTestField ::= "IS_SCRIPT" [symbol(), klabel(field_MethodDisambiguateTest_IS_SCRIPT)] - - syntax MethodDisambiguateTestField ::= "stdstore" [symbol(), klabel(field_MethodDisambiguateTest_stdstore)] - - rule ( #loc ( KEVMMethodDisambiguateTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMMethodDisambiguateTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMMethodDisambiguateTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMMethodDisambiguateTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMMethodDisambiguateTestContract "." KEVMMethodDisambiguateTestMethod [function(), symbol(), klabel(method_MethodDisambiguateTest)] - - syntax KEVMMethodDisambiguateTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_MethodDisambiguateTest_method-IS_SCRIPT_)] - - syntax KEVMMethodDisambiguateTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_MethodDisambiguateTest_method-IS_TEST_)] - - syntax KEVMMethodDisambiguateTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_MethodDisambiguateTest_method-failed_)] - - syntax KEVMMethodDisambiguateTestMethod ::= "method-getNumber" "(" Int ":" "uint256" ")" [symbol(), klabel(method_MethodDisambiguateTest_method-getNumber_uint256)] - - syntax KEVMMethodDisambiguateTestMethod ::= "method-getNumber" "(" Int ":" "uint32" ")" [symbol(), klabel(method_MethodDisambiguateTest_method-getNumber_uint32)] - - syntax KEVMMethodDisambiguateTestMethod ::= "method-test_method_call" "(" ")" [symbol(), klabel(method_MethodDisambiguateTest_method-test_method_call_)] - - syntax KEVMMethodDisambiguateTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_MethodDisambiguateTest_method-vm_)] - - rule ( KEVMMethodDisambiguateTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMMethodDisambiguateTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMMethodDisambiguateTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMMethodDisambiguateTest . method-getNumber ( V0_x : uint256 ) => #abiCallData ( "getNumber" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMMethodDisambiguateTest . method-getNumber ( V0_x : uint32 ) => #abiCallData ( "getNumber" , #uint32 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 32 , V0_x ) - - - rule ( KEVMMethodDisambiguateTest . method-test_method_call ( ) => #abiCallData ( "test_method_call" , .TypedArgs ) ) - - - rule ( KEVMMethodDisambiguateTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "getNumber(uint256)" ) => 4233508440 ) - - - rule ( selector ( "getNumber(uint32)" ) => 144150998 ) - - - rule ( selector ( "test_method_call()" ) => 1803637680 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module MockCallTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMMockCallTestContract - - syntax KEVMMockCallTestContract ::= "KEVMMockCallTest" [symbol(), klabel(contract_MockCallTest)] - - - - syntax Field ::= MockCallTestField - - syntax MockCallTestField ::= "IS_TEST" [symbol(), klabel(field_MockCallTest_IS_TEST)] - - syntax MockCallTestField ::= "_failed" [symbol(), klabel(field_MockCallTest__failed)] - - syntax MockCallTestField ::= "IS_SCRIPT" [symbol(), klabel(field_MockCallTest_IS_SCRIPT)] - - syntax MockCallTestField ::= "stdstore" [symbol(), klabel(field_MockCallTest_stdstore)] - - rule ( #loc ( KEVMMockCallTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMMockCallTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMMockCallTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMMockCallTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMMockCallTestContract "." KEVMMockCallTestMethod [function(), symbol(), klabel(method_MockCallTest)] - - syntax KEVMMockCallTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_MockCallTest_method-IS_SCRIPT_)] - - syntax KEVMMockCallTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_MockCallTest_method-IS_TEST_)] - - syntax KEVMMockCallTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_MockCallTest_method-failed_)] - - syntax KEVMMockCallTestMethod ::= "method-testMockCall" "(" ")" [symbol(), klabel(method_MockCallTest_method-testMockCall_)] - - syntax KEVMMockCallTestMethod ::= "method-testMockCallValue" "(" ")" [symbol(), klabel(method_MockCallTest_method-testMockCallValue_)] - - syntax KEVMMockCallTestMethod ::= "method-testMockCalls" "(" ")" [symbol(), klabel(method_MockCallTest_method-testMockCalls_)] - - syntax KEVMMockCallTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_MockCallTest_method-vm_)] - - rule ( KEVMMockCallTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMMockCallTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMMockCallTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMMockCallTest . method-testMockCall ( ) => #abiCallData ( "testMockCall" , .TypedArgs ) ) - - - rule ( KEVMMockCallTest . method-testMockCallValue ( ) => #abiCallData ( "testMockCallValue" , .TypedArgs ) ) - - - rule ( KEVMMockCallTest . method-testMockCalls ( ) => #abiCallData ( "testMockCalls" , .TypedArgs ) ) - - - rule ( KEVMMockCallTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testMockCall()" ) => 3143830108 ) - - - rule ( selector ( "testMockCallValue()" ) => 1208641942 ) - - - rule ( selector ( "testMockCalls()" ) => 957910350 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module MyIERC20-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMMyIERC20Contract - - syntax KEVMMyIERC20Contract ::= "KEVMMyIERC20" [symbol(), klabel(contract_MyIERC20)] - - - - syntax Bytes ::= KEVMMyIERC20Contract "." KEVMMyIERC20Method [function(), symbol(), klabel(method_MyIERC20)] - - syntax KEVMMyIERC20Method ::= "method-approve" "(" Int ":" "address" "," Int ":" "uint256" ")" [symbol(), klabel(method_MyIERC20_method-approve_address_uint256)] - - syntax KEVMMyIERC20Method ::= "method-balanceOf" "(" Int ":" "address" ")" [symbol(), klabel(method_MyIERC20_method-balanceOf_address)] - - syntax KEVMMyIERC20Method ::= "method-decimals" "(" ")" [symbol(), klabel(method_MyIERC20_method-decimals_)] - - syntax KEVMMyIERC20Method ::= "method-symbol" "(" ")" [symbol(), klabel(method_MyIERC20_method-symbol_)] - - syntax KEVMMyIERC20Method ::= "method-totalSupply" "(" ")" [symbol(), klabel(method_MyIERC20_method-totalSupply_)] - - syntax KEVMMyIERC20Method ::= "method-transfer" "(" Int ":" "address" "," Int ":" "uint256" ")" [symbol(), klabel(method_MyIERC20_method-transfer_address_uint256)] - - syntax KEVMMyIERC20Method ::= "method-transferFrom" "(" Int ":" "address" "," Int ":" "address" "," Int ":" "uint256" ")" [symbol(), klabel(method_MyIERC20_method-transferFrom_address_address_uint256)] - - rule ( KEVMMyIERC20 . method-approve ( V0_spender : address , V1_value : uint256 ) => #abiCallData ( "approve" , #address ( V0_spender ) , #uint256 ( V1_value ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_spender ) - andBool ( #rangeUInt ( 256 , V1_value ) - )) - - - rule ( KEVMMyIERC20 . method-balanceOf ( V0_ : address ) => #abiCallData ( "balanceOf" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( KEVMMyIERC20 . method-decimals ( ) => #abiCallData ( "decimals" , .TypedArgs ) ) - - - rule ( KEVMMyIERC20 . method-symbol ( ) => #abiCallData ( "symbol" , .TypedArgs ) ) - - - rule ( KEVMMyIERC20 . method-totalSupply ( ) => #abiCallData ( "totalSupply" , .TypedArgs ) ) - - - rule ( KEVMMyIERC20 . method-transfer ( V0_recipient : address , V1_amount : uint256 ) => #abiCallData ( "transfer" , #address ( V0_recipient ) , #uint256 ( V1_amount ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_recipient ) - andBool ( #rangeUInt ( 256 , V1_amount ) - )) - - - rule ( KEVMMyIERC20 . method-transferFrom ( V0_sender : address , V1_recipient : address , V2_amount : uint256 ) => #abiCallData ( "transferFrom" , #address ( V0_sender ) , #address ( V1_recipient ) , #uint256 ( V2_amount ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_sender ) - andBool ( #rangeAddress ( V1_recipient ) - andBool ( #rangeUInt ( 256 , V2_amount ) - ))) - - - rule ( selector ( "approve(address,uint256)" ) => 157198259 ) - - - rule ( selector ( "balanceOf(address)" ) => 1889567281 ) - - - rule ( selector ( "decimals()" ) => 826074471 ) - - - rule ( selector ( "symbol()" ) => 2514000705 ) - - - rule ( selector ( "totalSupply()" ) => 404098525 ) - - - rule ( selector ( "transfer(address,uint256)" ) => 2835717307 ) - - - rule ( selector ( "transferFrom(address,address,uint256)" ) => 599290589 ) - - -endmodule - -module MyToken-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMMyTokenContract - - syntax KEVMMyTokenContract ::= "KEVMMyToken" [symbol(), klabel(contract_MyToken)] - - - - syntax Field ::= MyTokenField - - syntax MyTokenField ::= "token" [symbol(), klabel(field_MyToken_token)] - - syntax MyTokenField ::= "balances" [symbol(), klabel(field_MyToken_balances)] - - rule ( #loc ( KEVMMyToken . token ) => 0 ) - - - rule ( #loc ( KEVMMyToken . balances ) => 1 ) - - - syntax Bytes ::= KEVMMyTokenContract "." KEVMMyTokenMethod [function(), symbol(), klabel(method_MyToken)] - - syntax KEVMMyTokenMethod ::= "method-balanceOf" "(" Int ":" "address" ")" [symbol(), klabel(method_MyToken_method-balanceOf_address)] - - syntax KEVMMyTokenMethod ::= "method-balances" "(" Int ":" "address" ")" [symbol(), klabel(method_MyToken_method-balances_address)] - - syntax KEVMMyTokenMethod ::= "method-pay" "(" Int ":" "address" ")" [symbol(), klabel(method_MyToken_method-pay_address)] - - syntax KEVMMyTokenMethod ::= "method-token" "(" ")" [symbol(), klabel(method_MyToken_method-token_)] - - rule ( KEVMMyToken . method-balanceOf ( V0_user : address ) => #abiCallData ( "balanceOf" , #address ( V0_user ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_user ) - - - rule ( KEVMMyToken . method-balances ( V0_ : address ) => #abiCallData ( "balances" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( KEVMMyToken . method-pay ( V0_user : address ) => #abiCallData ( "pay" , #address ( V0_user ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_user ) - - - rule ( KEVMMyToken . method-token ( ) => #abiCallData ( "token" , .TypedArgs ) ) - - - rule ( selector ( "balanceOf(address)" ) => 1889567281 ) - - - rule ( selector ( "balances(address)" ) => 669136355 ) - - - rule ( selector ( "pay(address)" ) => 202497757 ) - - - rule ( selector ( "token()" ) => 4228666474 ) - - -endmodule - -module NoImport-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMNoImportContract - - syntax KEVMNoImportContract ::= "KEVMNoImport" [symbol(), klabel(contract_NoImport)] - - - - syntax Bytes ::= KEVMNoImportContract "." KEVMNoImportMethod [function(), symbol(), klabel(method_NoImport)] - - syntax KEVMNoImportMethod ::= "method-test_source_map" "(" ")" [symbol(), klabel(method_NoImport_method-test_source_map_)] - - rule ( KEVMNoImport . method-test_source_map ( ) => #abiCallData ( "test_source_map" , .TypedArgs ) ) - - - rule ( selector ( "test_source_map()" ) => 3563497491 ) - - -endmodule - -module OwnerUpOnly-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMOwnerUpOnlyContract - - syntax KEVMOwnerUpOnlyContract ::= "KEVMOwnerUpOnly" [symbol(), klabel(contract_OwnerUpOnly)] - - - - syntax Field ::= OwnerUpOnlyField - - syntax OwnerUpOnlyField ::= "count" [symbol(), klabel(field_OwnerUpOnly_count)] - - rule ( #loc ( KEVMOwnerUpOnly . count ) => 0 ) - - - syntax Bytes ::= KEVMOwnerUpOnlyContract "." KEVMOwnerUpOnlyMethod [function(), symbol(), klabel(method_OwnerUpOnly)] - - syntax KEVMOwnerUpOnlyMethod ::= "method-count" "(" ")" [symbol(), klabel(method_OwnerUpOnly_method-count_)] - - syntax KEVMOwnerUpOnlyMethod ::= "method-increment" "(" ")" [symbol(), klabel(method_OwnerUpOnly_method-increment_)] - - syntax KEVMOwnerUpOnlyMethod ::= "method-owner" "(" ")" [symbol(), klabel(method_OwnerUpOnly_method-owner_)] - - rule ( KEVMOwnerUpOnly . method-count ( ) => #abiCallData ( "count" , .TypedArgs ) ) - - - rule ( KEVMOwnerUpOnly . method-increment ( ) => #abiCallData ( "increment" , .TypedArgs ) ) - - - rule ( KEVMOwnerUpOnly . method-owner ( ) => #abiCallData ( "owner" , .TypedArgs ) ) - - - rule ( selector ( "count()" ) => 107354813 ) - - - rule ( selector ( "increment()" ) => 3500007562 ) - - - rule ( selector ( "owner()" ) => 2376452955 ) - - -endmodule - -module OwnerUpOnlyTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMOwnerUpOnlyTestContract - - syntax KEVMOwnerUpOnlyTestContract ::= "KEVMOwnerUpOnlyTest" [symbol(), klabel(contract_OwnerUpOnlyTest)] - - - - syntax Field ::= OwnerUpOnlyTestField - - syntax OwnerUpOnlyTestField ::= "IS_TEST" [symbol(), klabel(field_OwnerUpOnlyTest_IS_TEST)] - - syntax OwnerUpOnlyTestField ::= "_failed" [symbol(), klabel(field_OwnerUpOnlyTest__failed)] - - syntax OwnerUpOnlyTestField ::= "IS_SCRIPT" [symbol(), klabel(field_OwnerUpOnlyTest_IS_SCRIPT)] - - syntax OwnerUpOnlyTestField ::= "stdstore" [symbol(), klabel(field_OwnerUpOnlyTest_stdstore)] - - syntax OwnerUpOnlyTestField ::= "upOnly" [symbol(), klabel(field_OwnerUpOnlyTest_upOnly)] - - rule ( #loc ( KEVMOwnerUpOnlyTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMOwnerUpOnlyTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMOwnerUpOnlyTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMOwnerUpOnlyTest . stdstore ) => 1 ) - - - rule ( #loc ( KEVMOwnerUpOnlyTest . upOnly ) => 8 ) - - - syntax Bytes ::= KEVMOwnerUpOnlyTestContract "." KEVMOwnerUpOnlyTestMethod [function(), symbol(), klabel(method_OwnerUpOnlyTest)] - - syntax KEVMOwnerUpOnlyTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_method-IS_SCRIPT_)] - - syntax KEVMOwnerUpOnlyTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_method-IS_TEST_)] - - syntax KEVMOwnerUpOnlyTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_method-failed_)] - - syntax KEVMOwnerUpOnlyTestMethod ::= "method-setUp" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_method-setUp_)] - - syntax KEVMOwnerUpOnlyTestMethod ::= "method-testFailIncrementAsNotOwner" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_method-testFailIncrementAsNotOwner_)] - - syntax KEVMOwnerUpOnlyTestMethod ::= "method-testIncrementAsNotOwner" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_method-testIncrementAsNotOwner_)] - - syntax KEVMOwnerUpOnlyTestMethod ::= "method-testIncrementAsOwner" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_method-testIncrementAsOwner_)] - - syntax KEVMOwnerUpOnlyTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_OwnerUpOnlyTest_method-vm_)] - - rule ( KEVMOwnerUpOnlyTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMOwnerUpOnlyTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMOwnerUpOnlyTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMOwnerUpOnlyTest . method-setUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( KEVMOwnerUpOnlyTest . method-testFailIncrementAsNotOwner ( ) => #abiCallData ( "testFailIncrementAsNotOwner" , .TypedArgs ) ) - - - rule ( KEVMOwnerUpOnlyTest . method-testIncrementAsNotOwner ( ) => #abiCallData ( "testIncrementAsNotOwner" , .TypedArgs ) ) - - - rule ( KEVMOwnerUpOnlyTest . method-testIncrementAsOwner ( ) => #abiCallData ( "testIncrementAsOwner" , .TypedArgs ) ) - - - rule ( KEVMOwnerUpOnlyTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testFailIncrementAsNotOwner()" ) => 4249919617 ) - - - rule ( selector ( "testIncrementAsNotOwner()" ) => 1302326069 ) - - - rule ( selector ( "testIncrementAsOwner()" ) => 1980498343 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module AdditionalToken-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMAdditionalTokenContract - - syntax KEVMAdditionalTokenContract ::= "KEVMAdditionalToken" [symbol(), klabel(contract_AdditionalToken)] - - - - syntax Field ::= AdditionalTokenField - - syntax AdditionalTokenField ::= "count" [symbol(), klabel(field_AdditionalToken_count)] - - rule ( #loc ( KEVMAdditionalToken . count ) => 0 ) - - - syntax Bytes ::= KEVMAdditionalTokenContract "." KEVMAdditionalTokenMethod [function(), symbol(), klabel(method_AdditionalToken)] - - syntax KEVMAdditionalTokenMethod ::= "method-count" "(" ")" [symbol(), klabel(method_AdditionalToken_method-count_)] - - syntax KEVMAdditionalTokenMethod ::= "method-incrementCount" "(" ")" [symbol(), klabel(method_AdditionalToken_method-incrementCount_)] - - syntax KEVMAdditionalTokenMethod ::= "method-owner" "(" ")" [symbol(), klabel(method_AdditionalToken_method-owner_)] - - rule ( KEVMAdditionalToken . method-count ( ) => #abiCallData ( "count" , .TypedArgs ) ) - - - rule ( KEVMAdditionalToken . method-incrementCount ( ) => #abiCallData ( "incrementCount" , .TypedArgs ) ) - - - rule ( KEVMAdditionalToken . method-owner ( ) => #abiCallData ( "owner" , .TypedArgs ) ) - - - rule ( selector ( "count()" ) => 107354813 ) - - - rule ( selector ( "incrementCount()" ) => 3842448270 ) - - - rule ( selector ( "owner()" ) => 2376452955 ) - - -endmodule - -module PlainPrankTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMPlainPrankTestContract - - syntax KEVMPlainPrankTestContract ::= "KEVMPlainPrankTest" [symbol(), klabel(contract_PlainPrankTest)] - - - - syntax Field ::= PlainPrankTestField - - syntax PlainPrankTestField ::= "IS_TEST" [symbol(), klabel(field_PlainPrankTest_IS_TEST)] - - syntax PlainPrankTestField ::= "_failed" [symbol(), klabel(field_PlainPrankTest__failed)] - - syntax PlainPrankTestField ::= "IS_SCRIPT" [symbol(), klabel(field_PlainPrankTest_IS_SCRIPT)] - - syntax PlainPrankTestField ::= "stdstore" [symbol(), klabel(field_PlainPrankTest_stdstore)] - - rule ( #loc ( KEVMPlainPrankTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMPlainPrankTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMPlainPrankTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMPlainPrankTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMPlainPrankTestContract "." KEVMPlainPrankTestMethod [function(), symbol(), klabel(method_PlainPrankTest)] - - syntax KEVMPlainPrankTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_PlainPrankTest_method-IS_SCRIPT_)] - - syntax KEVMPlainPrankTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_PlainPrankTest_method-IS_TEST_)] - - syntax KEVMPlainPrankTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_PlainPrankTest_method-failed_)] - - syntax KEVMPlainPrankTestMethod ::= "method-internalCounter" "(" ")" [symbol(), klabel(method_PlainPrankTest_method-internalCounter_)] - - syntax KEVMPlainPrankTestMethod ::= "method-testFail_startPrank_existingAlready" "(" ")" [symbol(), klabel(method_PlainPrankTest_method-testFail_startPrank_existingAlready_)] - - syntax KEVMPlainPrankTestMethod ::= "method-testFail_startPrank_internalCall" "(" ")" [symbol(), klabel(method_PlainPrankTest_method-testFail_startPrank_internalCall_)] - - syntax KEVMPlainPrankTestMethod ::= "method-test_prank_zeroAddress_true" "(" ")" [symbol(), klabel(method_PlainPrankTest_method-test_prank_zeroAddress_true_)] - - syntax KEVMPlainPrankTestMethod ::= "method-test_startPrankWithOrigin_true" "(" ")" [symbol(), klabel(method_PlainPrankTest_method-test_startPrankWithOrigin_true_)] - - syntax KEVMPlainPrankTestMethod ::= "method-test_startPrank_true" "(" ")" [symbol(), klabel(method_PlainPrankTest_method-test_startPrank_true_)] - - syntax KEVMPlainPrankTestMethod ::= "method-test_startPrank_zeroAddress_true" "(" ")" [symbol(), klabel(method_PlainPrankTest_method-test_startPrank_zeroAddress_true_)] - - syntax KEVMPlainPrankTestMethod ::= "method-test_stopPrank_notExistent" "(" ")" [symbol(), klabel(method_PlainPrankTest_method-test_stopPrank_notExistent_)] - - syntax KEVMPlainPrankTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_PlainPrankTest_method-vm_)] - - rule ( KEVMPlainPrankTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMPlainPrankTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMPlainPrankTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMPlainPrankTest . method-internalCounter ( ) => #abiCallData ( "internalCounter" , .TypedArgs ) ) - - - rule ( KEVMPlainPrankTest . method-testFail_startPrank_existingAlready ( ) => #abiCallData ( "testFail_startPrank_existingAlready" , .TypedArgs ) ) - - - rule ( KEVMPlainPrankTest . method-testFail_startPrank_internalCall ( ) => #abiCallData ( "testFail_startPrank_internalCall" , .TypedArgs ) ) - - - rule ( KEVMPlainPrankTest . method-test_prank_zeroAddress_true ( ) => #abiCallData ( "test_prank_zeroAddress_true" , .TypedArgs ) ) - - - rule ( KEVMPlainPrankTest . method-test_startPrankWithOrigin_true ( ) => #abiCallData ( "test_startPrankWithOrigin_true" , .TypedArgs ) ) - - - rule ( KEVMPlainPrankTest . method-test_startPrank_true ( ) => #abiCallData ( "test_startPrank_true" , .TypedArgs ) ) - - - rule ( KEVMPlainPrankTest . method-test_startPrank_zeroAddress_true ( ) => #abiCallData ( "test_startPrank_zeroAddress_true" , .TypedArgs ) ) - - - rule ( KEVMPlainPrankTest . method-test_stopPrank_notExistent ( ) => #abiCallData ( "test_stopPrank_notExistent" , .TypedArgs ) ) - - - rule ( KEVMPlainPrankTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "internalCounter()" ) => 2687914858 ) - - - rule ( selector ( "testFail_startPrank_existingAlready()" ) => 2262269573 ) - - - rule ( selector ( "testFail_startPrank_internalCall()" ) => 3075676477 ) - - - rule ( selector ( "test_prank_zeroAddress_true()" ) => 3793950116 ) - - - rule ( selector ( "test_startPrankWithOrigin_true()" ) => 1559633499 ) - - - rule ( selector ( "test_startPrank_true()" ) => 243527947 ) - - - rule ( selector ( "test_startPrank_zeroAddress_true()" ) => 858618957 ) - - - rule ( selector ( "test_stopPrank_notExistent()" ) => 279002555 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Prank-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMPrankContract - - syntax KEVMPrankContract ::= "KEVMPrank" [symbol(), klabel(contract_Prank)] - - - - syntax Field ::= PrankField - - syntax PrankField ::= "count" [symbol(), klabel(field_Prank_count)] - - rule ( #loc ( KEVMPrank . count ) => 0 ) - - - syntax Bytes ::= KEVMPrankContract "." KEVMPrankMethod [function(), symbol(), klabel(method_Prank)] - - syntax KEVMPrankMethod ::= "method-add" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Prank_method-add_uint256)] - - syntax KEVMPrankMethod ::= "method-count" "(" ")" [symbol(), klabel(method_Prank_method-count_)] - - syntax KEVMPrankMethod ::= "method-owner" "(" ")" [symbol(), klabel(method_Prank_method-owner_)] - - syntax KEVMPrankMethod ::= "method-subtract" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Prank_method-subtract_uint256)] - - rule ( KEVMPrank . method-add ( V0_value : uint256 ) => #abiCallData ( "add" , #uint256 ( V0_value ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_value ) - - - rule ( KEVMPrank . method-count ( ) => #abiCallData ( "count" , .TypedArgs ) ) - - - rule ( KEVMPrank . method-owner ( ) => #abiCallData ( "owner" , .TypedArgs ) ) - - - rule ( KEVMPrank . method-subtract ( V0_value : uint256 ) => #abiCallData ( "subtract" , #uint256 ( V0_value ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_value ) - - - rule ( selector ( "add(uint256)" ) => 268690130 ) - - - rule ( selector ( "count()" ) => 107354813 ) - - - rule ( selector ( "owner()" ) => 2376452955 ) - - - rule ( selector ( "subtract(uint256)" ) => 499146519 ) - - -endmodule - -module PrankTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMPrankTestContract - - syntax KEVMPrankTestContract ::= "KEVMPrankTest" [symbol(), klabel(contract_PrankTest)] - - - - syntax Field ::= PrankTestField - - syntax PrankTestField ::= "IS_TEST" [symbol(), klabel(field_PrankTest_IS_TEST)] - - syntax PrankTestField ::= "_failed" [symbol(), klabel(field_PrankTest__failed)] - - syntax PrankTestField ::= "IS_SCRIPT" [symbol(), klabel(field_PrankTest_IS_SCRIPT)] - - syntax PrankTestField ::= "stdstore" [symbol(), klabel(field_PrankTest_stdstore)] - - syntax PrankTestField ::= "prankContract" [symbol(), klabel(field_PrankTest_prankContract)] - - rule ( #loc ( KEVMPrankTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMPrankTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMPrankTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMPrankTest . stdstore ) => 1 ) - - - rule ( #loc ( KEVMPrankTest . prankContract ) => 8 ) - - - syntax Bytes ::= KEVMPrankTestContract "." KEVMPrankTestMethod [function(), symbol(), klabel(method_PrankTest)] - - syntax KEVMPrankTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_PrankTest_method-IS_SCRIPT_)] - - syntax KEVMPrankTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_PrankTest_method-IS_TEST_)] - - syntax KEVMPrankTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_PrankTest_method-failed_)] - - syntax KEVMPrankTestMethod ::= "method-setUp" "(" ")" [symbol(), klabel(method_PrankTest_method-setUp_)] - - syntax KEVMPrankTestMethod ::= "method-testAddAsOwner" "(" Int ":" "uint256" ")" [symbol(), klabel(method_PrankTest_method-testAddAsOwner_uint256)] - - syntax KEVMPrankTestMethod ::= "method-testAddStartPrank" "(" Int ":" "uint256" ")" [symbol(), klabel(method_PrankTest_method-testAddStartPrank_uint256)] - - syntax KEVMPrankTestMethod ::= "method-testFailAddPrank" "(" Int ":" "uint256" ")" [symbol(), klabel(method_PrankTest_method-testFailAddPrank_uint256)] - - syntax KEVMPrankTestMethod ::= "method-testSubtractAsTxOrigin" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_PrankTest_method-testSubtractAsTxOrigin_uint256_uint256)] - - syntax KEVMPrankTestMethod ::= "method-testSubtractFail" "(" Int ":" "uint256" ")" [symbol(), klabel(method_PrankTest_method-testSubtractFail_uint256)] - - syntax KEVMPrankTestMethod ::= "method-testSubtractStartPrank" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_PrankTest_method-testSubtractStartPrank_uint256_uint256)] - - syntax KEVMPrankTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_PrankTest_method-vm_)] - - rule ( KEVMPrankTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMPrankTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMPrankTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMPrankTest . method-setUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( KEVMPrankTest . method-testAddAsOwner ( V0_x : uint256 ) => #abiCallData ( "testAddAsOwner" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMPrankTest . method-testAddStartPrank ( V0_x : uint256 ) => #abiCallData ( "testAddStartPrank" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMPrankTest . method-testFailAddPrank ( V0_x : uint256 ) => #abiCallData ( "testFailAddPrank" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMPrankTest . method-testSubtractAsTxOrigin ( V0_addValue : uint256 , V1_subValue : uint256 ) => #abiCallData ( "testSubtractAsTxOrigin" , #uint256 ( V0_addValue ) , #uint256 ( V1_subValue ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_addValue ) - andBool ( #rangeUInt ( 256 , V1_subValue ) - )) - - - rule ( KEVMPrankTest . method-testSubtractFail ( V0_x : uint256 ) => #abiCallData ( "testSubtractFail" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMPrankTest . method-testSubtractStartPrank ( V0_addValue : uint256 , V1_subValue : uint256 ) => #abiCallData ( "testSubtractStartPrank" , #uint256 ( V0_addValue ) , #uint256 ( V1_subValue ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_addValue ) - andBool ( #rangeUInt ( 256 , V1_subValue ) - )) - - - rule ( KEVMPrankTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testAddAsOwner(uint256)" ) => 1600382513 ) - - - rule ( selector ( "testAddStartPrank(uint256)" ) => 1333759955 ) - - - rule ( selector ( "testFailAddPrank(uint256)" ) => 948023622 ) - - - rule ( selector ( "testSubtractAsTxOrigin(uint256,uint256)" ) => 3798952319 ) - - - rule ( selector ( "testSubtractFail(uint256)" ) => 1433390937 ) - - - rule ( selector ( "testSubtractStartPrank(uint256,uint256)" ) => 262874110 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module PreconditionsTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMPreconditionsTestContract - - syntax KEVMPreconditionsTestContract ::= "KEVMPreconditionsTest" [symbol(), klabel(contract_PreconditionsTest)] - - - - syntax Field ::= PreconditionsTestField - - syntax PreconditionsTestField ::= "IS_TEST" [symbol(), klabel(field_PreconditionsTest_IS_TEST)] - - syntax PreconditionsTestField ::= "_failed" [symbol(), klabel(field_PreconditionsTest__failed)] - - syntax PreconditionsTestField ::= "IS_SCRIPT" [symbol(), klabel(field_PreconditionsTest_IS_SCRIPT)] - - syntax PreconditionsTestField ::= "stdstore" [symbol(), klabel(field_PreconditionsTest_stdstore)] - - syntax PreconditionsTestField ::= "n" [symbol(), klabel(field_PreconditionsTest_n)] - - rule ( #loc ( KEVMPreconditionsTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMPreconditionsTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMPreconditionsTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMPreconditionsTest . stdstore ) => 1 ) - - - rule ( #loc ( KEVMPreconditionsTest . n ) => 8 ) - - - syntax Bytes ::= KEVMPreconditionsTestContract "." KEVMPreconditionsTestMethod [function(), symbol(), klabel(method_PreconditionsTest)] - - syntax KEVMPreconditionsTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_PreconditionsTest_method-IS_SCRIPT_)] - - syntax KEVMPreconditionsTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_PreconditionsTest_method-IS_TEST_)] - - syntax KEVMPreconditionsTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_PreconditionsTest_method-failed_)] - - syntax KEVMPreconditionsTestMethod ::= "method-kevm" "(" ")" [symbol(), klabel(method_PreconditionsTest_method-kevm_)] - - syntax KEVMPreconditionsTestMethod ::= "method-setUp" "(" ")" [symbol(), klabel(method_PreconditionsTest_method-setUp_)] - - syntax KEVMPreconditionsTestMethod ::= "method-testAssume" "(" ")" [symbol(), klabel(method_PreconditionsTest_method-testAssume_)] - - syntax KEVMPreconditionsTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_PreconditionsTest_method-vm_)] - - rule ( KEVMPreconditionsTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMPreconditionsTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMPreconditionsTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMPreconditionsTest . method-kevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( KEVMPreconditionsTest . method-setUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( KEVMPreconditionsTest . method-testAssume ( ) => #abiCallData ( "testAssume" , .TypedArgs ) ) - - - rule ( KEVMPreconditionsTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testAssume()" ) => 3928496829 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module RecordLogsTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMRecordLogsTestContract - - syntax KEVMRecordLogsTestContract ::= "KEVMRecordLogsTest" [symbol(), klabel(contract_RecordLogsTest)] - - - - syntax Field ::= RecordLogsTestField - - syntax RecordLogsTestField ::= "IS_TEST" [symbol(), klabel(field_RecordLogsTest_IS_TEST)] - - syntax RecordLogsTestField ::= "_failed" [symbol(), klabel(field_RecordLogsTest__failed)] - - syntax RecordLogsTestField ::= "IS_SCRIPT" [symbol(), klabel(field_RecordLogsTest_IS_SCRIPT)] - - syntax RecordLogsTestField ::= "stdstore" [symbol(), klabel(field_RecordLogsTest_stdstore)] - - syntax RecordLogsTestField ::= "emitter" [symbol(), klabel(field_RecordLogsTest_emitter)] - - rule ( #loc ( KEVMRecordLogsTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMRecordLogsTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMRecordLogsTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMRecordLogsTest . stdstore ) => 1 ) - - - rule ( #loc ( KEVMRecordLogsTest . emitter ) => 8 ) - - - syntax Bytes ::= KEVMRecordLogsTestContract "." KEVMRecordLogsTestMethod [function(), symbol(), klabel(method_RecordLogsTest)] - - syntax KEVMRecordLogsTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_RecordLogsTest_method-IS_SCRIPT_)] - - syntax KEVMRecordLogsTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_RecordLogsTest_method-IS_TEST_)] - - syntax KEVMRecordLogsTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_RecordLogsTest_method-failed_)] - - syntax KEVMRecordLogsTestMethod ::= "method-setUp" "(" ")" [symbol(), klabel(method_RecordLogsTest_method-setUp_)] - - syntax KEVMRecordLogsTestMethod ::= "method-testRecordLogs" "(" ")" [symbol(), klabel(method_RecordLogsTest_method-testRecordLogs_)] - - syntax KEVMRecordLogsTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_RecordLogsTest_method-vm_)] - - rule ( KEVMRecordLogsTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMRecordLogsTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMRecordLogsTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMRecordLogsTest . method-setUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( KEVMRecordLogsTest . method-testRecordLogs ( ) => #abiCallData ( "testRecordLogs" , .TypedArgs ) ) - - - rule ( KEVMRecordLogsTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testRecordLogs()" ) => 3623393624 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Safe-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMSafeContract - - syntax KEVMSafeContract ::= "KEVMSafe" [symbol(), klabel(contract_Safe)] - - - - syntax Bytes ::= KEVMSafeContract "." KEVMSafeMethod [function(), symbol(), klabel(method_Safe)] - - syntax KEVMSafeMethod ::= "method-withdraw" "(" ")" [symbol(), klabel(method_Safe_method-withdraw_)] - - rule ( KEVMSafe . method-withdraw ( ) => #abiCallData ( "withdraw" , .TypedArgs ) ) - - - rule ( selector ( "withdraw()" ) => 1020253707 ) - - -endmodule - -module SafeTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMSafeTestContract - - syntax KEVMSafeTestContract ::= "KEVMSafeTest" [symbol(), klabel(contract_SafeTest)] - - - - syntax Field ::= SafeTestField - - syntax SafeTestField ::= "IS_TEST" [symbol(), klabel(field_SafeTest_IS_TEST)] - - syntax SafeTestField ::= "_failed" [symbol(), klabel(field_SafeTest__failed)] - - syntax SafeTestField ::= "IS_SCRIPT" [symbol(), klabel(field_SafeTest_IS_SCRIPT)] - - syntax SafeTestField ::= "stdstore" [symbol(), klabel(field_SafeTest_stdstore)] - - syntax SafeTestField ::= "safe" [symbol(), klabel(field_SafeTest_safe)] - - rule ( #loc ( KEVMSafeTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMSafeTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMSafeTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMSafeTest . stdstore ) => 1 ) - - - rule ( #loc ( KEVMSafeTest . safe ) => 8 ) - - - syntax Bytes ::= KEVMSafeTestContract "." KEVMSafeTestMethod [function(), symbol(), klabel(method_SafeTest)] - - syntax KEVMSafeTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_SafeTest_method-IS_SCRIPT_)] - - syntax KEVMSafeTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_SafeTest_method-IS_TEST_)] - - syntax KEVMSafeTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_SafeTest_method-failed_)] - - syntax KEVMSafeTestMethod ::= "method-setUp" "(" ")" [symbol(), klabel(method_SafeTest_method-setUp_)] - - syntax KEVMSafeTestMethod ::= "method-testWithdraw" "(" ")" [symbol(), klabel(method_SafeTest_method-testWithdraw_)] - - syntax KEVMSafeTestMethod ::= "method-testWithdrawFuzz" "(" Int ":" "uint96" ")" [symbol(), klabel(method_SafeTest_method-testWithdrawFuzz_uint96)] - - syntax KEVMSafeTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_SafeTest_method-vm_)] - - rule ( KEVMSafeTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMSafeTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMSafeTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMSafeTest . method-setUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( KEVMSafeTest . method-testWithdraw ( ) => #abiCallData ( "testWithdraw" , .TypedArgs ) ) - - - rule ( KEVMSafeTest . method-testWithdrawFuzz ( V0_amount : uint96 ) => #abiCallData ( "testWithdrawFuzz" , #uint96 ( V0_amount ) , .TypedArgs ) ) - ensures #rangeUInt ( 96 , V0_amount ) - - - rule ( KEVMSafeTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testWithdraw()" ) => 3574182252 ) - - - rule ( selector ( "testWithdrawFuzz(uint96)" ) => 3503970826 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Script-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMScriptContract - - syntax KEVMScriptContract ::= "KEVMScript" [symbol(), klabel(contract_Script)] - - - - syntax Field ::= ScriptField - - syntax ScriptField ::= "IS_SCRIPT" [symbol(), klabel(field_Script_IS_SCRIPT)] - - rule ( #loc ( KEVMScript . IS_SCRIPT ) => 0 ) - - - syntax Bytes ::= KEVMScriptContract "." KEVMScriptMethod [function(), symbol(), klabel(method_Script)] - - syntax KEVMScriptMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_Script_method-IS_SCRIPT_)] - - syntax KEVMScriptMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_Script_method-vm_)] - - rule ( KEVMScript . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMScript . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Setup2Test-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMSetup2TestContract - - syntax KEVMSetup2TestContract ::= "KEVMSetup2Test" [symbol(), klabel(contract_Setup2Test)] - - - - syntax Field ::= Setup2TestField - - syntax Setup2TestField ::= "IS_TEST" [symbol(), klabel(field_Setup2Test_IS_TEST)] - - syntax Setup2TestField ::= "_failed" [symbol(), klabel(field_Setup2Test__failed)] - - syntax Setup2TestField ::= "IS_SCRIPT" [symbol(), klabel(field_Setup2Test_IS_SCRIPT)] - - syntax Setup2TestField ::= "stdstore" [symbol(), klabel(field_Setup2Test_stdstore)] - - syntax Setup2TestField ::= "a" [symbol(), klabel(field_Setup2Test_a)] - - syntax Setup2TestField ::= "b" [symbol(), klabel(field_Setup2Test_b)] - - syntax Setup2TestField ::= "c" [symbol(), klabel(field_Setup2Test_c)] - - rule ( #loc ( KEVMSetup2Test . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMSetup2Test . _failed ) => 0 ) - - - rule ( #loc ( KEVMSetup2Test . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMSetup2Test . stdstore ) => 1 ) - - - rule ( #loc ( KEVMSetup2Test . a ) => 8 ) - - - rule ( #loc ( KEVMSetup2Test . b ) => 9 ) - - - rule ( #loc ( KEVMSetup2Test . c ) => 10 ) - - - syntax Bytes ::= KEVMSetup2TestContract "." KEVMSetup2TestMethod [function(), symbol(), klabel(method_Setup2Test)] - - syntax KEVMSetup2TestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_Setup2Test_method-IS_SCRIPT_)] - - syntax KEVMSetup2TestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_Setup2Test_method-IS_TEST_)] - - syntax KEVMSetup2TestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_Setup2Test_method-failed_)] - - syntax KEVMSetup2TestMethod ::= "method-setUp" "(" ")" [symbol(), klabel(method_Setup2Test_method-setUp_)] - - syntax KEVMSetup2TestMethod ::= "method-testFail_setup" "(" ")" [symbol(), klabel(method_Setup2Test_method-testFail_setup_)] - - syntax KEVMSetup2TestMethod ::= "method-test_setup" "(" ")" [symbol(), klabel(method_Setup2Test_method-test_setup_)] - - syntax KEVMSetup2TestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_Setup2Test_method-vm_)] - - rule ( KEVMSetup2Test . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMSetup2Test . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMSetup2Test . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMSetup2Test . method-setUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( KEVMSetup2Test . method-testFail_setup ( ) => #abiCallData ( "testFail_setup" , .TypedArgs ) ) - - - rule ( KEVMSetup2Test . method-test_setup ( ) => #abiCallData ( "test_setup" , .TypedArgs ) ) - - - rule ( KEVMSetup2Test . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testFail_setup()" ) => 3501410022 ) - - - rule ( selector ( "test_setup()" ) => 2001288179 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module SetUpDeployTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMSetUpDeployTestContract - - syntax KEVMSetUpDeployTestContract ::= "KEVMSetUpDeployTest" [symbol(), klabel(contract_SetUpDeployTest)] - - - - syntax Field ::= SetUpDeployTestField - - syntax SetUpDeployTestField ::= "IS_TEST" [symbol(), klabel(field_SetUpDeployTest_IS_TEST)] - - syntax SetUpDeployTestField ::= "_failed" [symbol(), klabel(field_SetUpDeployTest__failed)] - - syntax SetUpDeployTestField ::= "IS_SCRIPT" [symbol(), klabel(field_SetUpDeployTest_IS_SCRIPT)] - - syntax SetUpDeployTestField ::= "stdstore" [symbol(), klabel(field_SetUpDeployTest_stdstore)] - - syntax SetUpDeployTestField ::= "token" [symbol(), klabel(field_SetUpDeployTest_token)] - - rule ( #loc ( KEVMSetUpDeployTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMSetUpDeployTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMSetUpDeployTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMSetUpDeployTest . stdstore ) => 1 ) - - - rule ( #loc ( KEVMSetUpDeployTest . token ) => 8 ) - - - syntax Bytes ::= KEVMSetUpDeployTestContract "." KEVMSetUpDeployTestMethod [function(), symbol(), klabel(method_SetUpDeployTest)] - - syntax KEVMSetUpDeployTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_SetUpDeployTest_method-IS_SCRIPT_)] - - syntax KEVMSetUpDeployTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_SetUpDeployTest_method-IS_TEST_)] - - syntax KEVMSetUpDeployTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_SetUpDeployTest_method-failed_)] - - syntax KEVMSetUpDeployTestMethod ::= "method-setUp" "(" ")" [symbol(), klabel(method_SetUpDeployTest_method-setUp_)] - - syntax KEVMSetUpDeployTestMethod ::= "method-test_extcodesize" "(" ")" [symbol(), klabel(method_SetUpDeployTest_method-test_extcodesize_)] - - syntax KEVMSetUpDeployTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_SetUpDeployTest_method-vm_)] - - rule ( KEVMSetUpDeployTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMSetUpDeployTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMSetUpDeployTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMSetUpDeployTest . method-setUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( KEVMSetUpDeployTest . method-test_extcodesize ( ) => #abiCallData ( "test_extcodesize" , .TypedArgs ) ) - - - rule ( KEVMSetUpDeployTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "test_extcodesize()" ) => 1657400005 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module SetUpTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMSetUpTestContract - - syntax KEVMSetUpTestContract ::= "KEVMSetUpTest" [symbol(), klabel(contract_SetUpTest)] - - - - syntax Field ::= SetUpTestField - - syntax SetUpTestField ::= "IS_TEST" [symbol(), klabel(field_SetUpTest_IS_TEST)] - - syntax SetUpTestField ::= "_failed" [symbol(), klabel(field_SetUpTest__failed)] - - syntax SetUpTestField ::= "IS_SCRIPT" [symbol(), klabel(field_SetUpTest_IS_SCRIPT)] - - syntax SetUpTestField ::= "stdstore" [symbol(), klabel(field_SetUpTest_stdstore)] - - syntax SetUpTestField ::= "counter" [symbol(), klabel(field_SetUpTest_counter)] - - rule ( #loc ( KEVMSetUpTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMSetUpTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMSetUpTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMSetUpTest . stdstore ) => 1 ) - - - rule ( #loc ( KEVMSetUpTest . counter ) => 8 ) - - - syntax Bytes ::= KEVMSetUpTestContract "." KEVMSetUpTestMethod [function(), symbol(), klabel(method_SetUpTest)] - - syntax KEVMSetUpTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_SetUpTest_method-IS_SCRIPT_)] - - syntax KEVMSetUpTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_SetUpTest_method-IS_TEST_)] - - syntax KEVMSetUpTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_SetUpTest_method-failed_)] - - syntax KEVMSetUpTestMethod ::= "method-setUp" "(" ")" [symbol(), klabel(method_SetUpTest_method-setUp_)] - - syntax KEVMSetUpTestMethod ::= "method-testSetUpCalled" "(" ")" [symbol(), klabel(method_SetUpTest_method-testSetUpCalled_)] - - syntax KEVMSetUpTestMethod ::= "method-testSetUpCalledSymbolic" "(" Int ":" "uint256" ")" [symbol(), klabel(method_SetUpTest_method-testSetUpCalledSymbolic_uint256)] - - syntax KEVMSetUpTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_SetUpTest_method-vm_)] - - rule ( KEVMSetUpTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMSetUpTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMSetUpTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMSetUpTest . method-setUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( KEVMSetUpTest . method-testSetUpCalled ( ) => #abiCallData ( "testSetUpCalled" , .TypedArgs ) ) - - - rule ( KEVMSetUpTest . method-testSetUpCalledSymbolic ( V0_x : uint256 ) => #abiCallData ( "testSetUpCalledSymbolic" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMSetUpTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testSetUpCalled()" ) => 3967804529 ) - - - rule ( selector ( "testSetUpCalledSymbolic(uint256)" ) => 3332480466 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module SignTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMSignTestContract - - syntax KEVMSignTestContract ::= "KEVMSignTest" [symbol(), klabel(contract_SignTest)] - - - - syntax Field ::= SignTestField - - syntax SignTestField ::= "IS_TEST" [symbol(), klabel(field_SignTest_IS_TEST)] - - syntax SignTestField ::= "_failed" [symbol(), klabel(field_SignTest__failed)] - - syntax SignTestField ::= "IS_SCRIPT" [symbol(), klabel(field_SignTest_IS_SCRIPT)] - - syntax SignTestField ::= "stdstore" [symbol(), klabel(field_SignTest_stdstore)] - - rule ( #loc ( KEVMSignTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMSignTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMSignTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMSignTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMSignTestContract "." KEVMSignTestMethod [function(), symbol(), klabel(method_SignTest)] - - syntax KEVMSignTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_SignTest_method-IS_SCRIPT_)] - - syntax KEVMSignTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_SignTest_method-IS_TEST_)] - - syntax KEVMSignTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_SignTest_method-failed_)] - - syntax KEVMSignTestMethod ::= "method-testSign" "(" ")" [symbol(), klabel(method_SignTest_method-testSign_)] - - syntax KEVMSignTestMethod ::= "method-testSign_symbolic" "(" Int ":" "uint256" ")" [symbol(), klabel(method_SignTest_method-testSign_symbolic_uint256)] - - syntax KEVMSignTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_SignTest_method-vm_)] - - rule ( KEVMSignTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMSignTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMSignTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMSignTest . method-testSign ( ) => #abiCallData ( "testSign" , .TypedArgs ) ) - - - rule ( KEVMSignTest . method-testSign_symbolic ( V0_pk : uint256 ) => #abiCallData ( "testSign_symbolic" , #uint256 ( V0_pk ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_pk ) - - - rule ( KEVMSignTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testSign()" ) => 3985576159 ) - - - rule ( selector ( "testSign_symbolic(uint256)" ) => 2942025997 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module AssertTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMAssertTestContract - - syntax KEVMAssertTestContract ::= "KEVMAssertTest" [symbol(), klabel(contract_AssertTest)] - - - - syntax Field ::= AssertTestField - - syntax AssertTestField ::= "IS_TEST" [symbol(), klabel(field_AssertTest_IS_TEST)] - - syntax AssertTestField ::= "_failed" [symbol(), klabel(field_AssertTest__failed)] - - syntax AssertTestField ::= "IS_SCRIPT" [symbol(), klabel(field_AssertTest_IS_SCRIPT)] - - syntax AssertTestField ::= "stdstore" [symbol(), klabel(field_AssertTest_stdstore)] - - syntax AssertTestField ::= "y" [symbol(), klabel(field_AssertTest_y)] - - rule ( #loc ( KEVMAssertTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMAssertTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMAssertTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMAssertTest . stdstore ) => 1 ) - - - rule ( #loc ( KEVMAssertTest . y ) => 8 ) - - - syntax Bytes ::= KEVMAssertTestContract "." KEVMAssertTestMethod [function(), symbol(), klabel(method_AssertTest)] - - syntax KEVMAssertTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_AssertTest_method-IS_SCRIPT_)] - - syntax KEVMAssertTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_AssertTest_method-IS_TEST_)] - - syntax KEVMAssertTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_AssertTest_method-failed_)] - - syntax KEVMAssertTestMethod ::= "method-setUp" "(" ")" [symbol(), klabel(method_AssertTest_method-setUp_)] - - syntax KEVMAssertTestMethod ::= "method-testFail_assert_false" "(" ")" [symbol(), klabel(method_AssertTest_method-testFail_assert_false_)] - - syntax KEVMAssertTestMethod ::= "method-testFail_assert_true" "(" ")" [symbol(), klabel(method_AssertTest_method-testFail_assert_true_)] - - syntax KEVMAssertTestMethod ::= "method-testFail_expect_revert" "(" ")" [symbol(), klabel(method_AssertTest_method-testFail_expect_revert_)] - - syntax KEVMAssertTestMethod ::= "method-test_assert_false" "(" ")" [symbol(), klabel(method_AssertTest_method-test_assert_false_)] - - syntax KEVMAssertTestMethod ::= "method-test_assert_true" "(" ")" [symbol(), klabel(method_AssertTest_method-test_assert_true_)] - - syntax KEVMAssertTestMethod ::= "method-test_assert_true_branch" "(" Int ":" "uint256" ")" [symbol(), klabel(method_AssertTest_method-test_assert_true_branch_uint256)] - - syntax KEVMAssertTestMethod ::= "method-test_failing_branch" "(" Int ":" "uint256" ")" [symbol(), klabel(method_AssertTest_method-test_failing_branch_uint256)] - - syntax KEVMAssertTestMethod ::= "method-test_revert_branch" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_AssertTest_method-test_revert_branch_uint256_uint256)] - - syntax KEVMAssertTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_AssertTest_method-vm_)] - - rule ( KEVMAssertTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMAssertTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMAssertTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMAssertTest . method-setUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( KEVMAssertTest . method-testFail_assert_false ( ) => #abiCallData ( "testFail_assert_false" , .TypedArgs ) ) - - - rule ( KEVMAssertTest . method-testFail_assert_true ( ) => #abiCallData ( "testFail_assert_true" , .TypedArgs ) ) - - - rule ( KEVMAssertTest . method-testFail_expect_revert ( ) => #abiCallData ( "testFail_expect_revert" , .TypedArgs ) ) - - - rule ( KEVMAssertTest . method-test_assert_false ( ) => #abiCallData ( "test_assert_false" , .TypedArgs ) ) - - - rule ( KEVMAssertTest . method-test_assert_true ( ) => #abiCallData ( "test_assert_true" , .TypedArgs ) ) - - - rule ( KEVMAssertTest . method-test_assert_true_branch ( V0_x : uint256 ) => #abiCallData ( "test_assert_true_branch" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMAssertTest . method-test_failing_branch ( V0_x : uint256 ) => #abiCallData ( "test_failing_branch" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMAssertTest . method-test_revert_branch ( V0_x : uint256 , V1_y : uint256 ) => #abiCallData ( "test_revert_branch" , #uint256 ( V0_x ) , #uint256 ( V1_y ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_x ) - andBool ( #rangeUInt ( 256 , V1_y ) - )) - - - rule ( KEVMAssertTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testFail_assert_false()" ) => 2057948334 ) - - - rule ( selector ( "testFail_assert_true()" ) => 409427266 ) - - - rule ( selector ( "testFail_expect_revert()" ) => 709747105 ) - - - rule ( selector ( "test_assert_false()" ) => 1574882301 ) - - - rule ( selector ( "test_assert_true()" ) => 906863826 ) - - - rule ( selector ( "test_assert_true_branch(uint256)" ) => 3267411143 ) - - - rule ( selector ( "test_failing_branch(uint256)" ) => 1176678741 ) - - - rule ( selector ( "test_revert_branch(uint256,uint256)" ) => 2349784459 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module SnapshotTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMSnapshotTestContract - - syntax KEVMSnapshotTestContract ::= "KEVMSnapshotTest" [symbol(), klabel(contract_SnapshotTest)] - - - - syntax Field ::= SnapshotTestField - - syntax SnapshotTestField ::= "IS_TEST" [symbol(), klabel(field_SnapshotTest_IS_TEST)] - - syntax SnapshotTestField ::= "_failed" [symbol(), klabel(field_SnapshotTest__failed)] - - syntax SnapshotTestField ::= "IS_SCRIPT" [symbol(), klabel(field_SnapshotTest_IS_SCRIPT)] - - syntax SnapshotTestField ::= "stdstore" [symbol(), klabel(field_SnapshotTest_stdstore)] - - syntax SnapshotTestField ::= "store" [symbol(), klabel(field_SnapshotTest_store)] - - rule ( #loc ( KEVMSnapshotTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMSnapshotTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMSnapshotTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMSnapshotTest . stdstore ) => 1 ) - - - rule ( #loc ( KEVMSnapshotTest . store ) => 8 ) - - - syntax Bytes ::= KEVMSnapshotTestContract "." KEVMSnapshotTestMethod [function(), symbol(), klabel(method_SnapshotTest)] - - syntax KEVMSnapshotTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_SnapshotTest_method-IS_SCRIPT_)] - - syntax KEVMSnapshotTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_SnapshotTest_method-IS_TEST_)] - - syntax KEVMSnapshotTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_SnapshotTest_method-failed_)] - - syntax KEVMSnapshotTestMethod ::= "method-setUp" "(" ")" [symbol(), klabel(method_SnapshotTest_method-setUp_)] - - syntax KEVMSnapshotTestMethod ::= "method-testSnapshot" "(" ")" [symbol(), klabel(method_SnapshotTest_method-testSnapshot_)] - - syntax KEVMSnapshotTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_SnapshotTest_method-vm_)] - - rule ( KEVMSnapshotTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMSnapshotTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMSnapshotTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMSnapshotTest . method-setUp ( ) => #abiCallData ( "setUp" , .TypedArgs ) ) - - - rule ( KEVMSnapshotTest . method-testSnapshot ( ) => #abiCallData ( "testSnapshot" , .TypedArgs ) ) - - - rule ( KEVMSnapshotTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "setUp()" ) => 177362148 ) - - - rule ( selector ( "testSnapshot()" ) => 3204135818 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Store-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMStoreContract - - syntax KEVMStoreContract ::= "KEVMStore" [symbol(), klabel(contract_Store)] - - - - syntax Field ::= StoreField - - syntax StoreField ::= "testNumber" [symbol(), klabel(field_Store_testNumber)] - - rule ( #loc ( KEVMStore . testNumber ) => 0 ) - - -endmodule - -module StoreTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMStoreTestContract - - syntax KEVMStoreTestContract ::= "KEVMStoreTest" [symbol(), klabel(contract_StoreTest)] - - - - syntax Field ::= StoreTestField - - syntax StoreTestField ::= "IS_TEST" [symbol(), klabel(field_StoreTest_IS_TEST)] - - syntax StoreTestField ::= "_failed" [symbol(), klabel(field_StoreTest__failed)] - - syntax StoreTestField ::= "IS_SCRIPT" [symbol(), klabel(field_StoreTest_IS_SCRIPT)] - - syntax StoreTestField ::= "stdstore" [symbol(), klabel(field_StoreTest_stdstore)] - - rule ( #loc ( KEVMStoreTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMStoreTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMStoreTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMStoreTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMStoreTestContract "." KEVMStoreTestMethod [function(), symbol(), klabel(method_StoreTest)] - - syntax KEVMStoreTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_StoreTest_method-IS_SCRIPT_)] - - syntax KEVMStoreTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_StoreTest_method-IS_TEST_)] - - syntax KEVMStoreTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_StoreTest_method-failed_)] - - syntax KEVMStoreTestMethod ::= "method-testAccesses" "(" ")" [symbol(), klabel(method_StoreTest_method-testAccesses_)] - - syntax KEVMStoreTestMethod ::= "method-testGasLoadColdVM" "(" ")" [symbol(), klabel(method_StoreTest_method-testGasLoadColdVM_)] - - syntax KEVMStoreTestMethod ::= "method-testGasLoadWarmUp" "(" ")" [symbol(), klabel(method_StoreTest_method-testGasLoadWarmUp_)] - - syntax KEVMStoreTestMethod ::= "method-testGasLoadWarmVM" "(" ")" [symbol(), klabel(method_StoreTest_method-testGasLoadWarmVM_)] - - syntax KEVMStoreTestMethod ::= "method-testGasStoreColdVM" "(" ")" [symbol(), klabel(method_StoreTest_method-testGasStoreColdVM_)] - - syntax KEVMStoreTestMethod ::= "method-testGasStoreWarmUp" "(" ")" [symbol(), klabel(method_StoreTest_method-testGasStoreWarmUp_)] - - syntax KEVMStoreTestMethod ::= "method-testGasStoreWarmVM" "(" ")" [symbol(), klabel(method_StoreTest_method-testGasStoreWarmVM_)] - - syntax KEVMStoreTestMethod ::= "method-testLoadNonExistent" "(" ")" [symbol(), klabel(method_StoreTest_method-testLoadNonExistent_)] - - syntax KEVMStoreTestMethod ::= "method-testStoreLoad" "(" ")" [symbol(), klabel(method_StoreTest_method-testStoreLoad_)] - - syntax KEVMStoreTestMethod ::= "method-testStoreLoadNonExistent" "(" ")" [symbol(), klabel(method_StoreTest_method-testStoreLoadNonExistent_)] - - syntax KEVMStoreTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_StoreTest_method-vm_)] - - rule ( KEVMStoreTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMStoreTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMStoreTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMStoreTest . method-testAccesses ( ) => #abiCallData ( "testAccesses" , .TypedArgs ) ) - - - rule ( KEVMStoreTest . method-testGasLoadColdVM ( ) => #abiCallData ( "testGasLoadColdVM" , .TypedArgs ) ) - - - rule ( KEVMStoreTest . method-testGasLoadWarmUp ( ) => #abiCallData ( "testGasLoadWarmUp" , .TypedArgs ) ) - - - rule ( KEVMStoreTest . method-testGasLoadWarmVM ( ) => #abiCallData ( "testGasLoadWarmVM" , .TypedArgs ) ) - - - rule ( KEVMStoreTest . method-testGasStoreColdVM ( ) => #abiCallData ( "testGasStoreColdVM" , .TypedArgs ) ) - - - rule ( KEVMStoreTest . method-testGasStoreWarmUp ( ) => #abiCallData ( "testGasStoreWarmUp" , .TypedArgs ) ) - - - rule ( KEVMStoreTest . method-testGasStoreWarmVM ( ) => #abiCallData ( "testGasStoreWarmVM" , .TypedArgs ) ) - - - rule ( KEVMStoreTest . method-testLoadNonExistent ( ) => #abiCallData ( "testLoadNonExistent" , .TypedArgs ) ) - - - rule ( KEVMStoreTest . method-testStoreLoad ( ) => #abiCallData ( "testStoreLoad" , .TypedArgs ) ) - - - rule ( KEVMStoreTest . method-testStoreLoadNonExistent ( ) => #abiCallData ( "testStoreLoadNonExistent" , .TypedArgs ) ) - - - rule ( KEVMStoreTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testAccesses()" ) => 159648693 ) - - - rule ( selector ( "testGasLoadColdVM()" ) => 3801282741 ) - - - rule ( selector ( "testGasLoadWarmUp()" ) => 604011046 ) - - - rule ( selector ( "testGasLoadWarmVM()" ) => 2607902342 ) - - - rule ( selector ( "testGasStoreColdVM()" ) => 2309593716 ) - - - rule ( selector ( "testGasStoreWarmUp()" ) => 1546465326 ) - - - rule ( selector ( "testGasStoreWarmVM()" ) => 100073271 ) - - - rule ( selector ( "testLoadNonExistent()" ) => 2275977243 ) - - - rule ( selector ( "testStoreLoad()" ) => 1208516723 ) - - - rule ( selector ( "testStoreLoadNonExistent()" ) => 3912017339 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module SymbolicStorageTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMSymbolicStorageTestContract - - syntax KEVMSymbolicStorageTestContract ::= "KEVMSymbolicStorageTest" [symbol(), klabel(contract_SymbolicStorageTest)] - - - - syntax Field ::= SymbolicStorageTestField - - syntax SymbolicStorageTestField ::= "IS_TEST" [symbol(), klabel(field_SymbolicStorageTest_IS_TEST)] - - syntax SymbolicStorageTestField ::= "_failed" [symbol(), klabel(field_SymbolicStorageTest__failed)] - - syntax SymbolicStorageTestField ::= "IS_SCRIPT" [symbol(), klabel(field_SymbolicStorageTest_IS_SCRIPT)] - - syntax SymbolicStorageTestField ::= "stdstore" [symbol(), klabel(field_SymbolicStorageTest_stdstore)] - - rule ( #loc ( KEVMSymbolicStorageTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMSymbolicStorageTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMSymbolicStorageTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMSymbolicStorageTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMSymbolicStorageTestContract "." KEVMSymbolicStorageTestMethod [function(), symbol(), klabel(method_SymbolicStorageTest)] - - syntax KEVMSymbolicStorageTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_SymbolicStorageTest_method-IS_SCRIPT_)] - - syntax KEVMSymbolicStorageTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_SymbolicStorageTest_method-IS_TEST_)] - - syntax KEVMSymbolicStorageTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_SymbolicStorageTest_method-failed_)] - - syntax KEVMSymbolicStorageTestMethod ::= "method-kevm" "(" ")" [symbol(), klabel(method_SymbolicStorageTest_method-kevm_)] - - syntax KEVMSymbolicStorageTestMethod ::= "method-testEmptyInitialStorage" "(" Int ":" "uint256" ")" [symbol(), klabel(method_SymbolicStorageTest_method-testEmptyInitialStorage_uint256)] - - syntax KEVMSymbolicStorageTestMethod ::= "method-testFail_SymbolicStorage" "(" Int ":" "uint256" ")" [symbol(), klabel(method_SymbolicStorageTest_method-testFail_SymbolicStorage_uint256)] - - syntax KEVMSymbolicStorageTestMethod ::= "method-testFail_SymbolicStorage1" "(" Int ":" "uint256" ")" [symbol(), klabel(method_SymbolicStorageTest_method-testFail_SymbolicStorage1_uint256)] - - syntax KEVMSymbolicStorageTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_SymbolicStorageTest_method-vm_)] - - rule ( KEVMSymbolicStorageTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMSymbolicStorageTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMSymbolicStorageTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMSymbolicStorageTest . method-kevm ( ) => #abiCallData ( "kevm" , .TypedArgs ) ) - - - rule ( KEVMSymbolicStorageTest . method-testEmptyInitialStorage ( V0_slot : uint256 ) => #abiCallData ( "testEmptyInitialStorage" , #uint256 ( V0_slot ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_slot ) - - - rule ( KEVMSymbolicStorageTest . method-testFail_SymbolicStorage ( V0_slot : uint256 ) => #abiCallData ( "testFail_SymbolicStorage" , #uint256 ( V0_slot ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_slot ) - - - rule ( KEVMSymbolicStorageTest . method-testFail_SymbolicStorage1 ( V0_slot : uint256 ) => #abiCallData ( "testFail_SymbolicStorage1" , #uint256 ( V0_slot ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_slot ) - - - rule ( KEVMSymbolicStorageTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "kevm()" ) => 3601001590 ) - - - rule ( selector ( "testEmptyInitialStorage(uint256)" ) => 2517793094 ) - - - rule ( selector ( "testFail_SymbolicStorage(uint256)" ) => 821477045 ) - - - rule ( selector ( "testFail_SymbolicStorage1(uint256)" ) => 2899744320 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module SymbolicStore-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMSymbolicStoreContract - - syntax KEVMSymbolicStoreContract ::= "KEVMSymbolicStore" [symbol(), klabel(contract_SymbolicStore)] - - - - syntax Field ::= SymbolicStoreField - - syntax SymbolicStoreField ::= "testNumber" [symbol(), klabel(field_SymbolicStore_testNumber)] - - rule ( #loc ( KEVMSymbolicStore . testNumber ) => 0 ) - - -endmodule - -module Test-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMTestContract - - syntax KEVMTestContract ::= "KEVMTest" [symbol(), klabel(contract_Test)] - - - - syntax Field ::= TestField - - syntax TestField ::= "IS_TEST" [symbol(), klabel(field_Test_IS_TEST)] - - syntax TestField ::= "_failed" [symbol(), klabel(field_Test__failed)] - - syntax TestField ::= "IS_SCRIPT" [symbol(), klabel(field_Test_IS_SCRIPT)] - - syntax TestField ::= "stdstore" [symbol(), klabel(field_Test_stdstore)] - - rule ( #loc ( KEVMTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMTestContract "." KEVMTestMethod [function(), symbol(), klabel(method_Test)] - - syntax KEVMTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_Test_method-IS_SCRIPT_)] - - syntax KEVMTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_Test_method-IS_TEST_)] - - syntax KEVMTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_Test_method-failed_)] - - syntax KEVMTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_Test_method-vm_)] - - rule ( KEVMTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module stdError-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMstdErrorContract - - syntax KEVMstdErrorContract ::= "KEVMstdError" [symbol(), klabel(contract_stdError)] - - - - syntax Bytes ::= KEVMstdErrorContract "." KEVMstdErrorMethod [function(), symbol(), klabel(method_stdError)] - - syntax KEVMstdErrorMethod ::= "method-arithmeticError" "(" ")" [symbol(), klabel(method_stdError_method-arithmeticError_)] - - syntax KEVMstdErrorMethod ::= "method-assertionError" "(" ")" [symbol(), klabel(method_stdError_method-assertionError_)] - - syntax KEVMstdErrorMethod ::= "method-divisionError" "(" ")" [symbol(), klabel(method_stdError_method-divisionError_)] - - syntax KEVMstdErrorMethod ::= "method-encodeStorageError" "(" ")" [symbol(), klabel(method_stdError_method-encodeStorageError_)] - - syntax KEVMstdErrorMethod ::= "method-enumConversionError" "(" ")" [symbol(), klabel(method_stdError_method-enumConversionError_)] - - syntax KEVMstdErrorMethod ::= "method-indexOOBError" "(" ")" [symbol(), klabel(method_stdError_method-indexOOBError_)] - - syntax KEVMstdErrorMethod ::= "method-lowLevelError" "(" ")" [symbol(), klabel(method_stdError_method-lowLevelError_)] - - syntax KEVMstdErrorMethod ::= "method-memOverflowError" "(" ")" [symbol(), klabel(method_stdError_method-memOverflowError_)] - - syntax KEVMstdErrorMethod ::= "method-popError" "(" ")" [symbol(), klabel(method_stdError_method-popError_)] - - syntax KEVMstdErrorMethod ::= "method-zeroVarError" "(" ")" [symbol(), klabel(method_stdError_method-zeroVarError_)] - - rule ( KEVMstdError . method-arithmeticError ( ) => #abiCallData ( "arithmeticError" , .TypedArgs ) ) - - - rule ( KEVMstdError . method-assertionError ( ) => #abiCallData ( "assertionError" , .TypedArgs ) ) - - - rule ( KEVMstdError . method-divisionError ( ) => #abiCallData ( "divisionError" , .TypedArgs ) ) - - - rule ( KEVMstdError . method-encodeStorageError ( ) => #abiCallData ( "encodeStorageError" , .TypedArgs ) ) - - - rule ( KEVMstdError . method-enumConversionError ( ) => #abiCallData ( "enumConversionError" , .TypedArgs ) ) - - - rule ( KEVMstdError . method-indexOOBError ( ) => #abiCallData ( "indexOOBError" , .TypedArgs ) ) - - - rule ( KEVMstdError . method-lowLevelError ( ) => #abiCallData ( "lowLevelError" , .TypedArgs ) ) - - - rule ( KEVMstdError . method-memOverflowError ( ) => #abiCallData ( "memOverflowError" , .TypedArgs ) ) - - - rule ( KEVMstdError . method-popError ( ) => #abiCallData ( "popError" , .TypedArgs ) ) - - - rule ( KEVMstdError . method-zeroVarError ( ) => #abiCallData ( "zeroVarError" , .TypedArgs ) ) - - - rule ( selector ( "arithmeticError()" ) => 2308253967 ) - - - rule ( selector ( "assertionError()" ) => 271788407 ) - - - rule ( selector ( "divisionError()" ) => 4202187332 ) - - - rule ( selector ( "encodeStorageError()" ) => 3512788190 ) - - - rule ( selector ( "enumConversionError()" ) => 501503328 ) - - - rule ( selector ( "indexOOBError()" ) => 99517970 ) - - - rule ( selector ( "lowLevelError()" ) => 2889716422 ) - - - rule ( selector ( "memOverflowError()" ) => 2557239144 ) - - - rule ( selector ( "popError()" ) => 2989344077 ) - - - rule ( selector ( "zeroVarError()" ) => 3061221850 ) - - -endmodule - -module stdMath-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMstdMathContract - - syntax KEVMstdMathContract ::= "KEVMstdMath" [symbol(), klabel(contract_stdMath)] - - - -endmodule - -module stdStorage-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMstdStorageContract - - syntax KEVMstdStorageContract ::= "KEVMstdStorage" [symbol(), klabel(contract_stdStorage)] - - - - syntax Bytes ::= KEVMstdStorageContract "." KEVMstdStorageMethod [function(), symbol(), klabel(method_stdStorage)] - - syntax KEVMstdStorageMethod ::= "method-bytesToBytes32" "(" Bytes ":" "bytes" "," Int ":" "uint256" ")" [symbol(), klabel(method_stdStorage_method-bytesToBytes32_bytes_uint256)] - - rule ( KEVMstdStorage . method-bytesToBytes32 ( V0_b : bytes , V1_offset : uint256 ) => #abiCallData ( "bytesToBytes32" , #bytes ( V0_b ) , #uint256 ( V1_offset ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 128 , lengthBytes ( V0_b ) ) - andBool ( #rangeUInt ( 256 , V1_offset ) - )) - - - rule ( selector ( "bytesToBytes32(bytes,uint256)" ) => 1398294841 ) - - -endmodule - -module TestNumber-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMTestNumberContract - - syntax KEVMTestNumberContract ::= "KEVMTestNumber" [symbol(), klabel(contract_TestNumber)] - - - - syntax Field ::= TestNumberField - - syntax TestNumberField ::= "IS_TEST" [symbol(), klabel(field_TestNumber_IS_TEST)] - - syntax TestNumberField ::= "_failed" [symbol(), klabel(field_TestNumber__failed)] - - syntax TestNumberField ::= "testNumber" [symbol(), klabel(field_TestNumber_testNumber)] - - rule ( #loc ( KEVMTestNumber . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMTestNumber . _failed ) => 0 ) - - - rule ( #loc ( KEVMTestNumber . testNumber ) => 1 ) - - - syntax Bytes ::= KEVMTestNumberContract "." KEVMTestNumberMethod [function(), symbol(), klabel(method_TestNumber)] - - syntax KEVMTestNumberMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_TestNumber_method-IS_TEST_)] - - syntax KEVMTestNumberMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_TestNumber_method-failed_)] - - syntax KEVMTestNumberMethod ::= "method-t" "(" Int ":" "uint256" ")" [symbol(), klabel(method_TestNumber_method-t_uint256)] - - syntax KEVMTestNumberMethod ::= "method-testNumber" "(" ")" [symbol(), klabel(method_TestNumber_method-testNumber_)] - - rule ( KEVMTestNumber . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMTestNumber . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMTestNumber . method-t ( V0_a : uint256 ) => #abiCallData ( "t" , #uint256 ( V0_a ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_a ) - - - rule ( KEVMTestNumber . method-testNumber ( ) => #abiCallData ( "testNumber" , .TypedArgs ) ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "t(uint256)" ) => 2950864753 ) - - - rule ( selector ( "testNumber()" ) => 219771635 ) - - -endmodule - -module ToStringTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMToStringTestContract - - syntax KEVMToStringTestContract ::= "KEVMToStringTest" [symbol(), klabel(contract_ToStringTest)] - - - - syntax Field ::= ToStringTestField - - syntax ToStringTestField ::= "IS_TEST" [symbol(), klabel(field_ToStringTest_IS_TEST)] - - syntax ToStringTestField ::= "_failed" [symbol(), klabel(field_ToStringTest__failed)] - - syntax ToStringTestField ::= "IS_SCRIPT" [symbol(), klabel(field_ToStringTest_IS_SCRIPT)] - - syntax ToStringTestField ::= "stdstore" [symbol(), klabel(field_ToStringTest_stdstore)] - - rule ( #loc ( KEVMToStringTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMToStringTest . _failed ) => 0 ) - - - rule ( #loc ( KEVMToStringTest . IS_SCRIPT ) => 0 ) - - - rule ( #loc ( KEVMToStringTest . stdstore ) => 1 ) - - - syntax Bytes ::= KEVMToStringTestContract "." KEVMToStringTestMethod [function(), symbol(), klabel(method_ToStringTest)] - - syntax KEVMToStringTestMethod ::= "method-IS_SCRIPT" "(" ")" [symbol(), klabel(method_ToStringTest_method-IS_SCRIPT_)] - - syntax KEVMToStringTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_ToStringTest_method-IS_TEST_)] - - syntax KEVMToStringTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_ToStringTest_method-failed_)] - - syntax KEVMToStringTestMethod ::= "method-testAddressToString" "(" ")" [symbol(), klabel(method_ToStringTest_method-testAddressToString_)] - - syntax KEVMToStringTestMethod ::= "method-testBoolToString" "(" ")" [symbol(), klabel(method_ToStringTest_method-testBoolToString_)] - - syntax KEVMToStringTestMethod ::= "method-testBytes32ToString" "(" ")" [symbol(), klabel(method_ToStringTest_method-testBytes32ToString_)] - - syntax KEVMToStringTestMethod ::= "method-testBytesToString" "(" ")" [symbol(), klabel(method_ToStringTest_method-testBytesToString_)] - - syntax KEVMToStringTestMethod ::= "method-testIntToString" "(" ")" [symbol(), klabel(method_ToStringTest_method-testIntToString_)] - - syntax KEVMToStringTestMethod ::= "method-testUint256ToString" "(" ")" [symbol(), klabel(method_ToStringTest_method-testUint256ToString_)] - - syntax KEVMToStringTestMethod ::= "method-vm" "(" ")" [symbol(), klabel(method_ToStringTest_method-vm_)] - - rule ( KEVMToStringTest . method-IS_SCRIPT ( ) => #abiCallData ( "IS_SCRIPT" , .TypedArgs ) ) - - - rule ( KEVMToStringTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMToStringTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( KEVMToStringTest . method-testAddressToString ( ) => #abiCallData ( "testAddressToString" , .TypedArgs ) ) - - - rule ( KEVMToStringTest . method-testBoolToString ( ) => #abiCallData ( "testBoolToString" , .TypedArgs ) ) - - - rule ( KEVMToStringTest . method-testBytes32ToString ( ) => #abiCallData ( "testBytes32ToString" , .TypedArgs ) ) - - - rule ( KEVMToStringTest . method-testBytesToString ( ) => #abiCallData ( "testBytesToString" , .TypedArgs ) ) - - - rule ( KEVMToStringTest . method-testIntToString ( ) => #abiCallData ( "testIntToString" , .TypedArgs ) ) - - - rule ( KEVMToStringTest . method-testUint256ToString ( ) => #abiCallData ( "testUint256ToString" , .TypedArgs ) ) - - - rule ( KEVMToStringTest . method-vm ( ) => #abiCallData ( "vm" , .TypedArgs ) ) - - - rule ( selector ( "IS_SCRIPT()" ) => 4174167879 ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - - rule ( selector ( "testAddressToString()" ) => 808104093 ) - - - rule ( selector ( "testBoolToString()" ) => 1097632899 ) - - - rule ( selector ( "testBytes32ToString()" ) => 204853932 ) - - - rule ( selector ( "testBytesToString()" ) => 1397983993 ) - - - rule ( selector ( "testIntToString()" ) => 4039840763 ) - - - rule ( selector ( "testUint256ToString()" ) => 98980210 ) - - - rule ( selector ( "vm()" ) => 980845667 ) - - -endmodule - -module Token-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMTokenContract - - syntax KEVMTokenContract ::= "KEVMToken" [symbol(), klabel(contract_Token)] - - - - syntax Field ::= TokenField - - syntax TokenField ::= "x" [symbol(), klabel(field_Token_x)] - - syntax TokenField ::= "balances" [symbol(), klabel(field_Token_balances)] - - syntax TokenField ::= "allowances" [symbol(), klabel(field_Token_allowances)] - - syntax TokenField ::= "name" [symbol(), klabel(field_Token_name)] - - syntax TokenField ::= "y" [symbol(), klabel(field_Token_y)] - - syntax TokenField ::= "z" [symbol(), klabel(field_Token_z)] - - syntax TokenField ::= "a" [symbol(), klabel(field_Token_a)] - - syntax TokenField ::= "foos" [symbol(), klabel(field_Token_foos)] - - rule ( #loc ( KEVMToken . x ) => 0 ) - - - rule ( #loc ( KEVMToken . balances ) => 1 ) - - - rule ( #loc ( KEVMToken . allowances ) => 2 ) - - - rule ( #loc ( KEVMToken . name ) => 3 ) - - - rule ( #loc ( KEVMToken . y ) => 4 ) - - - rule ( #loc ( KEVMToken . z ) => 4 ) - - - rule ( #loc ( KEVMToken . a ) => 4 ) - - - rule ( #loc ( KEVMToken . foos ) => 5 ) - - - syntax Bytes ::= KEVMTokenContract "." KEVMTokenMethod [function(), symbol(), klabel(method_Token)] - - syntax KEVMTokenMethod ::= "method-transfer" "(" Int ":" "address" "," Int ":" "uint256" ")" [symbol(), klabel(method_Token_method-transfer_address_uint256)] - - rule ( KEVMToken . method-transfer ( V0_dst : address , V1_amount : uint256 ) => #abiCallData ( "transfer" , #address ( V0_dst ) , #uint256 ( V1_amount ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_dst ) - andBool ( #rangeUInt ( 256 , V1_amount ) - )) - - - rule ( selector ( "transfer(address,uint256)" ) => 2835717307 ) - - -endmodule - -module BytesTypeTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMBytesTypeTestContract - - syntax KEVMBytesTypeTestContract ::= "KEVMBytesTypeTest" [symbol(), klabel(contract_BytesTypeTest)] - - - - syntax Bytes ::= KEVMBytesTypeTestContract "." KEVMBytesTypeTestMethod [function(), symbol(), klabel(method_BytesTypeTest)] - - syntax KEVMBytesTypeTestMethod ::= "method-testFail_bytes32" "(" Int ":" "bytes32" ")" [symbol(), klabel(method_BytesTypeTest_method-testFail_bytes32_bytes32)] - - syntax KEVMBytesTypeTestMethod ::= "method-testFail_bytes4" "(" Int ":" "bytes4" ")" [symbol(), klabel(method_BytesTypeTest_method-testFail_bytes4_bytes4)] - - syntax KEVMBytesTypeTestMethod ::= "method-test_bytes32" "(" Int ":" "bytes32" ")" [symbol(), klabel(method_BytesTypeTest_method-test_bytes32_bytes32)] - - syntax KEVMBytesTypeTestMethod ::= "method-test_bytes32_fail" "(" Int ":" "bytes32" ")" [symbol(), klabel(method_BytesTypeTest_method-test_bytes32_fail_bytes32)] - - syntax KEVMBytesTypeTestMethod ::= "method-test_bytes4" "(" Int ":" "bytes4" ")" [symbol(), klabel(method_BytesTypeTest_method-test_bytes4_bytes4)] - - syntax KEVMBytesTypeTestMethod ::= "method-test_bytes4_fail" "(" Int ":" "bytes4" ")" [symbol(), klabel(method_BytesTypeTest_method-test_bytes4_fail_bytes4)] - - rule ( KEVMBytesTypeTest . method-testFail_bytes32 ( V0_x : bytes32 ) => #abiCallData ( "testFail_bytes32" , #bytes32 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMBytesTypeTest . method-testFail_bytes4 ( V0_x : bytes4 ) => #abiCallData ( "testFail_bytes4" , #bytes4 ( V0_x ) , .TypedArgs ) ) - ensures #rangeBytes ( 4 , V0_x ) - - - rule ( KEVMBytesTypeTest . method-test_bytes32 ( V0_x : bytes32 ) => #abiCallData ( "test_bytes32" , #bytes32 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMBytesTypeTest . method-test_bytes32_fail ( V0_x : bytes32 ) => #abiCallData ( "test_bytes32_fail" , #bytes32 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMBytesTypeTest . method-test_bytes4 ( V0_x : bytes4 ) => #abiCallData ( "test_bytes4" , #bytes4 ( V0_x ) , .TypedArgs ) ) - ensures #rangeBytes ( 4 , V0_x ) - - - rule ( KEVMBytesTypeTest . method-test_bytes4_fail ( V0_x : bytes4 ) => #abiCallData ( "test_bytes4_fail" , #bytes4 ( V0_x ) , .TypedArgs ) ) - ensures #rangeBytes ( 4 , V0_x ) - - - rule ( selector ( "testFail_bytes32(bytes32)" ) => 4289330289 ) - - - rule ( selector ( "testFail_bytes4(bytes4)" ) => 3602852570 ) - - - rule ( selector ( "test_bytes32(bytes32)" ) => 3436986189 ) - - - rule ( selector ( "test_bytes32_fail(bytes32)" ) => 392713219 ) - - - rule ( selector ( "test_bytes4(bytes4)" ) => 2814412853 ) - - - rule ( selector ( "test_bytes4_fail(bytes4)" ) => 2510894010 ) - - -endmodule - -module UintTypeTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMUintTypeTestContract - - syntax KEVMUintTypeTestContract ::= "KEVMUintTypeTest" [symbol(), klabel(contract_UintTypeTest)] - - - - syntax Bytes ::= KEVMUintTypeTestContract "." KEVMUintTypeTestMethod [function(), symbol(), klabel(method_UintTypeTest)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint104" "(" Int ":" "uint104" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint104_uint104)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint112" "(" Int ":" "uint112" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint112_uint112)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint120" "(" Int ":" "uint120" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint120_uint120)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint128" "(" Int ":" "uint128" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint128_uint128)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint136" "(" Int ":" "uint136" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint136_uint136)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint144" "(" Int ":" "uint144" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint144_uint144)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint152" "(" Int ":" "uint152" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint152_uint152)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint16" "(" Int ":" "uint16" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint16_uint16)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint160" "(" Int ":" "uint160" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint160_uint160)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint168" "(" Int ":" "uint168" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint168_uint168)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint176" "(" Int ":" "uint176" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint176_uint176)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint184" "(" Int ":" "uint184" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint184_uint184)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint192" "(" Int ":" "uint192" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint192_uint192)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint200" "(" Int ":" "uint200" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint200_uint200)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint208" "(" Int ":" "uint208" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint208_uint208)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint216" "(" Int ":" "uint216" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint216_uint216)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint224" "(" Int ":" "uint224" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint224_uint224)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint232" "(" Int ":" "uint232" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint232_uint232)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint24" "(" Int ":" "uint24" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint24_uint24)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint240" "(" Int ":" "uint240" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint240_uint240)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint248" "(" Int ":" "uint248" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint248_uint248)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint256" "(" Int ":" "uint256" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint256_uint256)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint32" "(" Int ":" "uint32" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint32_uint32)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint40" "(" Int ":" "uint40" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint40_uint40)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint48" "(" Int ":" "uint48" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint48_uint48)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint56" "(" Int ":" "uint56" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint56_uint56)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint64" "(" Int ":" "uint64" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint64_uint64)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint72" "(" Int ":" "uint72" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint72_uint72)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint8" "(" Int ":" "uint8" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint8_uint8)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint80" "(" Int ":" "uint80" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint80_uint80)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint88" "(" Int ":" "uint88" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint88_uint88)] - - syntax KEVMUintTypeTestMethod ::= "method-testFail_uint96" "(" Int ":" "uint96" ")" [symbol(), klabel(method_UintTypeTest_method-testFail_uint96_uint96)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint104" "(" Int ":" "uint104" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint104_uint104)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint104_fail" "(" Int ":" "uint104" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint104_fail_uint104)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint112" "(" Int ":" "uint112" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint112_uint112)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint112_fail" "(" Int ":" "uint112" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint112_fail_uint112)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint120" "(" Int ":" "uint120" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint120_uint120)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint120_fail" "(" Int ":" "uint120" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint120_fail_uint120)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint128" "(" Int ":" "uint128" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint128_uint128)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint128_fail" "(" Int ":" "uint128" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint128_fail_uint128)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint136" "(" Int ":" "uint136" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint136_uint136)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint136_fail" "(" Int ":" "uint136" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint136_fail_uint136)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint144" "(" Int ":" "uint144" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint144_uint144)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint144_fail" "(" Int ":" "uint144" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint144_fail_uint144)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint152" "(" Int ":" "uint152" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint152_uint152)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint152_fail" "(" Int ":" "uint152" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint152_fail_uint152)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint16" "(" Int ":" "uint16" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint16_uint16)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint160" "(" Int ":" "uint160" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint160_uint160)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint160_fail" "(" Int ":" "uint160" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint160_fail_uint160)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint168" "(" Int ":" "uint168" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint168_uint168)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint168_fail" "(" Int ":" "uint168" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint168_fail_uint168)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint16_fail" "(" Int ":" "uint16" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint16_fail_uint16)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint176" "(" Int ":" "uint176" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint176_uint176)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint176_fail" "(" Int ":" "uint176" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint176_fail_uint176)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint184" "(" Int ":" "uint184" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint184_uint184)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint184_fail" "(" Int ":" "uint184" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint184_fail_uint184)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint192" "(" Int ":" "uint192" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint192_uint192)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint192_fail" "(" Int ":" "uint192" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint192_fail_uint192)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint200" "(" Int ":" "uint200" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint200_uint200)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint200_fail" "(" Int ":" "uint200" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint200_fail_uint200)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint208" "(" Int ":" "uint208" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint208_uint208)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint208_fail" "(" Int ":" "uint208" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint208_fail_uint208)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint216" "(" Int ":" "uint216" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint216_uint216)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint216_fail" "(" Int ":" "uint216" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint216_fail_uint216)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint224" "(" Int ":" "uint224" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint224_uint224)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint224_fail" "(" Int ":" "uint224" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint224_fail_uint224)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint232" "(" Int ":" "uint232" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint232_uint232)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint232_fail" "(" Int ":" "uint232" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint232_fail_uint232)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint24" "(" Int ":" "uint24" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint24_uint24)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint240" "(" Int ":" "uint240" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint240_uint240)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint240_fail" "(" Int ":" "uint240" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint240_fail_uint240)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint248" "(" Int ":" "uint248" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint248_uint248)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint248_fail" "(" Int ":" "uint248" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint248_fail_uint248)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint24_fail" "(" Int ":" "uint24" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint24_fail_uint24)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint256" "(" Int ":" "uint256" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint256_uint256)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint256_fail" "(" Int ":" "uint256" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint256_fail_uint256)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint32" "(" Int ":" "uint32" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint32_uint32)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint32_fail" "(" Int ":" "uint32" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint32_fail_uint32)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint40" "(" Int ":" "uint40" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint40_uint40)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint40_fail" "(" Int ":" "uint40" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint40_fail_uint40)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint48" "(" Int ":" "uint48" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint48_uint48)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint48_fail" "(" Int ":" "uint48" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint48_fail_uint48)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint56" "(" Int ":" "uint56" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint56_uint56)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint56_fail" "(" Int ":" "uint56" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint56_fail_uint56)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint64" "(" Int ":" "uint64" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint64_uint64)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint64_fail" "(" Int ":" "uint64" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint64_fail_uint64)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint72" "(" Int ":" "uint72" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint72_uint72)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint72_fail" "(" Int ":" "uint72" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint72_fail_uint72)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint8" "(" Int ":" "uint8" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint8_uint8)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint80" "(" Int ":" "uint80" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint80_uint80)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint80_fail" "(" Int ":" "uint80" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint80_fail_uint80)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint88" "(" Int ":" "uint88" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint88_uint88)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint88_fail" "(" Int ":" "uint88" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint88_fail_uint88)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint8_fail" "(" Int ":" "uint8" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint8_fail_uint8)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint96" "(" Int ":" "uint96" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint96_uint96)] - - syntax KEVMUintTypeTestMethod ::= "method-test_uint96_fail" "(" Int ":" "uint96" ")" [symbol(), klabel(method_UintTypeTest_method-test_uint96_fail_uint96)] - - rule ( KEVMUintTypeTest . method-testFail_uint104 ( V0_x : uint104 ) => #abiCallData ( "testFail_uint104" , #uint104 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 104 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint112 ( V0_x : uint112 ) => #abiCallData ( "testFail_uint112" , #uint112 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 112 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint120 ( V0_x : uint120 ) => #abiCallData ( "testFail_uint120" , #uint120 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 120 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint128 ( V0_x : uint128 ) => #abiCallData ( "testFail_uint128" , #uint128 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 128 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint136 ( V0_x : uint136 ) => #abiCallData ( "testFail_uint136" , #uint136 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 136 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint144 ( V0_x : uint144 ) => #abiCallData ( "testFail_uint144" , #uint144 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 144 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint152 ( V0_x : uint152 ) => #abiCallData ( "testFail_uint152" , #uint152 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 152 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint16 ( V0_x : uint16 ) => #abiCallData ( "testFail_uint16" , #uint16 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 16 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint160 ( V0_x : uint160 ) => #abiCallData ( "testFail_uint160" , #uint160 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 160 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint168 ( V0_x : uint168 ) => #abiCallData ( "testFail_uint168" , #uint168 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 168 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint176 ( V0_x : uint176 ) => #abiCallData ( "testFail_uint176" , #uint176 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 176 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint184 ( V0_x : uint184 ) => #abiCallData ( "testFail_uint184" , #uint184 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 184 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint192 ( V0_x : uint192 ) => #abiCallData ( "testFail_uint192" , #uint192 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 192 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint200 ( V0_x : uint200 ) => #abiCallData ( "testFail_uint200" , #uint200 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 200 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint208 ( V0_x : uint208 ) => #abiCallData ( "testFail_uint208" , #uint208 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 208 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint216 ( V0_x : uint216 ) => #abiCallData ( "testFail_uint216" , #uint216 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 216 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint224 ( V0_x : uint224 ) => #abiCallData ( "testFail_uint224" , #uint224 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 224 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint232 ( V0_x : uint232 ) => #abiCallData ( "testFail_uint232" , #uint232 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 232 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint24 ( V0_x : uint24 ) => #abiCallData ( "testFail_uint24" , #uint24 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 24 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint240 ( V0_x : uint240 ) => #abiCallData ( "testFail_uint240" , #uint240 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 240 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint248 ( V0_x : uint248 ) => #abiCallData ( "testFail_uint248" , #uint248 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 248 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint256 ( V0_x : uint256 ) => #abiCallData ( "testFail_uint256" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint32 ( V0_x : uint32 ) => #abiCallData ( "testFail_uint32" , #uint32 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 32 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint40 ( V0_x : uint40 ) => #abiCallData ( "testFail_uint40" , #uint40 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 40 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint48 ( V0_x : uint48 ) => #abiCallData ( "testFail_uint48" , #uint48 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 48 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint56 ( V0_x : uint56 ) => #abiCallData ( "testFail_uint56" , #uint56 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 56 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint64 ( V0_x : uint64 ) => #abiCallData ( "testFail_uint64" , #uint64 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 64 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint72 ( V0_x : uint72 ) => #abiCallData ( "testFail_uint72" , #uint72 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 72 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint8 ( V0_x : uint8 ) => #abiCallData ( "testFail_uint8" , #uint8 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 8 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint80 ( V0_x : uint80 ) => #abiCallData ( "testFail_uint80" , #uint80 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 80 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint88 ( V0_x : uint88 ) => #abiCallData ( "testFail_uint88" , #uint88 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 88 , V0_x ) - - - rule ( KEVMUintTypeTest . method-testFail_uint96 ( V0_x : uint96 ) => #abiCallData ( "testFail_uint96" , #uint96 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 96 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint104 ( V0_x : uint104 ) => #abiCallData ( "test_uint104" , #uint104 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 104 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint104_fail ( V0_x : uint104 ) => #abiCallData ( "test_uint104_fail" , #uint104 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 104 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint112 ( V0_x : uint112 ) => #abiCallData ( "test_uint112" , #uint112 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 112 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint112_fail ( V0_x : uint112 ) => #abiCallData ( "test_uint112_fail" , #uint112 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 112 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint120 ( V0_x : uint120 ) => #abiCallData ( "test_uint120" , #uint120 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 120 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint120_fail ( V0_x : uint120 ) => #abiCallData ( "test_uint120_fail" , #uint120 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 120 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint128 ( V0_x : uint128 ) => #abiCallData ( "test_uint128" , #uint128 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 128 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint128_fail ( V0_x : uint128 ) => #abiCallData ( "test_uint128_fail" , #uint128 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 128 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint136 ( V0_x : uint136 ) => #abiCallData ( "test_uint136" , #uint136 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 136 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint136_fail ( V0_x : uint136 ) => #abiCallData ( "test_uint136_fail" , #uint136 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 136 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint144 ( V0_x : uint144 ) => #abiCallData ( "test_uint144" , #uint144 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 144 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint144_fail ( V0_x : uint144 ) => #abiCallData ( "test_uint144_fail" , #uint144 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 144 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint152 ( V0_x : uint152 ) => #abiCallData ( "test_uint152" , #uint152 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 152 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint152_fail ( V0_x : uint152 ) => #abiCallData ( "test_uint152_fail" , #uint152 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 152 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint16 ( V0_x : uint16 ) => #abiCallData ( "test_uint16" , #uint16 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 16 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint160 ( V0_x : uint160 ) => #abiCallData ( "test_uint160" , #uint160 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 160 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint160_fail ( V0_x : uint160 ) => #abiCallData ( "test_uint160_fail" , #uint160 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 160 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint168 ( V0_x : uint168 ) => #abiCallData ( "test_uint168" , #uint168 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 168 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint168_fail ( V0_x : uint168 ) => #abiCallData ( "test_uint168_fail" , #uint168 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 168 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint16_fail ( V0_x : uint16 ) => #abiCallData ( "test_uint16_fail" , #uint16 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 16 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint176 ( V0_x : uint176 ) => #abiCallData ( "test_uint176" , #uint176 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 176 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint176_fail ( V0_x : uint176 ) => #abiCallData ( "test_uint176_fail" , #uint176 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 176 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint184 ( V0_x : uint184 ) => #abiCallData ( "test_uint184" , #uint184 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 184 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint184_fail ( V0_x : uint184 ) => #abiCallData ( "test_uint184_fail" , #uint184 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 184 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint192 ( V0_x : uint192 ) => #abiCallData ( "test_uint192" , #uint192 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 192 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint192_fail ( V0_x : uint192 ) => #abiCallData ( "test_uint192_fail" , #uint192 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 192 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint200 ( V0_x : uint200 ) => #abiCallData ( "test_uint200" , #uint200 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 200 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint200_fail ( V0_x : uint200 ) => #abiCallData ( "test_uint200_fail" , #uint200 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 200 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint208 ( V0_x : uint208 ) => #abiCallData ( "test_uint208" , #uint208 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 208 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint208_fail ( V0_x : uint208 ) => #abiCallData ( "test_uint208_fail" , #uint208 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 208 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint216 ( V0_x : uint216 ) => #abiCallData ( "test_uint216" , #uint216 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 216 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint216_fail ( V0_x : uint216 ) => #abiCallData ( "test_uint216_fail" , #uint216 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 216 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint224 ( V0_x : uint224 ) => #abiCallData ( "test_uint224" , #uint224 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 224 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint224_fail ( V0_x : uint224 ) => #abiCallData ( "test_uint224_fail" , #uint224 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 224 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint232 ( V0_x : uint232 ) => #abiCallData ( "test_uint232" , #uint232 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 232 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint232_fail ( V0_x : uint232 ) => #abiCallData ( "test_uint232_fail" , #uint232 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 232 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint24 ( V0_x : uint24 ) => #abiCallData ( "test_uint24" , #uint24 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 24 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint240 ( V0_x : uint240 ) => #abiCallData ( "test_uint240" , #uint240 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 240 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint240_fail ( V0_x : uint240 ) => #abiCallData ( "test_uint240_fail" , #uint240 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 240 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint248 ( V0_x : uint248 ) => #abiCallData ( "test_uint248" , #uint248 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 248 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint248_fail ( V0_x : uint248 ) => #abiCallData ( "test_uint248_fail" , #uint248 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 248 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint24_fail ( V0_x : uint24 ) => #abiCallData ( "test_uint24_fail" , #uint24 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 24 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint256 ( V0_x : uint256 ) => #abiCallData ( "test_uint256" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint256_fail ( V0_x : uint256 ) => #abiCallData ( "test_uint256_fail" , #uint256 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint32 ( V0_x : uint32 ) => #abiCallData ( "test_uint32" , #uint32 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 32 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint32_fail ( V0_x : uint32 ) => #abiCallData ( "test_uint32_fail" , #uint32 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 32 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint40 ( V0_x : uint40 ) => #abiCallData ( "test_uint40" , #uint40 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 40 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint40_fail ( V0_x : uint40 ) => #abiCallData ( "test_uint40_fail" , #uint40 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 40 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint48 ( V0_x : uint48 ) => #abiCallData ( "test_uint48" , #uint48 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 48 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint48_fail ( V0_x : uint48 ) => #abiCallData ( "test_uint48_fail" , #uint48 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 48 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint56 ( V0_x : uint56 ) => #abiCallData ( "test_uint56" , #uint56 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 56 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint56_fail ( V0_x : uint56 ) => #abiCallData ( "test_uint56_fail" , #uint56 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 56 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint64 ( V0_x : uint64 ) => #abiCallData ( "test_uint64" , #uint64 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 64 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint64_fail ( V0_x : uint64 ) => #abiCallData ( "test_uint64_fail" , #uint64 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 64 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint72 ( V0_x : uint72 ) => #abiCallData ( "test_uint72" , #uint72 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 72 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint72_fail ( V0_x : uint72 ) => #abiCallData ( "test_uint72_fail" , #uint72 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 72 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint8 ( V0_x : uint8 ) => #abiCallData ( "test_uint8" , #uint8 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 8 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint80 ( V0_x : uint80 ) => #abiCallData ( "test_uint80" , #uint80 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 80 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint80_fail ( V0_x : uint80 ) => #abiCallData ( "test_uint80_fail" , #uint80 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 80 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint88 ( V0_x : uint88 ) => #abiCallData ( "test_uint88" , #uint88 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 88 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint88_fail ( V0_x : uint88 ) => #abiCallData ( "test_uint88_fail" , #uint88 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 88 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint8_fail ( V0_x : uint8 ) => #abiCallData ( "test_uint8_fail" , #uint8 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 8 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint96 ( V0_x : uint96 ) => #abiCallData ( "test_uint96" , #uint96 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 96 , V0_x ) - - - rule ( KEVMUintTypeTest . method-test_uint96_fail ( V0_x : uint96 ) => #abiCallData ( "test_uint96_fail" , #uint96 ( V0_x ) , .TypedArgs ) ) - ensures #rangeUInt ( 96 , V0_x ) - - - rule ( selector ( "testFail_uint104(uint104)" ) => 1709154444 ) - - - rule ( selector ( "testFail_uint112(uint112)" ) => 3541489285 ) - - - rule ( selector ( "testFail_uint120(uint120)" ) => 3839169067 ) - - - rule ( selector ( "testFail_uint128(uint128)" ) => 791678561 ) - - - rule ( selector ( "testFail_uint136(uint136)" ) => 3952257705 ) - - - rule ( selector ( "testFail_uint144(uint144)" ) => 2439595565 ) - - - rule ( selector ( "testFail_uint152(uint152)" ) => 1866291148 ) - - - rule ( selector ( "testFail_uint16(uint16)" ) => 4076431644 ) - - - rule ( selector ( "testFail_uint160(uint160)" ) => 3214193107 ) - - - rule ( selector ( "testFail_uint168(uint168)" ) => 2636444862 ) - - - rule ( selector ( "testFail_uint176(uint176)" ) => 1828125968 ) - - - rule ( selector ( "testFail_uint184(uint184)" ) => 4099305155 ) - - - rule ( selector ( "testFail_uint192(uint192)" ) => 2858210891 ) - - - rule ( selector ( "testFail_uint200(uint200)" ) => 1080270217 ) - - - rule ( selector ( "testFail_uint208(uint208)" ) => 1831022189 ) - - - rule ( selector ( "testFail_uint216(uint216)" ) => 2125101602 ) - - - rule ( selector ( "testFail_uint224(uint224)" ) => 420776541 ) - - - rule ( selector ( "testFail_uint232(uint232)" ) => 3163478438 ) - - - rule ( selector ( "testFail_uint24(uint24)" ) => 639153936 ) - - - rule ( selector ( "testFail_uint240(uint240)" ) => 3089966003 ) - - - rule ( selector ( "testFail_uint248(uint248)" ) => 3070004620 ) - - - rule ( selector ( "testFail_uint256(uint256)" ) => 3436494846 ) - - - rule ( selector ( "testFail_uint32(uint32)" ) => 3218360567 ) - - - rule ( selector ( "testFail_uint40(uint40)" ) => 347856329 ) - - - rule ( selector ( "testFail_uint48(uint48)" ) => 4178735009 ) - - - rule ( selector ( "testFail_uint56(uint56)" ) => 979020984 ) - - - rule ( selector ( "testFail_uint64(uint64)" ) => 819975489 ) - - - rule ( selector ( "testFail_uint72(uint72)" ) => 2059244458 ) - - - rule ( selector ( "testFail_uint8(uint8)" ) => 3679593874 ) - - - rule ( selector ( "testFail_uint80(uint80)" ) => 4180733980 ) - - - rule ( selector ( "testFail_uint88(uint88)" ) => 42555031 ) - - - rule ( selector ( "testFail_uint96(uint96)" ) => 2962957343 ) - - - rule ( selector ( "test_uint104(uint104)" ) => 2030507202 ) - - - rule ( selector ( "test_uint104_fail(uint104)" ) => 3289769429 ) - - - rule ( selector ( "test_uint112(uint112)" ) => 1247465894 ) - - - rule ( selector ( "test_uint112_fail(uint112)" ) => 198559186 ) - - - rule ( selector ( "test_uint120(uint120)" ) => 4013273041 ) - - - rule ( selector ( "test_uint120_fail(uint120)" ) => 4156608892 ) - - - rule ( selector ( "test_uint128(uint128)" ) => 784802761 ) - - - rule ( selector ( "test_uint128_fail(uint128)" ) => 3283002391 ) - - - rule ( selector ( "test_uint136(uint136)" ) => 3590751506 ) - - - rule ( selector ( "test_uint136_fail(uint136)" ) => 1740049059 ) - - - rule ( selector ( "test_uint144(uint144)" ) => 1224379367 ) - - - rule ( selector ( "test_uint144_fail(uint144)" ) => 3911233113 ) - - - rule ( selector ( "test_uint152(uint152)" ) => 3210764837 ) - - - rule ( selector ( "test_uint152_fail(uint152)" ) => 2472528383 ) - - - rule ( selector ( "test_uint16(uint16)" ) => 1262288561 ) - - - rule ( selector ( "test_uint160(uint160)" ) => 2446641645 ) - - - rule ( selector ( "test_uint160_fail(uint160)" ) => 1289572651 ) - - - rule ( selector ( "test_uint168(uint168)" ) => 2789196255 ) - - - rule ( selector ( "test_uint168_fail(uint168)" ) => 413418206 ) - - - rule ( selector ( "test_uint16_fail(uint16)" ) => 2736127289 ) - - - rule ( selector ( "test_uint176(uint176)" ) => 3119759714 ) - - - rule ( selector ( "test_uint176_fail(uint176)" ) => 2926152828 ) - - - rule ( selector ( "test_uint184(uint184)" ) => 2419331356 ) - - - rule ( selector ( "test_uint184_fail(uint184)" ) => 809918532 ) - - - rule ( selector ( "test_uint192(uint192)" ) => 126849335 ) - - - rule ( selector ( "test_uint192_fail(uint192)" ) => 965859284 ) - - - rule ( selector ( "test_uint200(uint200)" ) => 342308100 ) - - - rule ( selector ( "test_uint200_fail(uint200)" ) => 3554205475 ) - - - rule ( selector ( "test_uint208(uint208)" ) => 664969356 ) - - - rule ( selector ( "test_uint208_fail(uint208)" ) => 515244431 ) - - - rule ( selector ( "test_uint216(uint216)" ) => 2735221135 ) - - - rule ( selector ( "test_uint216_fail(uint216)" ) => 1244132421 ) - - - rule ( selector ( "test_uint224(uint224)" ) => 2791725032 ) - - - rule ( selector ( "test_uint224_fail(uint224)" ) => 3535210075 ) - - - rule ( selector ( "test_uint232(uint232)" ) => 2781872781 ) - - - rule ( selector ( "test_uint232_fail(uint232)" ) => 3352181217 ) - - - rule ( selector ( "test_uint24(uint24)" ) => 2865563805 ) - - - rule ( selector ( "test_uint240(uint240)" ) => 3274361055 ) - - - rule ( selector ( "test_uint240_fail(uint240)" ) => 4046179916 ) - - - rule ( selector ( "test_uint248(uint248)" ) => 578604507 ) - - - rule ( selector ( "test_uint248_fail(uint248)" ) => 3580188072 ) - - - rule ( selector ( "test_uint24_fail(uint24)" ) => 2328572638 ) - - - rule ( selector ( "test_uint256(uint256)" ) => 851358597 ) - - - rule ( selector ( "test_uint256_fail(uint256)" ) => 1895666222 ) - - - rule ( selector ( "test_uint32(uint32)" ) => 982223766 ) - - - rule ( selector ( "test_uint32_fail(uint32)" ) => 768917897 ) - - - rule ( selector ( "test_uint40(uint40)" ) => 1298765870 ) - - - rule ( selector ( "test_uint40_fail(uint40)" ) => 1685882915 ) - - - rule ( selector ( "test_uint48(uint48)" ) => 454435065 ) - - - rule ( selector ( "test_uint48_fail(uint48)" ) => 491533732 ) - - - rule ( selector ( "test_uint56(uint56)" ) => 58659965 ) - - - rule ( selector ( "test_uint56_fail(uint56)" ) => 3185974238 ) - - - rule ( selector ( "test_uint64(uint64)" ) => 2511119799 ) - - - rule ( selector ( "test_uint64_fail(uint64)" ) => 2000886247 ) - - - rule ( selector ( "test_uint72(uint72)" ) => 3694811120 ) - - - rule ( selector ( "test_uint72_fail(uint72)" ) => 875540037 ) - - - rule ( selector ( "test_uint8(uint8)" ) => 1704021016 ) - - - rule ( selector ( "test_uint80(uint80)" ) => 3841083967 ) - - - rule ( selector ( "test_uint80_fail(uint80)" ) => 3626141300 ) - - - rule ( selector ( "test_uint88(uint88)" ) => 100068129 ) - - - rule ( selector ( "test_uint88_fail(uint88)" ) => 318744457 ) - - - rule ( selector ( "test_uint8_fail(uint8)" ) => 2865005996 ) - - - rule ( selector ( "test_uint96(uint96)" ) => 1315861753 ) - - - rule ( selector ( "test_uint96_fail(uint96)" ) => 1635628195 ) - - -endmodule - -module Vm-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMVmContract - - syntax KEVMVmContract ::= "KEVMVm" [symbol(), klabel(contract_Vm)] - - - - syntax Bytes ::= KEVMVmContract "." KEVMVmMethod [function(), symbol(), klabel(method_Vm)] - - syntax KEVMVmMethod ::= "method-accesses" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_method-accesses_address)] - - syntax KEVMVmMethod ::= "method-activeFork" "(" ")" [symbol(), klabel(method_Vm_method-activeFork_)] - - syntax KEVMVmMethod ::= "method-addr" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_method-addr_uint256)] - - syntax KEVMVmMethod ::= "method-assume" "(" Int ":" "bool" ")" [symbol(), klabel(method_Vm_method-assume_bool)] - - syntax KEVMVmMethod ::= "method-broadcast" "(" ")" [symbol(), klabel(method_Vm_method-broadcast_)] - - syntax KEVMVmMethod ::= "method-broadcast" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_method-broadcast_address)] - - syntax KEVMVmMethod ::= "method-chainId" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_method-chainId_uint256)] - - syntax KEVMVmMethod ::= "method-clearMockedCalls" "(" ")" [symbol(), klabel(method_Vm_method-clearMockedCalls_)] - - syntax KEVMVmMethod ::= "method-closeFile" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_method-closeFile_string)] - - syntax KEVMVmMethod ::= "method-coinbase" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_method-coinbase_address)] - - syntax KEVMVmMethod ::= "method-createFork" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_method-createFork_string)] - - syntax KEVMVmMethod ::= "method-createFork" "(" String ":" "string" "," Int ":" "uint256" ")" [symbol(), klabel(method_Vm_method-createFork_string_uint256)] - - syntax KEVMVmMethod ::= "method-createSelectFork" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_method-createSelectFork_string)] - - syntax KEVMVmMethod ::= "method-createSelectFork" "(" String ":" "string" "," Int ":" "uint256" ")" [symbol(), klabel(method_Vm_method-createSelectFork_string_uint256)] - - syntax KEVMVmMethod ::= "method-deal" "(" Int ":" "address" "," Int ":" "uint256" ")" [symbol(), klabel(method_Vm_method-deal_address_uint256)] - - syntax KEVMVmMethod ::= "method-deriveKey" "(" String ":" "string" "," String ":" "string" "," Int ":" "uint32" ")" [symbol(), klabel(method_Vm_method-deriveKey_string_string_uint32)] - - syntax KEVMVmMethod ::= "method-deriveKey" "(" String ":" "string" "," Int ":" "uint32" ")" [symbol(), klabel(method_Vm_method-deriveKey_string_uint32)] - - syntax KEVMVmMethod ::= "method-envAddress" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_method-envAddress_string)] - - syntax KEVMVmMethod ::= "method-envAddress" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_method-envAddress_string_string)] - - syntax KEVMVmMethod ::= "method-envBool" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_method-envBool_string)] - - syntax KEVMVmMethod ::= "method-envBool" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_method-envBool_string_string)] - - syntax KEVMVmMethod ::= "method-envBytes" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_method-envBytes_string)] - - syntax KEVMVmMethod ::= "method-envBytes" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_method-envBytes_string_string)] - - syntax KEVMVmMethod ::= "method-envBytes32" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_method-envBytes32_string)] - - syntax KEVMVmMethod ::= "method-envBytes32" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_method-envBytes32_string_string)] - - syntax KEVMVmMethod ::= "method-envInt" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_method-envInt_string)] - - syntax KEVMVmMethod ::= "method-envInt" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_method-envInt_string_string)] - - syntax KEVMVmMethod ::= "method-envString" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_method-envString_string)] - - syntax KEVMVmMethod ::= "method-envString" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_method-envString_string_string)] - - syntax KEVMVmMethod ::= "method-envUint" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_method-envUint_string)] - - syntax KEVMVmMethod ::= "method-envUint" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_method-envUint_string_string)] - - syntax KEVMVmMethod ::= "method-etch" "(" Int ":" "address" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_Vm_method-etch_address_bytes)] - - syntax KEVMVmMethod ::= "method-expectCall" "(" Int ":" "address" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_Vm_method-expectCall_address_bytes)] - - syntax KEVMVmMethod ::= "method-expectCall" "(" Int ":" "address" "," Int ":" "uint256" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_Vm_method-expectCall_address_uint256_bytes)] - - syntax KEVMVmMethod ::= "method-expectEmit" "(" Int ":" "bool" "," Int ":" "bool" "," Int ":" "bool" "," Int ":" "bool" ")" [symbol(), klabel(method_Vm_method-expectEmit_bool_bool_bool_bool)] - - syntax KEVMVmMethod ::= "method-expectEmit" "(" Int ":" "bool" "," Int ":" "bool" "," Int ":" "bool" "," Int ":" "bool" "," Int ":" "address" ")" [symbol(), klabel(method_Vm_method-expectEmit_bool_bool_bool_bool_address)] - - syntax KEVMVmMethod ::= "method-expectRevert" "(" ")" [symbol(), klabel(method_Vm_method-expectRevert_)] - - syntax KEVMVmMethod ::= "method-expectRevert" "(" Bytes ":" "bytes" ")" [symbol(), klabel(method_Vm_method-expectRevert_bytes)] - - syntax KEVMVmMethod ::= "method-expectRevert" "(" Int ":" "bytes4" ")" [symbol(), klabel(method_Vm_method-expectRevert_bytes4)] - - syntax KEVMVmMethod ::= "method-fee" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_method-fee_uint256)] - - syntax KEVMVmMethod ::= "method-ffi" "(" K ":" "string[]" ")" [symbol(), klabel(method_Vm_method-ffi_string[])] - - syntax KEVMVmMethod ::= "method-getCode" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_method-getCode_string)] - - syntax KEVMVmMethod ::= "method-getNonce" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_method-getNonce_address)] - - syntax KEVMVmMethod ::= "method-getRecordedLogs" "(" ")" [symbol(), klabel(method_Vm_method-getRecordedLogs_)] - - syntax KEVMVmMethod ::= "method-label" "(" Int ":" "address" "," String ":" "string" ")" [symbol(), klabel(method_Vm_method-label_address_string)] - - syntax KEVMVmMethod ::= "method-load" "(" Int ":" "address" "," Int ":" "bytes32" ")" [symbol(), klabel(method_Vm_method-load_address_bytes32)] - - syntax KEVMVmMethod ::= "method-mockCall" "(" Int ":" "address" "," Bytes ":" "bytes" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_Vm_method-mockCall_address_bytes_bytes)] - - syntax KEVMVmMethod ::= "method-mockCall" "(" Int ":" "address" "," Int ":" "uint256" "," Bytes ":" "bytes" "," Bytes ":" "bytes" ")" [symbol(), klabel(method_Vm_method-mockCall_address_uint256_bytes_bytes)] - - syntax KEVMVmMethod ::= "method-prank" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_method-prank_address)] - - syntax KEVMVmMethod ::= "method-prank" "(" Int ":" "address" "," Int ":" "address" ")" [symbol(), klabel(method_Vm_method-prank_address_address)] - - syntax KEVMVmMethod ::= "method-readFile" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_method-readFile_string)] - - syntax KEVMVmMethod ::= "method-readLine" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_method-readLine_string)] - - syntax KEVMVmMethod ::= "method-record" "(" ")" [symbol(), klabel(method_Vm_method-record_)] - - syntax KEVMVmMethod ::= "method-recordLogs" "(" ")" [symbol(), klabel(method_Vm_method-recordLogs_)] - - syntax KEVMVmMethod ::= "method-removeFile" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_method-removeFile_string)] - - syntax KEVMVmMethod ::= "method-revertTo" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_method-revertTo_uint256)] - - syntax KEVMVmMethod ::= "method-roll" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_method-roll_uint256)] - - syntax KEVMVmMethod ::= "method-rollFork" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_method-rollFork_uint256)] - - syntax KEVMVmMethod ::= "method-rollFork" "(" Int ":" "uint256" "," Int ":" "uint256" ")" [symbol(), klabel(method_Vm_method-rollFork_uint256_uint256)] - - syntax KEVMVmMethod ::= "method-rpcUrl" "(" String ":" "string" ")" [symbol(), klabel(method_Vm_method-rpcUrl_string)] - - syntax KEVMVmMethod ::= "method-rpcUrls" "(" ")" [symbol(), klabel(method_Vm_method-rpcUrls_)] - - syntax KEVMVmMethod ::= "method-selectFork" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_method-selectFork_uint256)] - - syntax KEVMVmMethod ::= "method-setEnv" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_method-setEnv_string_string)] - - syntax KEVMVmMethod ::= "method-setNonce" "(" Int ":" "address" "," Int ":" "uint64" ")" [symbol(), klabel(method_Vm_method-setNonce_address_uint64)] - - syntax KEVMVmMethod ::= "method-sign" "(" Int ":" "uint256" "," Int ":" "bytes32" ")" [symbol(), klabel(method_Vm_method-sign_uint256_bytes32)] - - syntax KEVMVmMethod ::= "method-snapshot" "(" ")" [symbol(), klabel(method_Vm_method-snapshot_)] - - syntax KEVMVmMethod ::= "method-startBroadcast" "(" ")" [symbol(), klabel(method_Vm_method-startBroadcast_)] - - syntax KEVMVmMethod ::= "method-startBroadcast" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_method-startBroadcast_address)] - - syntax KEVMVmMethod ::= "method-startPrank" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_method-startPrank_address)] - - syntax KEVMVmMethod ::= "method-startPrank" "(" Int ":" "address" "," Int ":" "address" ")" [symbol(), klabel(method_Vm_method-startPrank_address_address)] - - syntax KEVMVmMethod ::= "method-stopBroadcast" "(" ")" [symbol(), klabel(method_Vm_method-stopBroadcast_)] - - syntax KEVMVmMethod ::= "method-stopPrank" "(" ")" [symbol(), klabel(method_Vm_method-stopPrank_)] - - syntax KEVMVmMethod ::= "method-store" "(" Int ":" "address" "," Int ":" "bytes32" "," Int ":" "bytes32" ")" [symbol(), klabel(method_Vm_method-store_address_bytes32_bytes32)] - - syntax KEVMVmMethod ::= "method-toString" "(" Int ":" "address" ")" [symbol(), klabel(method_Vm_method-toString_address)] - - syntax KEVMVmMethod ::= "method-toString" "(" Int ":" "bool" ")" [symbol(), klabel(method_Vm_method-toString_bool)] - - syntax KEVMVmMethod ::= "method-toString" "(" Bytes ":" "bytes" ")" [symbol(), klabel(method_Vm_method-toString_bytes)] - - syntax KEVMVmMethod ::= "method-toString" "(" Int ":" "bytes32" ")" [symbol(), klabel(method_Vm_method-toString_bytes32)] - - syntax KEVMVmMethod ::= "method-toString" "(" Int ":" "int256" ")" [symbol(), klabel(method_Vm_method-toString_int256)] - - syntax KEVMVmMethod ::= "method-toString" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_method-toString_uint256)] - - syntax KEVMVmMethod ::= "method-warp" "(" Int ":" "uint256" ")" [symbol(), klabel(method_Vm_method-warp_uint256)] - - syntax KEVMVmMethod ::= "method-writeFile" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_method-writeFile_string_string)] - - syntax KEVMVmMethod ::= "method-writeLine" "(" String ":" "string" "," String ":" "string" ")" [symbol(), klabel(method_Vm_method-writeLine_string_string)] - - rule ( KEVMVm . method-accesses ( V0_ : address ) => #abiCallData ( "accesses" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( KEVMVm . method-activeFork ( ) => #abiCallData ( "activeFork" , .TypedArgs ) ) - - - rule ( KEVMVm . method-addr ( V0_ : uint256 ) => #abiCallData ( "addr" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( KEVMVm . method-assume ( V0_ : bool ) => #abiCallData ( "assume" , #bool ( V0_ ) , .TypedArgs ) ) - ensures #rangeBool ( V0_ ) - - - rule ( KEVMVm . method-broadcast ( ) => #abiCallData ( "broadcast" , .TypedArgs ) ) - - - rule ( KEVMVm . method-broadcast ( V0_ : address ) => #abiCallData ( "broadcast" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( KEVMVm . method-chainId ( V0_ : uint256 ) => #abiCallData ( "chainId" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( KEVMVm . method-clearMockedCalls ( ) => #abiCallData ( "clearMockedCalls" , .TypedArgs ) ) - - - rule ( KEVMVm . method-closeFile ( V0_ : string ) => #abiCallData ( "closeFile" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-coinbase ( V0_ : address ) => #abiCallData ( "coinbase" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( KEVMVm . method-createFork ( V0_ : string ) => #abiCallData ( "createFork" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-createFork ( V0_ : string , V1_ : uint256 ) => #abiCallData ( "createFork" , #string ( V0_ ) , #uint256 ( V1_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V1_ ) - - - rule ( KEVMVm . method-createSelectFork ( V0_ : string ) => #abiCallData ( "createSelectFork" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-createSelectFork ( V0_ : string , V1_ : uint256 ) => #abiCallData ( "createSelectFork" , #string ( V0_ ) , #uint256 ( V1_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V1_ ) - - - rule ( KEVMVm . method-deal ( V0_ : address , V1_ : uint256 ) => #abiCallData ( "deal" , #address ( V0_ ) , #uint256 ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - )) - - - rule ( KEVMVm . method-deriveKey ( V0_ : string , V1_ : string , V2_ : uint32 ) => #abiCallData ( "deriveKey" , #string ( V0_ ) , #string ( V1_ ) , #uint32 ( V2_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 32 , V2_ ) - - - rule ( KEVMVm . method-deriveKey ( V0_ : string , V1_ : uint32 ) => #abiCallData ( "deriveKey" , #string ( V0_ ) , #uint32 ( V1_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 32 , V1_ ) - - - rule ( KEVMVm . method-envAddress ( V0_ : string ) => #abiCallData ( "envAddress" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-envAddress ( V0_ : string , V1_ : string ) => #abiCallData ( "envAddress" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-envBool ( V0_ : string ) => #abiCallData ( "envBool" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-envBool ( V0_ : string , V1_ : string ) => #abiCallData ( "envBool" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-envBytes ( V0_ : string ) => #abiCallData ( "envBytes" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-envBytes ( V0_ : string , V1_ : string ) => #abiCallData ( "envBytes" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-envBytes32 ( V0_ : string ) => #abiCallData ( "envBytes32" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-envBytes32 ( V0_ : string , V1_ : string ) => #abiCallData ( "envBytes32" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-envInt ( V0_ : string ) => #abiCallData ( "envInt" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-envInt ( V0_ : string , V1_ : string ) => #abiCallData ( "envInt" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-envString ( V0_ : string ) => #abiCallData ( "envString" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-envString ( V0_ : string , V1_ : string ) => #abiCallData ( "envString" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-envUint ( V0_ : string ) => #abiCallData ( "envUint" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-envUint ( V0_ : string , V1_ : string ) => #abiCallData ( "envUint" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-etch ( V0_ : address , V1_ : bytes ) => #abiCallData ( "etch" , #address ( V0_ ) , #bytes ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V1_ ) ) - )) - - - rule ( KEVMVm . method-expectCall ( V0_ : address , V1_ : bytes ) => #abiCallData ( "expectCall" , #address ( V0_ ) , #bytes ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V1_ ) ) - )) - - - rule ( KEVMVm . method-expectCall ( V0_ : address , V1_ : uint256 , V2_ : bytes ) => #abiCallData ( "expectCall" , #address ( V0_ ) , #uint256 ( V1_ ) , #bytes ( V2_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V2_ ) ) - ))) - - - rule ( KEVMVm . method-expectEmit ( V0_ : bool , V1_ : bool , V2_ : bool , V3_ : bool ) => #abiCallData ( "expectEmit" , #bool ( V0_ ) , #bool ( V1_ ) , #bool ( V2_ ) , #bool ( V3_ ) , .TypedArgs ) ) - ensures ( #rangeBool ( V0_ ) - andBool ( #rangeBool ( V1_ ) - andBool ( #rangeBool ( V2_ ) - andBool ( #rangeBool ( V3_ ) - )))) - - - rule ( KEVMVm . method-expectEmit ( V0_ : bool , V1_ : bool , V2_ : bool , V3_ : bool , V4_ : address ) => #abiCallData ( "expectEmit" , #bool ( V0_ ) , #bool ( V1_ ) , #bool ( V2_ ) , #bool ( V3_ ) , #address ( V4_ ) , .TypedArgs ) ) - ensures ( #rangeBool ( V0_ ) - andBool ( #rangeBool ( V1_ ) - andBool ( #rangeBool ( V2_ ) - andBool ( #rangeBool ( V3_ ) - andBool ( #rangeAddress ( V4_ ) - ))))) - - - rule ( KEVMVm . method-expectRevert ( ) => #abiCallData ( "expectRevert" , .TypedArgs ) ) - - - rule ( KEVMVm . method-expectRevert ( V0_ : bytes ) => #abiCallData ( "expectRevert" , #bytes ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 128 , lengthBytes ( V0_ ) ) - - - rule ( KEVMVm . method-expectRevert ( V0_ : bytes4 ) => #abiCallData ( "expectRevert" , #bytes4 ( V0_ ) , .TypedArgs ) ) - ensures #rangeBytes ( 4 , V0_ ) - - - rule ( KEVMVm . method-fee ( V0_ : uint256 ) => #abiCallData ( "fee" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( KEVMVm . method-getCode ( V0_ : string ) => #abiCallData ( "getCode" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-getNonce ( V0_ : address ) => #abiCallData ( "getNonce" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( KEVMVm . method-getRecordedLogs ( ) => #abiCallData ( "getRecordedLogs" , .TypedArgs ) ) - - - rule ( KEVMVm . method-label ( V0_ : address , V1_ : string ) => #abiCallData ( "label" , #address ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( KEVMVm . method-load ( V0_ : address , V1_ : bytes32 ) => #abiCallData ( "load" , #address ( V0_ ) , #bytes32 ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - )) - - - rule ( KEVMVm . method-mockCall ( V0_ : address , V1_ : bytes , V2_ : bytes ) => #abiCallData ( "mockCall" , #address ( V0_ ) , #bytes ( V1_ ) , #bytes ( V2_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V1_ ) ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V2_ ) ) - ))) - - - rule ( KEVMVm . method-mockCall ( V0_ : address , V1_ : uint256 , V2_ : bytes , V3_ : bytes ) => #abiCallData ( "mockCall" , #address ( V0_ ) , #uint256 ( V1_ ) , #bytes ( V2_ ) , #bytes ( V3_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V2_ ) ) - andBool ( #rangeUInt ( 128 , lengthBytes ( V3_ ) ) - )))) - - - rule ( KEVMVm . method-prank ( V0_ : address ) => #abiCallData ( "prank" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( KEVMVm . method-prank ( V0_ : address , V1_ : address ) => #abiCallData ( "prank" , #address ( V0_ ) , #address ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeAddress ( V1_ ) - )) - - - rule ( KEVMVm . method-readFile ( V0_ : string ) => #abiCallData ( "readFile" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-readLine ( V0_ : string ) => #abiCallData ( "readLine" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-record ( ) => #abiCallData ( "record" , .TypedArgs ) ) - - - rule ( KEVMVm . method-recordLogs ( ) => #abiCallData ( "recordLogs" , .TypedArgs ) ) - - - rule ( KEVMVm . method-removeFile ( V0_ : string ) => #abiCallData ( "removeFile" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-revertTo ( V0_ : uint256 ) => #abiCallData ( "revertTo" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( KEVMVm . method-roll ( V0_ : uint256 ) => #abiCallData ( "roll" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( KEVMVm . method-rollFork ( V0_ : uint256 ) => #abiCallData ( "rollFork" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( KEVMVm . method-rollFork ( V0_forkId : uint256 , V1_blockNumber : uint256 ) => #abiCallData ( "rollFork" , #uint256 ( V0_forkId ) , #uint256 ( V1_blockNumber ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_forkId ) - andBool ( #rangeUInt ( 256 , V1_blockNumber ) - )) - - - rule ( KEVMVm . method-rpcUrl ( V0_ : string ) => #abiCallData ( "rpcUrl" , #string ( V0_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-rpcUrls ( ) => #abiCallData ( "rpcUrls" , .TypedArgs ) ) - - - rule ( KEVMVm . method-selectFork ( V0_ : uint256 ) => #abiCallData ( "selectFork" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( KEVMVm . method-setEnv ( V0_ : string , V1_ : string ) => #abiCallData ( "setEnv" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-setNonce ( V0_ : address , V1_ : uint64 ) => #abiCallData ( "setNonce" , #address ( V0_ ) , #uint64 ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 64 , V1_ ) - )) - - - rule ( KEVMVm . method-sign ( V0_ : uint256 , V1_ : bytes32 ) => #abiCallData ( "sign" , #uint256 ( V0_ ) , #bytes32 ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeUInt ( 256 , V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - )) - - - rule ( KEVMVm . method-snapshot ( ) => #abiCallData ( "snapshot" , .TypedArgs ) ) - - - rule ( KEVMVm . method-startBroadcast ( ) => #abiCallData ( "startBroadcast" , .TypedArgs ) ) - - - rule ( KEVMVm . method-startBroadcast ( V0_ : address ) => #abiCallData ( "startBroadcast" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( KEVMVm . method-startPrank ( V0_ : address ) => #abiCallData ( "startPrank" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( KEVMVm . method-startPrank ( V0_ : address , V1_ : address ) => #abiCallData ( "startPrank" , #address ( V0_ ) , #address ( V1_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeAddress ( V1_ ) - )) - - - rule ( KEVMVm . method-stopBroadcast ( ) => #abiCallData ( "stopBroadcast" , .TypedArgs ) ) - - - rule ( KEVMVm . method-stopPrank ( ) => #abiCallData ( "stopPrank" , .TypedArgs ) ) - - - rule ( KEVMVm . method-store ( V0_ : address , V1_ : bytes32 , V2_ : bytes32 ) => #abiCallData ( "store" , #address ( V0_ ) , #bytes32 ( V1_ ) , #bytes32 ( V2_ ) , .TypedArgs ) ) - ensures ( #rangeAddress ( V0_ ) - andBool ( #rangeUInt ( 256 , V1_ ) - andBool ( #rangeUInt ( 256 , V2_ ) - ))) - - - rule ( KEVMVm . method-toString ( V0_ : address ) => #abiCallData ( "toString" , #address ( V0_ ) , .TypedArgs ) ) - ensures #rangeAddress ( V0_ ) - - - rule ( KEVMVm . method-toString ( V0_ : bool ) => #abiCallData ( "toString" , #bool ( V0_ ) , .TypedArgs ) ) - ensures #rangeBool ( V0_ ) - - - rule ( KEVMVm . method-toString ( V0_ : bytes ) => #abiCallData ( "toString" , #bytes ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 128 , lengthBytes ( V0_ ) ) - - - rule ( KEVMVm . method-toString ( V0_ : bytes32 ) => #abiCallData ( "toString" , #bytes32 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( KEVMVm . method-toString ( V0_ : int256 ) => #abiCallData ( "toString" , #int256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeSInt ( 256 , V0_ ) - - - rule ( KEVMVm . method-toString ( V0_ : uint256 ) => #abiCallData ( "toString" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( KEVMVm . method-warp ( V0_ : uint256 ) => #abiCallData ( "warp" , #uint256 ( V0_ ) , .TypedArgs ) ) - ensures #rangeUInt ( 256 , V0_ ) - - - rule ( KEVMVm . method-writeFile ( V0_ : string , V1_ : string ) => #abiCallData ( "writeFile" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( KEVMVm . method-writeLine ( V0_ : string , V1_ : string ) => #abiCallData ( "writeLine" , #string ( V0_ ) , #string ( V1_ ) , .TypedArgs ) ) - - - rule ( selector ( "accesses(address)" ) => 1706857601 ) - - - rule ( selector ( "activeFork()" ) => 789593890 ) - - - rule ( selector ( "addr(uint256)" ) => 4288775753 ) - - - rule ( selector ( "assume(bool)" ) => 1281615202 ) - - - rule ( selector ( "broadcast()" ) => 2949218368 ) - - - rule ( selector ( "broadcast(address)" ) => 3868601563 ) - - - rule ( selector ( "chainId(uint256)" ) => 1078582738 ) - - - rule ( selector ( "clearMockedCalls()" ) => 1071599125 ) - - - rule ( selector ( "closeFile(string)" ) => 1220748319 ) - - - rule ( selector ( "coinbase(address)" ) => 4282924116 ) - - - rule ( selector ( "createFork(string)" ) => 834286744 ) - - - rule ( selector ( "createFork(string,uint256)" ) => 1805892139 ) - - - rule ( selector ( "createSelectFork(string)" ) => 2556952628 ) - - - rule ( selector ( "createSelectFork(string,uint256)" ) => 1911440973 ) - - - rule ( selector ( "deal(address,uint256)" ) => 3364511341 ) - - - rule ( selector ( "deriveKey(string,string,uint32)" ) => 1808477211 ) - - - rule ( selector ( "deriveKey(string,uint32)" ) => 1646872971 ) - - - rule ( selector ( "envAddress(string)" ) => 890066623 ) - - - rule ( selector ( "envAddress(string,string)" ) => 2905717242 ) - - - rule ( selector ( "envBool(string)" ) => 2127686781 ) - - - rule ( selector ( "envBool(string,string)" ) => 2863521455 ) - - - rule ( selector ( "envBytes(string)" ) => 1299951366 ) - - - rule ( selector ( "envBytes(string,string)" ) => 3720504603 ) - - - rule ( selector ( "envBytes32(string)" ) => 2543095874 ) - - - rule ( selector ( "envBytes32(string,string)" ) => 1525821889 ) - - - rule ( selector ( "envInt(string)" ) => 2301234273 ) - - - rule ( selector ( "envInt(string,string)" ) => 1108873552 ) - - - rule ( selector ( "envString(string)" ) => 4168600345 ) - - - rule ( selector ( "envString(string,string)" ) => 347089865 ) - - - rule ( selector ( "envUint(string)" ) => 3247934751 ) - - - rule ( selector ( "envUint(string,string)" ) => 4091461785 ) - - - rule ( selector ( "etch(address,bytes)" ) => 3033974658 ) - - - rule ( selector ( "expectCall(address,bytes)" ) => 3177903156 ) - - - rule ( selector ( "expectCall(address,uint256,bytes)" ) => 4077681571 ) - - - rule ( selector ( "expectEmit(bool,bool,bool,bool)" ) => 1226622914 ) - - - rule ( selector ( "expectEmit(bool,bool,bool,bool,address)" ) => 2176505587 ) - - - rule ( selector ( "expectRevert()" ) => 4102309908 ) - - - rule ( selector ( "expectRevert(bytes)" ) => 4069379763 ) - - - rule ( selector ( "expectRevert(bytes4)" ) => 3273568480 ) - - - rule ( selector ( "fee(uint256)" ) => 968063664 ) - - - rule ( selector ( "ffi(string[])" ) => 2299921511 ) - - - rule ( selector ( "getCode(string)" ) => 2367473957 ) - - - rule ( selector ( "getNonce(address)" ) => 755185067 ) - - - rule ( selector ( "getRecordedLogs()" ) => 420828068 ) - - - rule ( selector ( "label(address,string)" ) => 3327641368 ) - - - rule ( selector ( "load(address,bytes32)" ) => 1719639408 ) - - - rule ( selector ( "mockCall(address,bytes,bytes)" ) => 3110212580 ) - - - rule ( selector ( "mockCall(address,uint256,bytes,bytes)" ) => 2168494993 ) - - - rule ( selector ( "prank(address)" ) => 3395723175 ) - - - rule ( selector ( "prank(address,address)" ) => 1206193358 ) - - - rule ( selector ( "readFile(string)" ) => 1626979089 ) - - - rule ( selector ( "readLine(string)" ) => 1895126824 ) - - - rule ( selector ( "record()" ) => 644673801 ) - - - rule ( selector ( "recordLogs()" ) => 1101999954 ) - - - rule ( selector ( "removeFile(string)" ) => 4054835277 ) - - - rule ( selector ( "revertTo(uint256)" ) => 1155002532 ) - - - rule ( selector ( "roll(uint256)" ) => 528174896 ) - - - rule ( selector ( "rollFork(uint256)" ) => 3652973473 ) - - - rule ( selector ( "rollFork(uint256,uint256)" ) => 3612115876 ) - - - rule ( selector ( "rpcUrl(string)" ) => 2539285737 ) - - - rule ( selector ( "rpcUrls()" ) => 2824504344 ) - - - rule ( selector ( "selectFork(uint256)" ) => 2663344167 ) - - - rule ( selector ( "setEnv(string,string)" ) => 1029252078 ) - - - rule ( selector ( "setNonce(address,uint64)" ) => 4175530839 ) - - - rule ( selector ( "sign(uint256,bytes32)" ) => 3812747940 ) - - - rule ( selector ( "snapshot()" ) => 2534502746 ) - - - rule ( selector ( "startBroadcast()" ) => 2142579071 ) - - - rule ( selector ( "startBroadcast(address)" ) => 2146183821 ) - - - rule ( selector ( "startPrank(address)" ) => 105151830 ) - - - rule ( selector ( "startPrank(address,address)" ) => 1169514616 ) - - - rule ( selector ( "stopBroadcast()" ) => 1995103542 ) - - - rule ( selector ( "stopPrank()" ) => 2428830011 ) - - - rule ( selector ( "store(address,bytes32,bytes32)" ) => 1892290747 ) - - - rule ( selector ( "toString(address)" ) => 1456103998 ) - - - rule ( selector ( "toString(bool)" ) => 1910302682 ) - - - rule ( selector ( "toString(bytes)" ) => 1907020045 ) - - - rule ( selector ( "toString(bytes32)" ) => 2971277800 ) - - - rule ( selector ( "toString(int256)" ) => 2736964622 ) - - - rule ( selector ( "toString(uint256)" ) => 1761649582 ) - - - rule ( selector ( "warp(uint256)" ) => 3856056066 ) - - - rule ( selector ( "writeFile(string,string)" ) => 2306738839 ) - - - rule ( selector ( "writeLine(string,string)" ) => 1637714303 ) - - -endmodule - -module console-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMconsoleContract - - syntax KEVMconsoleContract ::= "KEVMconsole" [symbol(), klabel(contract_console)] - - - -endmodule - -module console2-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMconsole2Contract - - syntax KEVMconsole2Contract ::= "KEVMconsole2" [symbol(), klabel(contract_console2)] - - - -endmodule - -module DSTest-CONTRACT - imports public FOUNDRY - - syntax Contract ::= KEVMDSTestContract - - syntax KEVMDSTestContract ::= "KEVMDSTest" [symbol(), klabel(contract_DSTest)] - - - - syntax Field ::= DSTestField - - syntax DSTestField ::= "IS_TEST" [symbol(), klabel(field_DSTest_IS_TEST)] - - syntax DSTestField ::= "_failed" [symbol(), klabel(field_DSTest__failed)] - - rule ( #loc ( KEVMDSTest . IS_TEST ) => 0 ) - - - rule ( #loc ( KEVMDSTest . _failed ) => 0 ) - - - syntax Bytes ::= KEVMDSTestContract "." KEVMDSTestMethod [function(), symbol(), klabel(method_DSTest)] - - syntax KEVMDSTestMethod ::= "method-IS_TEST" "(" ")" [symbol(), klabel(method_DSTest_method-IS_TEST_)] - - syntax KEVMDSTestMethod ::= "method-failed" "(" ")" [symbol(), klabel(method_DSTest_method-failed_)] - - rule ( KEVMDSTest . method-IS_TEST ( ) => #abiCallData ( "IS_TEST" , .TypedArgs ) ) - - - rule ( KEVMDSTest . method-failed ( ) => #abiCallData ( "failed" , .TypedArgs ) ) - - - rule ( selector ( "IS_TEST()" ) => 4202047188 ) - - - rule ( selector ( "failed()" ) => 3124842406 ) - - -endmodule diff --git a/tests/foundry/exclude b/tests/foundry/exclude deleted file mode 100644 index 82e9cbbd97..0000000000 --- a/tests/foundry/exclude +++ /dev/null @@ -1,215 +0,0 @@ -AccountParamsTest.testEtchSymbolic(bytes) -AccountParamsTest.testFail_GetNonce_false() -AccountParamsTest.testFail_GetNonce_true() -AddrTest.test_addr_false() -AddrTest.test_addr_symbolic(uint256) -AddrTest.testFail_addr_false() -AddrTest.testFail_addr_true() -AllowChangesTest.test() -AllowChangesTest.testAllow_fail() -ArithmeticTest.test_decreasing_div(uint256,uint256) -ArithmeticTest.test_max1_broken(uint256,uint256) -ArithmeticTest.test_wdiv_rounding(uint256,uint256) -ArithmeticTest.test_wmul_increasing(uint256,uint256) -ArithmeticTest.test_wmul_increasing_gt_one(uint256,uint256) -ArithmeticTest.test_wmul_increasing_overflow(uint256,uint256) -ArithmeticTest.test_wmul_increasing_positive(uint256,uint256) -ArithmeticTest.test_wmul_rounding(uint256,uint256) -ArithmeticTest.test_wmul_wdiv_inverse(uint256,uint256) -ArithmeticTest.test_wmul_wdiv_inverse_underflow(uint256,uint256) -ArithmeticTest.test_wmul_weakly_increasing_positive(uint256,uint256) -AssertTest.test_assert_false() -AssertTest.test_assert_true() -AssertTest.testFail_assert_false() -AssertTest.testFail_assert_true() -AssertTest.testFail_expect_revert() -AssertTest.test_revert_branch(uint256,uint256) -AssertTest.test_failing_branch(uint256) -AssumeTest.test_assume_false(uint256,uint256) -AssumeTest.testFail_assume_false(uint256,uint256) -AssumeTest.testFail_assume_true(uint256,uint256) -BroadcastTest.testDeploy() -BytesTypeTest.test_bytes32_fail(bytes32) -BytesTypeTest.test_bytes4_fail(bytes4) -BytesTypeTest.testFail_bytes32(bytes32) -BytesTypeTest.testFail_bytes4(bytes4) -ContractBTest.testCannotSubtract43() -ContractBTest.testFailSubtract43() -ContractBTest.testNumberIs42() -ContractTest.testExample() -EnvTest.testEnvAddress() -EnvTest.testEnvAddresseArray() -EnvTest.testEnvBool() -EnvTest.testEnvBoolArray() -EnvTest.testEnvBytes() -EnvTest.testEnvBytes32() -EnvTest.testEnvBytes32Array() -EnvTest.testEnvBytesArray() -EnvTest.testEnvInt() -EnvTest.testEnvIntArray() -EnvTest.testEnvString() -EnvTest.testEnvStringArray() -EnvTest.testEnvUInt() -EnvTest.testEnvUIntArray() -ExpectRevertTest.test_expectRevert_bytes4() -ExpectRevertTest.test_expectRevert_encodedSymbolic(address) -ExpectRevertTest.testFail_expectRevert_bytes4() -FfiTest.testffi() -FfiTest.testFFIFOO() -FfiTest.testFFIScript() -FfiTest.testFFIScript2() -FilesTest.testFailRemoveFile() -FilesTest.testReadWriteFile() -FilesTest.testReadWriteLine() -ForkTest.testActiveFork() -ForkTest.testAllRPCUrl() -ForkTest.testCreateFork() -ForkTest.testCreateForkBlock() -ForkTest.testCreateSelectFork() -ForkTest.testCreateSelectForkBlock() -ForkTest.testRollFork() -ForkTest.testRollForkId() -ForkTest.testRPCUrl() -ForkTest.testRPCUrlRevert() -GasTest.testInfiniteGas() -GetCodeTest.testGetCode() -LoopsTest.testIsNotPrime(uint256) -LoopsTest.testIsPrime(uint256,uint256) -LoopsTest.testIsPrimeBroken(uint256,uint256) -LoopsTest.testIsPrimeOpt(uint256) -LoopsTest.testMax(uint256[]) -LoopsTest.testMaxBroken(uint256[]) -LoopsTest.testNthPrime(uint256,uint256) -LoopsTest.testSort(uint256[]) -LoopsTest.testSortBroken(uint256[]) -LoopsTest.testSqrt(uint256) -LoopsTest.test_sum_100() -LoopsTest.test_sum_1000() -LoopsTest.testSumToN(uint256) -LoopsTest.testSumToNBroken(uint256) -MockCallTest.testMockCall() -MockCallTest.testMockCalls() -MockCallTest.testMockCallValue() -OwnerUpOnlyTest.testFailIncrementAsNotOwner() -OwnerUpOnlyTest.testIncrementAsNotOwner() -OwnerUpOnlyTest.testIncrementAsOwner() -PlainPrankTest.testFail_startPrank_existingAlready() -PrankTest.testAddAsOwner(uint256) -PrankTest.testAddStartPrank(uint256) -PrankTest.testFailAddPrank(uint256) -PrankTest.testSubtractAsTxOrigin(uint256,uint256) -PrankTest.testSubtractFail(uint256) -PrankTest.testSubtractStartPrank(uint256,uint256) -RecordLogsTest.testRecordLogs() -SafeTest.testWithdraw() -SafeTest.testWithdrawFuzz(uint96) -SetUpTest.testSetUpCalled() -SetUpTest.testSetUpCalledSymbolic(uint256) -SignTest.testSign() -SignTest.testSign_symbolic(uint256) -SnapshotTest.testSnapshot() -StoreTest.testAccesses() -StoreTest.testGasLoadWarmVM() -StoreTest.testGasStoreWarmVM() -ToStringTest.testAddressToString() -ToStringTest.testBoolToString() -ToStringTest.testBytes32ToString() -ToStringTest.testBytesToString() -ToStringTest.testIntToString() -ToStringTest.testUint256ToString() -UintTypeTest.testFail_uint104(uint104) -UintTypeTest.testFail_uint112(uint112) -UintTypeTest.testFail_uint120(uint120) -UintTypeTest.testFail_uint128(uint128) -UintTypeTest.testFail_uint136(uint136) -UintTypeTest.testFail_uint144(uint144) -UintTypeTest.testFail_uint152(uint152) -UintTypeTest.testFail_uint16(uint16) -UintTypeTest.testFail_uint160(uint160) -UintTypeTest.testFail_uint168(uint168) -UintTypeTest.testFail_uint176(uint176) -UintTypeTest.testFail_uint184(uint184) -UintTypeTest.testFail_uint192(uint192) -UintTypeTest.testFail_uint200(uint200) -UintTypeTest.testFail_uint208(uint208) -UintTypeTest.testFail_uint216(uint216) -UintTypeTest.testFail_uint224(uint224) -UintTypeTest.testFail_uint232(uint232) -UintTypeTest.testFail_uint24(uint24) -UintTypeTest.testFail_uint240(uint240) -UintTypeTest.testFail_uint248(uint248) -UintTypeTest.testFail_uint256(uint256) -UintTypeTest.testFail_uint32(uint32) -UintTypeTest.testFail_uint40(uint40) -UintTypeTest.testFail_uint48(uint48) -UintTypeTest.testFail_uint56(uint56) -UintTypeTest.testFail_uint64(uint64) -UintTypeTest.testFail_uint72(uint72) -UintTypeTest.testFail_uint8(uint8) -UintTypeTest.testFail_uint80(uint80) -UintTypeTest.testFail_uint88(uint88) -UintTypeTest.testFail_uint96(uint96) -UintTypeTest.test_uint104(uint104) -UintTypeTest.test_uint104_fail(uint104) -UintTypeTest.test_uint112(uint112) -UintTypeTest.test_uint112_fail(uint112) -UintTypeTest.test_uint120(uint120) -UintTypeTest.test_uint120_fail(uint120) -UintTypeTest.test_uint128(uint128) -UintTypeTest.test_uint128_fail(uint128) -UintTypeTest.test_uint136(uint136) -UintTypeTest.test_uint136_fail(uint136) -UintTypeTest.test_uint144(uint144) -UintTypeTest.test_uint144_fail(uint144) -UintTypeTest.test_uint152(uint152) -UintTypeTest.test_uint152_fail(uint152) -UintTypeTest.test_uint16(uint16) -UintTypeTest.test_uint160(uint160) -UintTypeTest.test_uint160_fail(uint160) -UintTypeTest.test_uint168(uint168) -UintTypeTest.test_uint168_fail(uint168) -UintTypeTest.test_uint16_fail(uint16) -UintTypeTest.test_uint176(uint176) -UintTypeTest.test_uint176_fail(uint176) -UintTypeTest.test_uint184(uint184) -UintTypeTest.test_uint184_fail(uint184) -UintTypeTest.test_uint192(uint192) -UintTypeTest.test_uint192_fail(uint192) -UintTypeTest.test_uint200(uint200) -UintTypeTest.test_uint200_fail(uint200) -UintTypeTest.test_uint208(uint208) -UintTypeTest.test_uint208_fail(uint208) -UintTypeTest.test_uint216(uint216) -UintTypeTest.test_uint216_fail(uint216) -UintTypeTest.test_uint224(uint224) -UintTypeTest.test_uint224_fail(uint224) -UintTypeTest.test_uint232(uint232) -UintTypeTest.test_uint232_fail(uint232) -UintTypeTest.test_uint24(uint24) -UintTypeTest.test_uint240(uint240) -UintTypeTest.test_uint240_fail(uint240) -UintTypeTest.test_uint248(uint248) -UintTypeTest.test_uint248_fail(uint248) -UintTypeTest.test_uint24_fail(uint24) -UintTypeTest.test_uint256(uint256) -UintTypeTest.test_uint256_fail(uint256) -UintTypeTest.test_uint32(uint32) -UintTypeTest.test_uint32_fail(uint32) -UintTypeTest.test_uint40(uint40) -UintTypeTest.test_uint40_fail(uint40) -UintTypeTest.test_uint48(uint48) -UintTypeTest.test_uint48_fail(uint48) -UintTypeTest.test_uint56(uint56) -UintTypeTest.test_uint56_fail(uint56) -UintTypeTest.test_uint64(uint64) -UintTypeTest.test_uint64_fail(uint64) -UintTypeTest.test_uint72(uint72) -UintTypeTest.test_uint72_fail(uint72) -UintTypeTest.test_uint8(uint8) -UintTypeTest.test_uint80(uint80) -UintTypeTest.test_uint80_fail(uint80) -UintTypeTest.test_uint88(uint88) -UintTypeTest.test_uint88_fail(uint88) -UintTypeTest.test_uint8_fail(uint8) -UintTypeTest.test_uint96(uint96) -UintTypeTest.test_uint96_fail(uint96) diff --git a/tests/foundry/foundry-list.check.expected b/tests/foundry/foundry-list.check.expected deleted file mode 100644 index 794dbeab92..0000000000 --- a/tests/foundry/foundry-list.check.expected +++ /dev/null @@ -1,764 +0,0 @@ -APRProof: AccountParamsTest.testDealConcrete:1de243d507248e2512d1d3d59b7058d5e6e118a9a322edbe2321edae09468a04 - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AccountParamsTest.testDealSymbolic:9b29aedcb9a5b0287f80cddf13f7b8e2543ce08c4366a34b1ef444c6e3100081 - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AccountParamsTest.testEtchConcrete:58ee949f8f57e31cfc7d9e04080eca5c9ce4cc9e2be17d6a75a2e60f7e268176 - status: ProofStatus.PASSED - nodes: 24 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AccountParamsTest.testFail_GetNonce_true:15c397683743c61a631cc1abb883c3a5f46ae17797fb27b50443726478dd42ab - status: ProofStatus.PASSED - nodes: 12 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AccountParamsTest.testNonceSymbolic:5d26809f47ed4316f2732543b682bbeeade370685a5ed682bd56764bfb493905 - status: ProofStatus.PASSED - nodes: 13 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AccountParamsTest.test_GetNonce_true:ad558d3cedf0b61ca2fe3bdc0da6525c8f483551e987aa2d7eeb4dfec2f061af - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AccountParamsTest.test_Nonce_ExistentAddress:f72bb41174fc3999b4a35fd0aa96df64da3b838a7c82fbcc99657037dcdee296 - status: ProofStatus.PASSED - nodes: 9 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AccountParamsTest.test_Nonce_NonExistentAddress:ece010e038b80da71fe8f1c0c483774305e7274037e8dee42dae4f0dcdb5a0e0 - status: ProofStatus.PASSED - nodes: 9 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AccountParamsTest.test_getNonce_unknownSymbolic:eff0165465838077cd91d32e798d9b2e0a89c70699922f1b3ea111e5c1293e8f - status: ProofStatus.PASSED - nodes: 15 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AddrTest.test_addr_true:52c26a71c1370a2f5c40c14d900f54488e4b2cb0a8e17ceaebcd2d668f299131 - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AddrTest.test_builtInAddresses:c1d0094309a56ca2191f7485f9dee35fc109551f859592ce8a0d4bef8f21b28a - status: ProofStatus.PASSED - nodes: 5 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AddrTest.test_notBuiltinAddress_concrete:52073d78f9145645782f8df30c10fa243616a083ad555551e5a74e2b46fa9cac - status: ProofStatus.PASSED - nodes: 5 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AddrTest.test_notBuiltinAddress_symbolic:c7f5644afaf561f816581f89deea61c781e140642e24937062cf0cbec6974413 - status: ProofStatus.PASSED - nodes: 10 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AllowChangesTest.testAllow:a3148595f59c5aa7a5c5c3b21c5c9998d0e55587ecfea31981476fd38c4567ff - status: ProofStatus.PASSED - nodes: 25 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AllowChangesTest.testFailAllowCallsToAddress:947222e928981f6e91a61094801ccf13d5a05e90d177234d06db4dc12197cc97 - status: ProofStatus.PASSED - nodes: 25 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AllowChangesTest.testFailAllowChangesToStorage:d776bf5126a088826d6dec4a1f8aaeba1e2e38d3157ecf84a3fdd20e39837474 - status: ProofStatus.PASSED - nodes: 25 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: ArithmeticTest.test_max1:c4bacab07767a800e39884be16e13d814127a6492bdc7193c2e5aca5039e3332 - status: ProofStatus.PASSED - nodes: 13 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: ArithmeticTest.test_max2:10956e47d8d9ea761a55ceb74f6d481eeda20065a6acccdc3a599f2f2eaaf15b - status: ProofStatus.PASSED - nodes: 11 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AssertTest.setUp:ef63bc82ef3897c1bdba5ae3bdc1f7166e30096b76d2f67315759324d6a13f10 - status: ProofStatus.PASSED - nodes: 5 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AssertTest.testFail_assert_false:24d689f16d97b94f361ad530228c63ae6bf3442cefb0e5c52a61320c18f35f3c - status: ProofStatus.PASSED - nodes: 5 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AssertTest.testFail_assert_true:197b53d8a0c19a3b62f2c833df85695b4bb2c5c44f77961f4d4dedd9bd8f63f2 - status: ProofStatus.FAILED - nodes: 5 - pending: 0 - failing: 1 - stuck: 0 - terminal: 1 -Subproofs: 0 - -APRProof: AssertTest.testFail_expect_revert:27118a76913992c6f22579dea712cdd72f73f4693b99474945a4e557186d6a18 - status: ProofStatus.FAILED - nodes: 7 - pending: 0 - failing: 1 - stuck: 0 - terminal: 1 -Subproofs: 0 - -APRProof: AssertTest.test_assert_false:33efe2e3fc9e4b6d788b00ee4020e715594396b00738fd8531b82138d4fa6e24 - status: ProofStatus.FAILED - nodes: 5 - pending: 0 - failing: 1 - stuck: 0 - terminal: 1 -Subproofs: 0 - -APRProof: AssertTest.test_assert_true:a327e722a5bc2ed41b1ff750e1eadf3e83cb553953514763ced6208886b28e5e - status: ProofStatus.PASSED - nodes: 5 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AssertTest.test_assert_true_branch:705a36696541984d6c6b28ade9bbb7a3840cbcfdc2e150b3da4329cb7c06527a - status: ProofStatus.PASSED - nodes: 11 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AssertTest.test_failing_branch:62e246cc0325a8ab400bed7aa96455fdf5277f9a1a755fa8cfaf572ed805c686 - status: ProofStatus.FAILED - nodes: 11 - pending: 0 - failing: 1 - stuck: 0 - terminal: 1 -Subproofs: 0 - -APRProof: AssertTest.test_revert_branch:3ef2f88ae21b21d91e372c879a7caafa75d7365732a59110c0fa2956b6824247 - status: ProofStatus.FAILED - nodes: 11 - pending: 0 - failing: 1 - stuck: 0 - terminal: 1 -Subproofs: 0 - -APRProof: AssumeTest.testFail_assume_false:e79d764ed5db65dd3fef9785f578b83aa722f62241fc1d544dc601c158ef695d - status: ProofStatus.FAILED - nodes: 7 - pending: 0 - failing: 1 - stuck: 0 - terminal: 1 -Subproofs: 0 - -APRProof: AssumeTest.testFail_assume_true:ef68c1ea07b094fcf03e02d287b47204fa02108e3334c204f81dea4c78fd1289 - status: ProofStatus.PASSED - nodes: 11 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AssumeTest.test_assume_false:fba71744bdce72bc45b9a84c3ab97ce0d7193b08f9d2c0c8ded04097536c129c - status: ProofStatus.FAILED - nodes: 11 - pending: 0 - failing: 1 - stuck: 0 - terminal: 1 -Subproofs: 0 - -APRProof: AssumeTest.test_assume_staticCall:46e4f7d8496787dfa69b768f5e27cee757d077f76c8d5e4f8382440e94baba69 - status: ProofStatus.PASSED - nodes: 8 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AssumeTest.test_assume_true:21099f483dcfcd238c4ec031e318982e4e4cecc7be990d5c699dbc94e681ea67 - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: AssumeTest.test_multi_assume:0bcf46fa42269d36e4abdba912151d698618f9e71b65c0dd65c24a2e316283e5 - status: ProofStatus.PASSED - nodes: 22 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: BMCLoopsTest.test_countdown_concrete:05a00c70eb4b09a188814790be389a5c7b3071434302fde53a56c0cd834bad5f - status: ProofStatus.PASSED - nodes: 6 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: BMCLoopsTest.test_countdown_symbolic:379ebbf3bd0c37353a5544ce5d5f32c7d38de613e72a876a45e83605b13f6708 - status: ProofStatus.PASSED - nodes: 25 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: BlockParamsTest.testBlockNumber:2e2993985c220afc2279938333ddbac593243d3a38ecb2190614e5c961ce614e - status: ProofStatus.PASSED - nodes: 5 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: BlockParamsTest.testChainId:3c3d337b8d1854cceffc7ecc0afb8059c5ac52888bf0f17e19b93c2a679fc0a2 - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: BlockParamsTest.testCoinBase:dd05f7e4910a6df661c1eece3029c72cbe9057be9c320100fdf31dbd51958335 - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: BlockParamsTest.testFee:31c7a7448a119b78ecd7febaf667b96b1cfa30d7676bc7974da96d2499172c7e - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: BlockParamsTest.testRoll:4c39673b2a2e6150eb49d991630c3cd83d185c9d3b4525b8fa1f4c28620d10af - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: BlockParamsTest.testWarp:49d83395db7ebb166803ad3eab6e76f728488b0df95908de013492847eab70e1 - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: BytesTypeTest.test_bytes32:ef04f8720410ede5bec0b17fda8340c62e9818d9a663c53bb393bddb3987a17e - status: ProofStatus.PASSED - nodes: 5 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: BytesTypeTest.test_bytes4:46a17b849e4f2991bcdce4aa6a0629b26f2db8fd929dc4a66b2f8aae5e50dded - status: ProofStatus.PASSED - nodes: 5 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: CounterTest.testIncrement:3992e730124fa1381551e230218898550b2665bfc50a236b94ec973de817e943 - status: ProofStatus.PASSED - nodes: 30 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: CounterTest.testSetNumber:aa6c11690ae68d49a8e35ee344e11f7a4bd7387a37612b29ea301c0ebfd72170 - status: ProofStatus.PASSED - nodes: 30 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: EmitContractTest.testExpectEmit:f96b8227fdfb0c30ae8eef4876623a1e4dfc17a34fc71e50cee1ae54958f1404 - status: ProofStatus.PASSED - nodes: 18 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: EmitContractTest.testExpectEmitCheckEmitter:a12dc8fcec7b607ce0e119eb630e1ed9c214c045fb3bb247864bf9380ee3f32a - status: ProofStatus.PASSED - nodes: 18 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: EmitContractTest.testExpectEmitDoNotCheckData:53c50ea3b808147923b19d604664fb10feb879db1da21eefb9edd73965b470f8 - status: ProofStatus.PASSED - nodes: 18 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: ExpectCallTest.testExpectRegularCall:e0c1a2f7e6fa7af4c233351e44fb28b5c81baec83bbf382c9450635325bc2b57 - status: ProofStatus.PASSED - nodes: 19 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: ExpectCallTest.testExpectStaticCall:438fcc544fa99d10c26f5bd1b02bbad8184c54699a712cc17b62fc5dfcef87d5 - status: ProofStatus.PASSED - nodes: 19 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: ExpectRevertTest.testFail_ExpectRevert_failAndSuccess:a3ffe48687b9f408a3cd0b29f37fa3c4a6bc36a08a411f446a22642bc70173a1 - status: ProofStatus.PASSED - nodes: 18 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: ExpectRevertTest.testFail_expectRevert_empty:0717e1dd0cd813b54c47c1e48622d86e05268596cabbe19daf1e44231b27040a - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: ExpectRevertTest.testFail_expectRevert_false:1d576d88b3dcc6f5276fe707086435f1a03472a0f7bf7c0bcb8a82b8dfd27f30 - status: ProofStatus.PASSED - nodes: 18 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: ExpectRevertTest.testFail_expectRevert_multipleReverts:581fb9ea8cd100a6dcf3df7158bb4f00855cee18ee1e43212ff1c557c35220c4 - status: ProofStatus.PASSED - nodes: 24 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: ExpectRevertTest.test_ExpectRevert_increasedDepth:62d768e5623286d1005ecaa9610933221883959d37f4b3469066d88d0415a191 - status: ProofStatus.PASSED - nodes: 29 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: ExpectRevertTest.test_expectRevert_internalCall:cbcb172e7f8d76df6b2bd877ed6a8b2a04037849d5c1b2ce109e0abc0e2a2055 - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: ExpectRevertTest.test_expectRevert_message:5594a9370b5b578b68ecc65f7acf7c75d6badb6cb9b255dbce908feb20dce045 - status: ProofStatus.PASSED - nodes: 20 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: ExpectRevertTest.test_expectRevert_returnValue:aa77e10b4f62f49f84a0672f7f3b4b3b6c5181dcc247967e8dbe1711ce0a4b40 - status: ProofStatus.PASSED - nodes: 27 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: ExpectRevertTest.test_expectRevert_true:de7000e92030214d433a6dd51fce1fe48b94f505788a780f63866a8bdf794b0e - status: ProofStatus.PASSED - nodes: 18 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: LabelTest.testLabel:fff0ddccfa7d6527a2055a794cb0777dcdd5b0d04c8e0a8b714faf0ca5f84eb9 - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: LoopsTest.sum_N:031a8a7fd8a89ea433a5c7307fd8e6ee86fed775c4188c1078f3de94c1ee710d - status: ProofStatus.PASSED - nodes: 13 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: LoopsTest.test_sum_10:30ed1ae0020518510e2ba4e1a1487e245df8e70bd3e1523a82419bd2864b76e1 - status: ProofStatus.PASSED - nodes: 10 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: MethodDisambiguateTest.test_method_call:3786df7e8684c4703688ee31a20e7924bd12aafb41b43e4d7c6747402f456ef7 - status: ProofStatus.PASSED - nodes: 5 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: PlainPrankTest.testFail_startPrank_internalCall:bbaab6548be80ef31d590a24bb3c34367cbf9b5559525bc5437136de45f0d9af - status: ProofStatus.PASSED - nodes: 9 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: PlainPrankTest.test_prank_zeroAddress_true:901bf2ce10e3745450eb66583d6120d18b131ff3c47aec309ca06b66d6589081 - status: ProofStatus.PASSED - nodes: 31 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: PlainPrankTest.test_startPrankWithOrigin_true:04631949ff19a67ae9204131ad0de7a2f9d10d0feb77119fc4a30679b8100eb8 - status: ProofStatus.PASSED - nodes: 26 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: PlainPrankTest.test_startPrank_true:cbb13d45d46d95755f53a25e087525927a4e5f277ba4ce1a5891cdc8c151ef92 - status: ProofStatus.PASSED - nodes: 26 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: PlainPrankTest.test_startPrank_zeroAddress_true:dd7959dcf5de16ead3655ad4d1f2e09438fd0762efdf40c40e19fed0dc8bda61 - status: ProofStatus.PASSED - nodes: 26 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: PlainPrankTest.test_stopPrank_notExistent:fb68e75bcad340c21f02047d7b194597f62ddaef8a9b1ec4cff1169dfca1ff92 - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: SetUpDeployTest.setUp:ea545d29e24145e8b49df4eaf3ec901b9972459926f28605587c9b1157175caf - status: ProofStatus.PASSED - nodes: 10 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: SetUpDeployTest.test_extcodesize:54fc4add5df72818f51cf0e55ef001823eba0e0715c8b0b71e8eaf089508f226 - status: ProofStatus.PASSED - nodes: 5 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: Setup2Test.setUp:7dfe52b3906be5ad1783250c325ddf66f6f78de610c2515152b0d38823f750d7 - status: ProofStatus.PASSED - nodes: 5 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: Setup2Test.testFail_setup:5c9415bdd3a7fee6382e9ff59eadc6effbdaafa9c907cb733861cbbca7e438ce - status: ProofStatus.PASSED - nodes: 10 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: Setup2Test.test_setup:d382cf9915e17de9bafe20dd19723db5b4c6af6d7e7b2f0f098abe97c8f3a174 - status: ProofStatus.PASSED - nodes: 5 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: StoreTest.testGasLoadColdVM:28926dbeb6462b88b02e57c7c390f5b5f18613387e1acc48ee527ddcd6f51c38 - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: StoreTest.testGasLoadWarmUp:830c58f5c790eda97f2e3c2085c72c60ec78a6b0aba178e4266f3c7fa52e9317 - status: ProofStatus.PASSED - nodes: 13 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: StoreTest.testGasStoreColdVM:88886eb3ba563ccbd8ab31758d8811e3c2d9959d583600cd2d36d7ee45167019 - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: StoreTest.testGasStoreWarmUp:5d343b20742849259c7a1f2940c919489c7a917e215bbfb13fac0c41b540f676 - status: ProofStatus.PASSED - nodes: 13 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: StoreTest.testLoadNonExistent:49e724f7b888037a8be429c3fc401aa4b914d30e58e5dc95071b39879539da4e - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: StoreTest.testStoreLoad:ee201cded4b77a4da3de21730cd01fa5fc5d69d5b76781c67576cdaf0b936a78 - status: ProofStatus.PASSED - nodes: 14 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: StoreTest.testStoreLoadNonExistent:96db02ddef29dc3a63ddac54ea5cba1df3d68eccad923fe04402ee6b68f695f1 - status: ProofStatus.PASSED - nodes: 9 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: SymbolicStorageTest.testEmptyInitialStorage:9d98193ee0160832abaafc4239b38ec3afdaa078e23c52cb21492bd80b70bb7b - status: ProofStatus.PASSED - nodes: 7 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: SymbolicStorageTest.testFail_SymbolicStorage:2f60adbdb429c8dafe3ac4f413c523f873b4d1653fb2a4c6145547f845bebc17 - status: ProofStatus.PASSED - nodes: 19 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: SymbolicStorageTest.testFail_SymbolicStorage1:6583ada3ba3da1f3ff59bf60e07ee67afc17bdea5327b49a0ad44e9ed00de134 - status: ProofStatus.PASSED - nodes: 24 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 - -APRProof: UintTypeTest.test_uint256:fed11faa6e8138097d5d92e606e313d18cc8a752446d42345820bb5b6ff66294 - status: ProofStatus.PASSED - nodes: 5 - pending: 0 - failing: 0 - stuck: 0 - terminal: 0 -Subproofs: 0 diff --git a/tests/foundry/foundry.k.check.expected b/tests/foundry/foundry.k.check.expected deleted file mode 100644 index fde141025f..0000000000 --- a/tests/foundry/foundry.k.check.expected +++ /dev/null @@ -1,633 +0,0 @@ -requires "contracts.k" -requires "requires/lemmas.k" - -module FOUNDRY-MAIN - imports public ACCOUNTPARAMSTEST-VERIFICATION - imports public ADDRTEST-VERIFICATION - imports public ALLOWCHANGESTEST-VERIFICATION - imports public VALUESTORE-VERIFICATION - imports public AMBIGUOUSTEST-VERIFICATION - imports public ARITHMETICTEST-VERIFICATION - imports public ASSUMETEST-VERIFICATION - imports public BMCLOOPSTEST-VERIFICATION - imports public BLOCKPARAMSTEST-VERIFICATION - imports public BROADCASTTEST-VERIFICATION - imports public CONSTANTS-VERIFICATION - imports public CONTRACT-VERIFICATION - imports public CONTRACTTEST-VERIFICATION - imports public CONTRACTBTEST-VERIFICATION - imports public COUNTER-VERIFICATION - imports public COUNTERTEST-VERIFICATION - imports public DYNAMICTYPESTEST-VERIFICATION - imports public EXPECTEMIT-VERIFICATION - imports public EMITCONTRACTTEST-VERIFICATION - imports public ENVTEST-VERIFICATION - imports public DUMMY-VERIFICATION - imports public EXPECTCALLTEST-VERIFICATION - imports public DEPTHREVERTER-VERIFICATION - imports public EXPECTREVERTTEST-VERIFICATION - imports public REVERTER-VERIFICATION - imports public REVERTERWITHRETURN-VERIFICATION - imports public FFITEST-VERIFICATION - imports public FILESTEST-VERIFICATION - imports public FORKTEST-VERIFICATION - imports public FRESHINTTEST-VERIFICATION - imports public GASTEST-VERIFICATION - imports public GETCODETEST-VERIFICATION - imports public KEVMBASE-VERIFICATION - imports public KEVMCHEATS-VERIFICATION - imports public KEVMCHEATSBASE-VERIFICATION - imports public KEVMUTILS-VERIFICATION - imports public SYMBOLICWORDS-VERIFICATION - imports public LABELTEST-VERIFICATION - imports public LOOPSTEST-VERIFICATION - imports public METHODDISAMBIGUATETEST-VERIFICATION - imports public MOCKCALLTEST-VERIFICATION - imports public MYIERC20-VERIFICATION - imports public MYTOKEN-VERIFICATION - imports public NOIMPORT-VERIFICATION - imports public OWNERUPONLY-VERIFICATION - imports public OWNERUPONLYTEST-VERIFICATION - imports public ADDITIONALTOKEN-VERIFICATION - imports public PLAINPRANKTEST-VERIFICATION - imports public PRANK-VERIFICATION - imports public PRANKTEST-VERIFICATION - imports public PRECONDITIONSTEST-VERIFICATION - imports public RECORDLOGSTEST-VERIFICATION - imports public SAFE-VERIFICATION - imports public SAFETEST-VERIFICATION - imports public SCRIPT-VERIFICATION - imports public SETUP2TEST-VERIFICATION - imports public SETUPDEPLOYTEST-VERIFICATION - imports public SETUPTEST-VERIFICATION - imports public SIGNTEST-VERIFICATION - imports public ASSERTTEST-VERIFICATION - imports public SNAPSHOTTEST-VERIFICATION - imports public STORE-VERIFICATION - imports public STORETEST-VERIFICATION - imports public SYMBOLICSTORAGETEST-VERIFICATION - imports public SYMBOLICSTORE-VERIFICATION - imports public TEST-VERIFICATION - imports public STDERROR-VERIFICATION - imports public STDMATH-VERIFICATION - imports public STDSTORAGE-VERIFICATION - imports public TESTNUMBER-VERIFICATION - imports public TOSTRINGTEST-VERIFICATION - imports public TOKEN-VERIFICATION - imports public BYTESTYPETEST-VERIFICATION - imports public UINTTYPETEST-VERIFICATION - imports public VM-VERIFICATION - imports public CONSOLE-VERIFICATION - imports public CONSOLE2-VERIFICATION - imports public DSTEST-VERIFICATION - - - -endmodule - -module ACCOUNTPARAMSTEST-VERIFICATION - imports public ACCOUNTPARAMSTEST-CONTRACT - - - -endmodule - -module ADDRTEST-VERIFICATION - imports public ADDRTEST-CONTRACT - - - -endmodule - -module ALLOWCHANGESTEST-VERIFICATION - imports public ALLOWCHANGESTEST-CONTRACT - - - -endmodule - -module VALUESTORE-VERIFICATION - imports public VALUESTORE-CONTRACT - - - -endmodule - -module AMBIGUOUSTEST-VERIFICATION - imports public AMBIGUOUSTEST-CONTRACT - - - -endmodule - -module ARITHMETICTEST-VERIFICATION - imports public ARITHMETICTEST-CONTRACT - - - -endmodule - -module ASSUMETEST-VERIFICATION - imports public ASSUMETEST-CONTRACT - - - -endmodule - -module BMCLOOPSTEST-VERIFICATION - imports public BMCLOOPSTEST-CONTRACT - - - -endmodule - -module BLOCKPARAMSTEST-VERIFICATION - imports public BLOCKPARAMSTEST-CONTRACT - - - -endmodule - -module BROADCASTTEST-VERIFICATION - imports public BROADCASTTEST-CONTRACT - - - -endmodule - -module CONSTANTS-VERIFICATION - imports public CONSTANTS-CONTRACT - - - -endmodule - -module CONTRACT-VERIFICATION - imports public CONTRACT-CONTRACT - - - -endmodule - -module CONTRACTTEST-VERIFICATION - imports public CONTRACTTEST-CONTRACT - - - -endmodule - -module CONTRACTBTEST-VERIFICATION - imports public CONTRACTBTEST-CONTRACT - - - -endmodule - -module COUNTER-VERIFICATION - imports public COUNTER-CONTRACT - - - -endmodule - -module COUNTERTEST-VERIFICATION - imports public COUNTERTEST-CONTRACT - - - -endmodule - -module DYNAMICTYPESTEST-VERIFICATION - imports public DYNAMICTYPESTEST-CONTRACT - - - -endmodule - -module EXPECTEMIT-VERIFICATION - imports public EXPECTEMIT-CONTRACT - - - -endmodule - -module EMITCONTRACTTEST-VERIFICATION - imports public EMITCONTRACTTEST-CONTRACT - - - -endmodule - -module ENVTEST-VERIFICATION - imports public ENVTEST-CONTRACT - - - -endmodule - -module DUMMY-VERIFICATION - imports public DUMMY-CONTRACT - - - -endmodule - -module EXPECTCALLTEST-VERIFICATION - imports public EXPECTCALLTEST-CONTRACT - - - -endmodule - -module DEPTHREVERTER-VERIFICATION - imports public DEPTHREVERTER-CONTRACT - - - -endmodule - -module EXPECTREVERTTEST-VERIFICATION - imports public EXPECTREVERTTEST-CONTRACT - - - -endmodule - -module REVERTER-VERIFICATION - imports public REVERTER-CONTRACT - - - -endmodule - -module REVERTERWITHRETURN-VERIFICATION - imports public REVERTERWITHRETURN-CONTRACT - - - -endmodule - -module FFITEST-VERIFICATION - imports public FFITEST-CONTRACT - - - -endmodule - -module FILESTEST-VERIFICATION - imports public FILESTEST-CONTRACT - - - -endmodule - -module FORKTEST-VERIFICATION - imports public FORKTEST-CONTRACT - - - -endmodule - -module FRESHINTTEST-VERIFICATION - imports public FRESHINTTEST-CONTRACT - - - -endmodule - -module GASTEST-VERIFICATION - imports public GASTEST-CONTRACT - - - -endmodule - -module GETCODETEST-VERIFICATION - imports public GETCODETEST-CONTRACT - - - -endmodule - -module KEVMBASE-VERIFICATION - imports public KEVMBASE-CONTRACT - - - -endmodule - -module KEVMCHEATS-VERIFICATION - imports public KEVMCHEATS-CONTRACT - - - -endmodule - -module KEVMCHEATSBASE-VERIFICATION - imports public KEVMCHEATSBASE-CONTRACT - - - -endmodule - -module KEVMUTILS-VERIFICATION - imports public KEVMUTILS-CONTRACT - - - -endmodule - -module SYMBOLICWORDS-VERIFICATION - imports public SYMBOLICWORDS-CONTRACT - - - -endmodule - -module LABELTEST-VERIFICATION - imports public LABELTEST-CONTRACT - - - -endmodule - -module LOOPSTEST-VERIFICATION - imports public LOOPSTEST-CONTRACT - imports public SUM-TO-N-INVARIANT - - - -endmodule - -module METHODDISAMBIGUATETEST-VERIFICATION - imports public METHODDISAMBIGUATETEST-CONTRACT - - - -endmodule - -module MOCKCALLTEST-VERIFICATION - imports public MOCKCALLTEST-CONTRACT - - - -endmodule - -module MYIERC20-VERIFICATION - imports public MYIERC20-CONTRACT - - - -endmodule - -module MYTOKEN-VERIFICATION - imports public MYTOKEN-CONTRACT - - - -endmodule - -module NOIMPORT-VERIFICATION - imports public NOIMPORT-CONTRACT - - - -endmodule - -module OWNERUPONLY-VERIFICATION - imports public OWNERUPONLY-CONTRACT - - - -endmodule - -module OWNERUPONLYTEST-VERIFICATION - imports public OWNERUPONLYTEST-CONTRACT - - - -endmodule - -module ADDITIONALTOKEN-VERIFICATION - imports public ADDITIONALTOKEN-CONTRACT - - - -endmodule - -module PLAINPRANKTEST-VERIFICATION - imports public PLAINPRANKTEST-CONTRACT - - - -endmodule - -module PRANK-VERIFICATION - imports public PRANK-CONTRACT - - - -endmodule - -module PRANKTEST-VERIFICATION - imports public PRANKTEST-CONTRACT - - - -endmodule - -module PRECONDITIONSTEST-VERIFICATION - imports public PRECONDITIONSTEST-CONTRACT - - - -endmodule - -module RECORDLOGSTEST-VERIFICATION - imports public RECORDLOGSTEST-CONTRACT - - - -endmodule - -module SAFE-VERIFICATION - imports public SAFE-CONTRACT - - - -endmodule - -module SAFETEST-VERIFICATION - imports public SAFETEST-CONTRACT - - - -endmodule - -module SCRIPT-VERIFICATION - imports public SCRIPT-CONTRACT - - - -endmodule - -module SETUP2TEST-VERIFICATION - imports public SETUP2TEST-CONTRACT - - - -endmodule - -module SETUPDEPLOYTEST-VERIFICATION - imports public SETUPDEPLOYTEST-CONTRACT - - - -endmodule - -module SETUPTEST-VERIFICATION - imports public SETUPTEST-CONTRACT - - - -endmodule - -module SIGNTEST-VERIFICATION - imports public SIGNTEST-CONTRACT - - - -endmodule - -module ASSERTTEST-VERIFICATION - imports public ASSERTTEST-CONTRACT - - - -endmodule - -module SNAPSHOTTEST-VERIFICATION - imports public SNAPSHOTTEST-CONTRACT - - - -endmodule - -module STORE-VERIFICATION - imports public STORE-CONTRACT - - - -endmodule - -module STORETEST-VERIFICATION - imports public STORETEST-CONTRACT - - - -endmodule - -module SYMBOLICSTORAGETEST-VERIFICATION - imports public SYMBOLICSTORAGETEST-CONTRACT - - - -endmodule - -module SYMBOLICSTORE-VERIFICATION - imports public SYMBOLICSTORE-CONTRACT - - - -endmodule - -module TEST-VERIFICATION - imports public TEST-CONTRACT - - - -endmodule - -module STDERROR-VERIFICATION - imports public STDERROR-CONTRACT - - - -endmodule - -module STDMATH-VERIFICATION - imports public STDMATH-CONTRACT - - - -endmodule - -module STDSTORAGE-VERIFICATION - imports public STDSTORAGE-CONTRACT - - - -endmodule - -module TESTNUMBER-VERIFICATION - imports public TESTNUMBER-CONTRACT - - - -endmodule - -module TOSTRINGTEST-VERIFICATION - imports public TOSTRINGTEST-CONTRACT - - - -endmodule - -module TOKEN-VERIFICATION - imports public TOKEN-CONTRACT - - - -endmodule - -module BYTESTYPETEST-VERIFICATION - imports public BYTESTYPETEST-CONTRACT - - - -endmodule - -module UINTTYPETEST-VERIFICATION - imports public UINTTYPETEST-CONTRACT - - - -endmodule - -module VM-VERIFICATION - imports public VM-CONTRACT - - - -endmodule - -module CONSOLE-VERIFICATION - imports public CONSOLE-CONTRACT - - - -endmodule - -module CONSOLE2-VERIFICATION - imports public CONSOLE2-CONTRACT - - - -endmodule - -module DSTEST-VERIFICATION - imports public DSTEST-CONTRACT - - - -endmodule diff --git a/tests/foundry/foundry.toml b/tests/foundry/foundry.toml deleted file mode 100644 index 8f947e25c1..0000000000 --- a/tests/foundry/foundry.toml +++ /dev/null @@ -1,6 +0,0 @@ -[profile.default] -src = 'src' -out = 'out' -extra_output = ['storageLayout', 'abi', 'evm.methodIdentifiers', 'evm.deployedBytecode.object'] -rpc_endpoints = { optimism = "https://optimism.alchemyapi.io/v2/...", mainnet = "${RPC_MAINNET}" } - diff --git a/tests/foundry/golden/AssertTest.testFail_assert_false().expected b/tests/foundry/golden/AssertTest.testFail_assert_false().expected deleted file mode 100644 index c5fd03634a..0000000000 --- a/tests/foundry/golden/AssertTest.testFail_assert_false().expected +++ /dev/null @@ -1,678 +0,0 @@ - -┌─ 1 (root) -│ k: #execute ~> CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ src: tests/foundry/test/Simple.t.sol:5:54 -│ -│ (407 steps) -├─ 3 -│ k: #end EVMC_REVERT ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -│ pc: 992 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #halt ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -│ pc: 992 -│ callDepth: 0 -│ statusCode: EVMC_REVERT -│ -│ (2 steps) -├─ 5 -│ k: #halt ~> CONTINUATION:K -│ pc: 992 -│ callDepth: 0 -│ statusCode: EVMC_REVERT -│ -┊ constraint: true -┊ subst: OMITTED SUBST -└─ 2 (leaf) - k: #halt ~> CONTINUATION - pc: PC_CELL_5d410f2a - callDepth: CALLDEPTH_CELL_5d410f2a - statusCode: STATUSCODE_FINAL - - - - -module SUMMARY-ASSERTTEST.TESTFAIL-ASSERT-FALSE:24D689F16D97B94F361AD530228C63AE6BF3442CEFB0E5C52A61320C18F35F3C - - - - - ( #execute - ~> CONTINUATION => #end EVMC_REVERT - ~> #pc [ REVERT ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( AssertTest . testFail_assert_false ( ) => b"z\xa9\xcc\xae" ) - - - 0 - - - ( .WordStack => ( 399 : ( 212 : ( selector ( "testFail_assert_false()" ) : .WordStack ) ) ) ) - - - ( .Bytes => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - ( 0 => 3 ) - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID - andBool ( CALLER_ID - - ( #end EVMC_REVERT => #halt ) - ~> #pc [ REVERT ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - ( _STATUSCODE => EVMC_REVERT ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"z\xa9\xcc\xae" - - - 0 - - - ( 399 : ( 212 : ( selector ( "testFail_assert_false()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - #halt - ~> ( #pc [ REVERT ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"z\xa9\xcc\xae" - - - 0 - - - ( 399 : ( 212 : ( selector ( "testFail_assert_false()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ src: tests/foundry/test/Simple.t.sol:5:54 -│ -│ (269 steps) -├─ 3 -│ k: #end EVMC_SUCCESS ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 213 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ src: tests/foundry/lib/forge-std/lib/ds-test/src/test.sol:37:38 -│ -│ (1 step) -├─ 4 -│ k: #halt ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 213 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ src: tests/foundry/lib/forge-std/lib/ds-test/src/test.sol:37:38 -│ -│ (2 steps) -└─ 5 (leaf) - k: #halt ~> CONTINUATION:K - pc: 213 - callDepth: 0 - statusCode: EVMC_SUCCESS - src: tests/foundry/lib/forge-std/lib/ds-test/src/test.sol:37:38 - - -┌─ 2 (root, leaf) -│ k: #halt ~> CONTINUATION -│ pc: PC_CELL_5d410f2a -│ callDepth: CALLDEPTH_CELL_5d410f2a -│ statusCode: STATUSCODE_FINAL - - -Node 5: - -( - - - - #halt - ~> CONTINUATION:K - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x18g]B" - - - 0 - - - ( selector ( "testFail_assert_true()" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - - .Map - - - .Map - - - 0 - - ... - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - - .Map - - - .Map - - - 1 - - ... - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - ... - -#And ( { true #Equals 0 <=Int CALLER_ID:Int } -#And ( { true #Equals 0 <=Int ORIGIN_ID:Int } -#And ( { true #Equals 0 <=Int NUMBER_CELL:Int } -#And ( { true #Equals CALLER_ID:Int - - ( #execute - ~> CONTINUATION => #end EVMC_SUCCESS - ~> #pc [ STOP ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( AssertTest . testFail_assert_true ( ) => b"\x18g]B" ) - - - 0 - - - ( .WordStack => ( selector ( "testFail_assert_true()" ) : .WordStack ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - ( 0 => 3 ) - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID - andBool ( CALLER_ID - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ STOP ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x18g]B" - - - 0 - - - ( selector ( "testFail_assert_true()" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - #halt - ~> ( #pc [ STOP ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x18g]B" - - - 0 - - - ( selector ( "testFail_assert_true()" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ src: tests/foundry/test/Simple.t.sol:5:54 -│ -│ (554 steps) -├─ 3 -│ k: CALL 9223372036854772901 645326474426547203313410069153905908525362434349 0 128 ... -│ pc: 480 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ src: tests/foundry/lib/forge-std/lib/ds-test/src/test.sol:58:59 -│ -│ (1 step) -├─ 4 -│ k: #checkCall 728815563385977040452943777879061427756277306518 0 ~> #call 728815563 ... -│ pc: 480 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ src: tests/foundry/lib/forge-std/lib/ds-test/src/test.sol:58:59 -│ -│ (212 steps) -├─ 5 -│ k: #end EVMC_REVERT ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -│ pc: 992 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 6 -│ k: #halt ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -│ pc: 992 -│ callDepth: 0 -│ statusCode: EVMC_REVERT -│ -│ (5 steps) -└─ 7 (leaf) - k: #halt ~> CONTINUATION:K - pc: 992 - callDepth: 0 - statusCode: EVMC_SUCCESS - - -┌─ 2 (root, leaf) -│ k: #halt ~> CONTINUATION -│ pc: PC_CELL_5d410f2a -│ callDepth: CALLDEPTH_CELL_5d410f2a -│ statusCode: STATUSCODE_FINAL - - -Node 7: - -( - - - - #halt - ~> CONTINUATION:K - - - NORMAL - - - LONDON - - - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - EVMC_SUCCESS - - - .List - - - .List - - - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"*M\xe1\xa1" - - - 0 - - - ( 399 : ( 212 : ( selector ( "testFail_expect_revert()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x84H\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - 5 - - - 9079256848778916976 - - - false - - - 0 - - ... - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - - .Map - - - .Map - - - 0 - - ... - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - - .Map - - - .Map - - - 1 - - ... - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - - b"" - - - 0 - - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - ... - -#And ( { true #Equals 0 <=Int CALLER_ID:Int } -#And ( { true #Equals 0 <=Int ORIGIN_ID:Int } -#And ( { true #Equals 0 <=Int NUMBER_CELL:Int } -#And ( { true #Equals CALLER_ID:Int - - ( #execute - ~> CONTINUATION => CALL 9223372036854772901 645326474426547203313410069153905908525362434349 0 128 4 128 0 - ~> #pc [ CALL ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( AssertTest . testFail_expect_revert ( ) => b"*M\xe1\xa1" ) - - - 0 - - - ( .WordStack => ( 132 : ( selector ( "expectRevert()" ) : ( 645326474426547203313410069153905908525362434349 : ( 212 : ( selector ( "testFail_expect_revert()" ) : .WordStack ) ) ) ) ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x84H\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - ... - ... - - ( 0 => 5 ) - - - ( _CALLGAS_CELL => 9079256848778916976 ) - - - false - - - 0 - - - - - .List - - - ( .Set => SetItem ( 645326474426547203313410069153905908525362434349 ) ) - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID - andBool ( CALLER_ID - - ( CALL 9223372036854772901 645326474426547203313410069153905908525362434349 0 128 4 128 0 => #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"\xf4\x84H\x14" false - ~> #return 128 0 ) - ~> #pc [ CALL ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"*M\xe1\xa1" - - - 0 - - - ( 132 : ( selector ( "expectRevert()" ) : ( 645326474426547203313410069153905908525362434349 : ( 212 : ( selector ( "testFail_expect_revert()" ) : .WordStack ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x84H\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 5 - - - 9079256848778916976 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - ( #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"\xf4\x84H\x14" false - ~> #return 128 0 - ~> #pc [ CALL ] => #end EVMC_REVERT - ~> #pc [ REVERT ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"*M\xe1\xa1" - - - 0 - - - ( ( 132 => 399 ) : ( ( selector ( "expectRevert()" ) => 212 ) : ( ( 645326474426547203313410069153905908525362434349 => selector ( "testFail_expect_revert()" ) ) : ( ( 212 : ( selector ( "testFail_expect_revert()" ) : .WordStack ) ) => .WordStack ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x84H\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x84H\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - ... - ... - - 5 - - - 9079256848778916976 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - ( false => true ) - - - ( _EXPECTEDREASON_CELL => b"" ) - - - ( _EXPECTEDDEPTH_CELL => 1 ) - - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - ( #end EVMC_REVERT => #halt ) - ~> #pc [ REVERT ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - ( _STATUSCODE => EVMC_REVERT ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"*M\xe1\xa1" - - - 0 - - - ( 399 : ( 212 : ( selector ( "testFail_expect_revert()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x84H\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 5 - - - 9079256848778916976 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - true - - - b"" - - - 1 - - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - #halt - ~> ( #pc [ REVERT ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - - ( EVMC_REVERT => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"*M\xe1\xa1" - - - 0 - - - ( 399 : ( 212 : ( selector ( "testFail_expect_revert()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x84H\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 5 - - - 9079256848778916976 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - ( true => false ) - - - b"" - - - ( 1 => 0 ) - - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ src: tests/foundry/test/Simple.t.sol:5:54 -│ -│ (376 steps) -├─ 3 -│ k: #end EVMC_REVERT ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -│ pc: 992 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #halt ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -│ pc: 992 -│ callDepth: 0 -│ statusCode: EVMC_REVERT -│ -│ (2 steps) -└─ 5 (leaf) - k: #halt ~> CONTINUATION:K - pc: 992 - callDepth: 0 - statusCode: EVMC_REVERT - - -┌─ 2 (root, leaf) -│ k: #halt ~> CONTINUATION -│ pc: PC_CELL_5d410f2a -│ callDepth: CALLDEPTH_CELL_5d410f2a -│ statusCode: STATUSCODE_FINAL - - -Node 5: - -( - - - - #halt - ~> CONTINUATION:K - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"]\xde\xcb\xfd" - - - 0 - - - ( 399 : ( 212 : ( selector ( "test_assert_false()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - - .Map - - - .Map - - - 0 - - ... - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - - .Map - - - .Map - - - 1 - - ... - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - ... - -#And ( { true #Equals 0 <=Int CALLER_ID:Int } -#And ( { true #Equals 0 <=Int ORIGIN_ID:Int } -#And ( { true #Equals 0 <=Int NUMBER_CELL:Int } -#And ( { true #Equals CALLER_ID:Int - - ( #execute - ~> CONTINUATION => #end EVMC_REVERT - ~> #pc [ REVERT ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( AssertTest . test_assert_false ( ) => b"]\xde\xcb\xfd" ) - - - 0 - - - ( .WordStack => ( 399 : ( 212 : ( selector ( "test_assert_false()" ) : .WordStack ) ) ) ) - - - ( .Bytes => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - ( 0 => 3 ) - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID - andBool ( CALLER_ID - - ( #end EVMC_REVERT => #halt ) - ~> #pc [ REVERT ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - ( _STATUSCODE => EVMC_REVERT ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"]\xde\xcb\xfd" - - - 0 - - - ( 399 : ( 212 : ( selector ( "test_assert_false()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - #halt - ~> ( #pc [ REVERT ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"]\xde\xcb\xfd" - - - 0 - - - ( 399 : ( 212 : ( selector ( "test_assert_false()" ) : .WordStack ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ src: tests/foundry/test/Simple.t.sol:5:54 -│ -│ (616 steps) -├─ 3 (split) -│ k: JUMPI 526 bool2Word ( 100 <=Int VV0_x_114b9705:Int ) ~> #pc [ JUMPI ] ~> #execut ... -│ pc: 518 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ src: tests/foundry/test/Simple.t.sol:26:27 -┃ -┃ (branch) -┣━━┓ constraint: { true #Equals 100 <=Int VV0_x_114b9705:Int } -┃ │ -┃ ├─ 4 -┃ │ k: JUMPI 526 bool2Word ( 100 <=Int VV0_x_114b9705:Int ) ~> #pc [ JUMPI ] ~> #execut ... -┃ │ pc: 518 -┃ │ callDepth: 0 -┃ │ statusCode: STATUSCODE:StatusCode -┃ │ src: tests/foundry/test/Simple.t.sol:26:27 -┃ │ -┃ │ (64 steps) -┃ ├─ 6 -┃ │ k: #end EVMC_SUCCESS ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -┃ │ pc: 213 -┃ │ callDepth: 0 -┃ │ statusCode: STATUSCODE:StatusCode -┃ │ src: tests/foundry/lib/forge-std/lib/ds-test/src/test.sol:37:38 -┃ │ -┃ │ (1 step) -┃ ├─ 8 -┃ │ k: #halt ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -┃ │ pc: 213 -┃ │ callDepth: 0 -┃ │ statusCode: EVMC_SUCCESS -┃ │ src: tests/foundry/lib/forge-std/lib/ds-test/src/test.sol:37:38 -┃ │ -┃ │ (2 steps) -┃ ├─ 10 -┃ │ k: #halt ~> CONTINUATION:K -┃ │ pc: 213 -┃ │ callDepth: 0 -┃ │ statusCode: EVMC_SUCCESS -┃ │ src: tests/foundry/lib/forge-std/lib/ds-test/src/test.sol:37:38 -┃ │ -┃ ┊ constraint: true -┃ ┊ subst: OMITTED SUBST -┃ └─ 2 (leaf) -┃ k: #halt ~> CONTINUATION -┃ pc: PC_CELL_5d410f2a -┃ callDepth: CALLDEPTH_CELL_5d410f2a -┃ statusCode: STATUSCODE_FINAL -┃ -┗━━┓ constraint: { true #Equals ( notBool 100 <=Int VV0_x_114b9705:Int ) } - │ - ├─ 5 - │ k: JUMPI 526 bool2Word ( 100 <=Int VV0_x_114b9705:Int ) ~> #pc [ JUMPI ] ~> #execut ... - │ pc: 518 - │ callDepth: 0 - │ statusCode: STATUSCODE:StatusCode - │ src: tests/foundry/test/Simple.t.sol:26:27 - │ - │ (102 steps) - ├─ 7 - │ k: #end EVMC_REVERT ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K - │ pc: 992 - │ callDepth: 0 - │ statusCode: STATUSCODE:StatusCode - │ - │ (1 step) - ├─ 9 - │ k: #halt ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K - │ pc: 992 - │ callDepth: 0 - │ statusCode: EVMC_REVERT - │ - │ (2 steps) - └─ 11 (leaf) - k: #halt ~> CONTINUATION:K - pc: 992 - callDepth: 0 - statusCode: EVMC_REVERT - - - -Node 11: - -( - - - - #halt - ~> CONTINUATION:K - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) - - - 0 - - - ( 526 : ( VV0_x_114b9705:Int : ( 212 : ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - - .Map - - - .Map - - - 0 - - ... - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - - .Map - - - .Map - - - 1 - - ... - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - ... - -#And ( { true #Equals 0 <=Int CALLER_ID:Int } -#And ( { true #Equals 0 <=Int ORIGIN_ID:Int } -#And ( { true #Equals 0 <=Int NUMBER_CELL:Int } -#And ( { true #Equals 0 <=Int VV0_x_114b9705:Int } -#And ( { true #Equals VV0_x_114b9705:Int - - ( #execute - ~> CONTINUATION => JUMPI 526 bool2Word ( 100 <=Int VV0_x_114b9705:Int ) - ~> #pc [ JUMPI ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( AssertTest . test_failing_branch ( VV0_x_114b9705 : uint256 ) => b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) ) - - - 0 - - - ( .WordStack => ( VV0_x_114b9705:Int : ( 212 : ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) ) ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - ( 0 => 3 ) - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int VV0_x_114b9705:Int - andBool ( VV0_x_114b9705:Int - - ( JUMPI 526 bool2Word ( 100 <=Int VV0_x_114b9705:Int ) - ~> #pc [ JUMPI ] => #end EVMC_SUCCESS - ~> #pc [ STOP ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) - - - 0 - - - ( ( VV0_x_114b9705:Int => selector ( "test_failing_branch(uint256)" ) ) : ( ( 212 : ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) ) => .WordStack ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 100 <=Int VV0_x_114b9705:Int - andBool ( CALLER_ID:Int - - ( JUMPI 526 bool2Word ( 100 <=Int VV0_x_114b9705:Int ) - ~> #pc [ JUMPI ] => #end EVMC_REVERT - ~> #pc [ REVERT ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) - - - 0 - - - ( ( VV0_x_114b9705:Int => 526 ) : ( ( 212 => VV0_x_114b9705:Int ) : ( ( selector ( "test_failing_branch(uint256)" ) => 212 ) : ( .WordStack => ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( CALLER_ID:Int - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ STOP ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) - - - 0 - - - ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 100 <=Int VV0_x_114b9705:Int - andBool ( CALLER_ID:Int - - ( #end EVMC_REVERT => #halt ) - ~> #pc [ REVERT ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - ( _STATUSCODE => EVMC_REVERT ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) - - - 0 - - - ( 526 : ( VV0_x_114b9705:Int : ( 212 : ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( VV0_x_114b9705:Int - - #halt - ~> ( #pc [ STOP ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) - - - 0 - - - ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 100 <=Int VV0_x_114b9705:Int - andBool ( CALLER_ID:Int - - #halt - ~> ( #pc [ REVERT ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"F\"\xb1U" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) - - - 0 - - - ( 526 : ( VV0_x_114b9705:Int : ( 212 : ( selector ( "test_failing_branch(uint256)" ) : .WordStack ) ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( VV0_x_114b9705:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ src: tests/foundry/test/Simple.t.sol:5:54 -│ -│ (580 steps) -├─ 3 (split) -│ k: JUMPI 549 bool2Word ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int ) ~> #pc [ JUM ... -│ pc: 545 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -┃ -┃ (branch) -┣━━┓ constraint: { true #Equals VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int } -┃ │ -┃ ├─ 4 -┃ │ k: JUMPI 549 bool2Word ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int ) ~> #pc [ JUM ... -┃ │ pc: 545 -┃ │ callDepth: 0 -┃ │ statusCode: STATUSCODE:StatusCode -┃ │ -┃ │ (116 steps) -┃ ├─ 6 -┃ │ k: #end EVMC_REVERT ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -┃ │ pc: 992 -┃ │ callDepth: 0 -┃ │ statusCode: STATUSCODE:StatusCode -┃ │ -┃ │ (1 step) -┃ ├─ 8 -┃ │ k: #halt ~> #pc [ REVERT ] ~> #execute ~> CONTINUATION:K -┃ │ pc: 992 -┃ │ callDepth: 0 -┃ │ statusCode: EVMC_REVERT -┃ │ -┃ │ (2 steps) -┃ └─ 10 (leaf) -┃ k: #halt ~> CONTINUATION:K -┃ pc: 992 -┃ callDepth: 0 -┃ statusCode: EVMC_REVERT -┃ -┗━━┓ constraint: { true #Equals ( notBool VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int ) } - │ - ├─ 5 - │ k: JUMPI 549 bool2Word ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int ) ~> #pc [ JUM ... - │ pc: 545 - │ callDepth: 0 - │ statusCode: STATUSCODE:StatusCode - │ - │ (62 steps) - ├─ 7 - │ k: #end EVMC_SUCCESS ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K - │ pc: 213 - │ callDepth: 0 - │ statusCode: STATUSCODE:StatusCode - │ src: tests/foundry/lib/forge-std/lib/ds-test/src/test.sol:37:38 - │ - │ (1 step) - ├─ 9 - │ k: #halt ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K - │ pc: 213 - │ callDepth: 0 - │ statusCode: EVMC_SUCCESS - │ src: tests/foundry/lib/forge-std/lib/ds-test/src/test.sol:37:38 - │ - │ (2 steps) - ├─ 11 - │ k: #halt ~> CONTINUATION:K - │ pc: 213 - │ callDepth: 0 - │ statusCode: EVMC_SUCCESS - │ src: tests/foundry/lib/forge-std/lib/ds-test/src/test.sol:37:38 - │ - ┊ constraint: true - ┊ subst: OMITTED SUBST - └─ 2 (leaf) - k: #halt ~> CONTINUATION - pc: PC_CELL_5d410f2a - callDepth: CALLDEPTH_CELL_5d410f2a - statusCode: STATUSCODE_FINAL - - - -Node 10: - -( - - - - #halt - ~> CONTINUATION:K - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) - - - 0 - - - ( 557 : ( VV1_y_114b9705:Int : ( VV0_x_114b9705:Int : ( 212 : ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) ) ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - - .Map - - - .Map - - - 0 - - ... - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - - .Map - - - .Map - - - 1 - - ... - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - ... - -#And ( { true #Equals 0 <=Int CALLER_ID:Int } -#And ( { true #Equals 0 <=Int ORIGIN_ID:Int } -#And ( { true #Equals 0 <=Int NUMBER_CELL:Int } -#And ( { true #Equals 0 <=Int VV0_x_114b9705:Int } -#And ( { true #Equals 0 <=Int VV1_y_114b9705:Int } -#And ( { true #Equals VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int } -#And ( { true #Equals CALLER_ID:Int - - ( #execute - ~> CONTINUATION => JUMPI 549 bool2Word ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int ) - ~> #pc [ JUMPI ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( AssertTest . test_revert_branch ( VV0_x_114b9705 : uint256 , VV1_y_114b9705 : uint256 ) => b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) ) - - - 0 - - - ( .WordStack => ( VV1_y_114b9705:Int : ( VV0_x_114b9705:Int : ( 212 : ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) ) ) ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - ( 0 => 3 ) - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int VV0_x_114b9705:Int - andBool ( 0 <=Int VV1_y_114b9705:Int - andBool ( VV0_x_114b9705:Int - - ( JUMPI 549 bool2Word ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int ) - ~> #pc [ JUMPI ] => #end EVMC_REVERT - ~> #pc [ REVERT ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) - - - 0 - - - ( ( VV1_y_114b9705:Int => 557 ) : ( ( VV0_x_114b9705:Int => VV1_y_114b9705:Int ) : ( ( 212 => VV0_x_114b9705:Int ) : ( ( selector ( "test_revert_branch(uint256,uint256)" ) => 212 ) : ( .WordStack => ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" => b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 0 <=Int VV1_y_114b9705:Int - andBool ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int - andBool ( CALLER_ID:Int - - ( JUMPI 549 bool2Word ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int ) - ~> #pc [ JUMPI ] => #end EVMC_SUCCESS - ~> #pc [ STOP ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) - - - 0 - - - ( ( VV1_y_114b9705:Int => selector ( "test_revert_branch(uint256,uint256)" ) ) : ( ( VV0_x_114b9705:Int : ( 212 : ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) ) ) => .WordStack ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 0 <=Int VV1_y_114b9705:Int - andBool ( CALLER_ID:Int - - ( #end EVMC_REVERT => #halt ) - ~> #pc [ REVERT ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - ( _STATUSCODE => EVMC_REVERT ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) - - - 0 - - - ( 557 : ( VV1_y_114b9705:Int : ( VV0_x_114b9705:Int : ( 212 : ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) ) ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... -
- - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - -
- requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 0 <=Int VV1_y_114b9705:Int - andBool ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int - andBool ( CALLER_ID:Int - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ STOP ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) - - - 0 - - - ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 0 <=Int VV1_y_114b9705:Int - andBool ( VV0_x_114b9705:Int - - #halt - ~> ( #pc [ REVERT ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - EVMC_REVERT - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) - - - 0 - - - ( 557 : ( VV1_y_114b9705:Int : ( VV0_x_114b9705:Int : ( 212 : ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) ) ) ) ) - - - b"NH{q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 0 <=Int VV1_y_114b9705:Int - andBool ( VV1_y_114b9705:Int <=Int VV0_x_114b9705:Int - andBool ( CALLER_ID:Int - - #halt - ~> ( #pc [ STOP ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x8c\x0e\xdd\x8b" +Bytes #buf ( 32 , VV0_x_114b9705:Int ) +Bytes #buf ( 32 , VV1_y_114b9705:Int ) - - - 0 - - - ( selector ( "test_revert_branch(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - .Set - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_x_114b9705:Int - andBool ( 0 <=Int VV1_y_114b9705:Int - andBool ( VV0_x_114b9705:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ src: tests/foundry/test/AssumeTest.t.sol:5:44 -│ -│ (919 steps) -├─ 3 -│ k: CALL 9223372036854772734 645326474426547203313410069153905908525362434349 0 128 ... -│ pc: 424 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #checkCall 728815563385977040452943777879061427756277306518 0 ~> #call 728815563 ... -│ pc: 424 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (299 steps) -├─ 5 -│ k: #end EVMC_SUCCESS ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 183 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 -│ -│ (1 step) -├─ 6 -│ k: #halt ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 183 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 -│ -│ (2 steps) -└─ 7 (leaf) - k: #halt ~> CONTINUATION:K - pc: 183 - callDepth: 0 - statusCode: EVMC_SUCCESS - src: tests/foundry/lib/forge-std/src/Script.sol:8:9 - - -┌─ 2 (root, leaf) -│ k: #halt ~> CONTINUATION -│ pc: PC_CELL_5d410f2a -│ callDepth: CALLDEPTH_CELL_5d410f2a -│ statusCode: STATUSCODE_FINAL - - -Node 7: - -( - - - - #halt - ~> CONTINUATION:K - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"_.p\xfb" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "testFail_assume_false(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - - 6 - - - 9079256848778916812 - - - false - - - 0 - - ... - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - - .Map - - - .Map - - - 0 - - ... - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - - .Map - - - .Map - - - 1 - - ... - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - ... - -#And ( { VV0_a_114b9705:Int #Equals VV1_b_114b9705:Int } -#And ( { true #Equals 0 <=Int CALLER_ID:Int } -#And ( { true #Equals 0 <=Int ORIGIN_ID:Int } -#And ( { true #Equals 0 <=Int NUMBER_CELL:Int } -#And ( { true #Equals 0 <=Int VV1_b_114b9705:Int } -#And ( { true #Equals CALLER_ID:Int - - ( #execute - ~> CONTINUATION => CALL 9223372036854772734 645326474426547203313410069153905908525362434349 0 128 36 128 0 - ~> #pc [ CALL ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( AssumeTest . testFail_assume_false ( VV0_a_114b9705 : uint256 , VV1_b_114b9705 : uint256 ) => b"_.p\xfb" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) ) - - - 0 - - - ( .WordStack => ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) - - ... - ... - - ( 0 => 6 ) - - - ( _CALLGAS_CELL => 9079256848778916812 ) - - - false - - - 0 - - - - - .List - - - ( .Set => SetItem ( 645326474426547203313410069153905908525362434349 ) ) - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( VV0_a_114b9705:Int - - ( CALL 9223372036854772734 645326474426547203313410069153905908525362434349 0 128 36 128 0 => #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) false - ~> #return 128 0 ) - ~> #pc [ CALL ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"_.p\xfb" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) - - ... - ... - - 6 - - - 9079256848778916812 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - ( #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) false - ~> #return 128 0 - ~> #pc [ CALL ] => #end EVMC_SUCCESS - ~> #pc [ STOP ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"_.p\xfb" +Bytes #buf ( 32 , ( VV0_a_114b9705:Int => VV1_b_114b9705:Int ) ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 164 => selector ( "testFail_assume_false(uint256,uint256)" ) ) : ( ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) => .WordStack ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - ... - ... - - 6 - - - 9079256848778916812 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ STOP ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"_.p\xfb" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "testFail_assume_false(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - ... - ... - - 6 - - - 9079256848778916812 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( _VV0_a_114b9705 ==K VV1_b_114b9705:Int - andBool ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - #halt - ~> ( #pc [ STOP ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"_.p\xfb" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "testFail_assume_false(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - ... - ... - - 6 - - - 9079256848778916812 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( _VV0_a_114b9705 ==K VV1_b_114b9705:Int - andBool ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ src: tests/foundry/test/AssumeTest.t.sol:5:44 -│ -│ (824 steps) -├─ 3 -│ k: CALL 9223372036854772808 645326474426547203313410069153905908525362434349 0 128 ... -│ pc: 424 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #checkCall 728815563385977040452943777879061427756277306518 0 ~> #call 728815563 ... -│ pc: 424 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1000 steps) -├─ 5 -│ k: #gas [ MSTORE , MSTORE 192 46308022326495007027972728677917914892729792999299745 ... -│ pc: 2271 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1000 steps) -├─ 6 -│ k: #gasExec ( LONDON , JUMP 2621 ) ~> #deductGas ~> #access [ JUMP , JUMP 2621 ] ~> ... -│ pc: 2691 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (819 steps) -├─ 7 -│ k: CALL 9223372036854765663 645326474426547203313410069153905908525362434349 0 388 ... -│ pc: 2389 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 8 -│ k: #checkCall 728815563385977040452943777879061427756277306518 0 ~> #call 728815563 ... -│ pc: 2389 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (387 steps) -├─ 9 -│ k: #end EVMC_SUCCESS ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 183 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 -│ -│ (1 step) -├─ 10 -│ k: #halt ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 183 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 -│ -│ (2 steps) -├─ 11 -│ k: #halt ~> CONTINUATION:K -│ pc: 183 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 -│ -┊ constraint: true -┊ subst: OMITTED SUBST -└─ 2 (leaf) - k: #halt ~> CONTINUATION - pc: PC_CELL_5d410f2a - callDepth: CALLDEPTH_CELL_5d410f2a - statusCode: STATUSCODE_FINAL - - - - -module SUMMARY-ASSUMETEST.TESTFAIL-ASSUME-TRUE:EF68C1EA07B094FCF03E02D287B47204FA02108E3334C204F81DEA4C78FD1289 - - - - - ( #execute - ~> CONTINUATION => CALL 9223372036854772808 645326474426547203313410069153905908525362434349 0 128 36 128 0 - ~> #pc [ CALL ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( AssumeTest . testFail_assume_true ( VV0_a_114b9705 : uint256 , VV1_b_114b9705 : uint256 ) => b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) ) - - - 0 - - - ( .WordStack => ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) ) - - ... - ... - - ( 0 => 6 ) - - - ( _CALLGAS_CELL => 9079256848778916885 ) - - - false - - - 0 - - - - - .List - - - ( .Set => SetItem ( 645326474426547203313410069153905908525362434349 ) ) - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( VV0_a_114b9705:Int - - ( CALL 9223372036854772808 645326474426547203313410069153905908525362434349 0 128 36 128 0 => #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) false - ~> #return 128 0 ) - ~> #pc [ CALL ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) - - ... - ... - - 6 - - - 9079256848778916885 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - ( #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) false - ~> #return 128 0 - ~> #pc [ CALL ] => #gas [ MSTORE , MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 ] - ~> MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 - ~> #pc [ MSTORE ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 164 => 128 ) : ( ( selector ( "assume(bool)" ) => 645326474426547203313410069153905908525362434349 ) : ( ( 645326474426547203313410069153905908525362434349 => 455 ) : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( ( 182 => 455 ) : ( ( selector ( "testFail_assume_true(uint256,uint256)" ) => VV1_b_114b9705:Int ) : ( .WordStack => ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - ... - ... - - ( 6 => 8 ) - - - 9079256848778916885 - - - false - - - 0 - - - - - ( .List => ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Expected\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - ( #gas [ MSTORE , MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 ] - ~> MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 - ~> #pc [ MSTORE ] => #gasExec ( LONDON , JUMP 2621 ) - ~> #deductGas - ~> #access [ JUMP , JUMP 2621 ] - ~> JUMP 2621 - ~> #pc [ JUMP ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 128 => 256 ) : ( ( 645326474426547203313410069153905908525362434349 => 388 ) : ( ( 455 => 2540 ) : ( ( VV1_b_114b9705:Int => 0 ) : ( ( VV0_a_114b9705:Int => 388 ) : ( ( 455 => 256 ) : ( ( VV1_b_114b9705:Int => 2375 ) : ( ( VV0_a_114b9705:Int => 645326474426547203313410069153905908525362434349 ) : ( ( 182 => 0 ) : ( ( selector ( "testFail_assume_true(uint256,uint256)" ) => 455 ) : ( .WordStack => ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - ... - ... - - ( 8 => 13 ) - - - 9079256848778916885 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Expected\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - ( #gasExec ( LONDON , JUMP 2621 ) - ~> #deductGas - ~> #access [ JUMP , JUMP 2621 ] - ~> JUMP 2621 - ~> #pc [ JUMP ] => CALL 9223372036854765663 645326474426547203313410069153905908525362434349 0 388 100 388 0 - ~> #pc [ CALL ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 256 => 488 ) : ( ( 388 => 645326474426547203313410069153905908525362434349 ) : ( ( 2540 => 0 ) : ( ( 0 => 455 ) : ( ( 388 => VV1_b_114b9705:Int ) : ( ( 256 => VV0_a_114b9705:Int ) : ( ( 2375 => 455 ) : ( ( 645326474426547203313410069153905908525362434349 => VV1_b_114b9705:Int ) : ( ( 0 => VV0_a_114b9705:Int ) : ( ( 455 => 182 ) : ( ( VV1_b_114b9705:Int => selector ( "testFail_assume_true(uint256,uint256)" ) ) : ( ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) => .WordStack ) ) ) ) ) ) ) ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - ... - ... - - ( 13 => 17 ) - - - ( 9079256848778916885 => 9079256848778909852 ) - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Expected\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - ( CALL 9223372036854765663 645326474426547203313410069153905908525362434349 0 388 100 388 0 => #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" false - ~> #return 388 0 ) - ~> #pc [ CALL ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( 488 : ( 645326474426547203313410069153905908525362434349 : ( 0 : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909852 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Expected\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - ( #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" false - ~> #return 388 0 - ~> #pc [ CALL ] => #end EVMC_SUCCESS - ~> #pc [ STOP ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 488 => selector ( "testFail_assume_true(uint256,uint256)" ) ) : ( ( 645326474426547203313410069153905908525362434349 : ( 0 : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) => .WordStack ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909852 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Expected\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - ( .Map => ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 0 ) ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - ( .Map => ( 46308022326495007027972728677917914892729792999299745830475596687180801507328 |-> 1 ) ) - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( .Map => ( 0 |-> 256 ) ) - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ STOP ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909852 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Expected\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 0 ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - ( 46308022326495007027972728677917914892729792999299745830475596687180801507328 |-> 1 ) - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( 0 |-> 256 ) - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - #halt - ~> ( #pc [ STOP ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\x0e\xb6V\xda" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "testFail_assume_true(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909852 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Expected\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 0 ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - ( 46308022326495007027972728677917914892729792999299745830475596687180801507328 |-> 1 ) - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( 0 |-> 256 ) - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ src: tests/foundry/test/AssumeTest.t.sol:5:44 -│ -│ (872 steps) -├─ 3 -│ k: CALL 9223372036854772765 645326474426547203313410069153905908525362434349 0 128 ... -│ pc: 424 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #checkCall 728815563385977040452943777879061427756277306518 0 ~> #call 728815563 ... -│ pc: 424 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1000 steps) -├─ 5 -│ k: #gas [ MSTORE , MSTORE 192 46308022326495007027972728677917914892729792999299745 ... -│ pc: 2271 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1000 steps) -├─ 6 -│ k: #gasExec ( LONDON , JUMP 2621 ) ~> #deductGas ~> #access [ JUMP , JUMP 2621 ] ~> ... -│ pc: 2691 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (819 steps) -├─ 7 -│ k: CALL 9223372036854765620 645326474426547203313410069153905908525362434349 0 388 ... -│ pc: 2389 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 8 -│ k: #checkCall 728815563385977040452943777879061427756277306518 0 ~> #call 728815563 ... -│ pc: 2389 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (387 steps) -├─ 9 -│ k: #end EVMC_SUCCESS ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 183 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 -│ -│ (1 step) -├─ 10 -│ k: #halt ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 183 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 -│ -│ (2 steps) -└─ 11 (leaf) - k: #halt ~> CONTINUATION:K - pc: 183 - callDepth: 0 - statusCode: EVMC_SUCCESS - src: tests/foundry/lib/forge-std/src/Script.sol:8:9 - - -┌─ 2 (root, leaf) -│ k: #halt ~> CONTINUATION -│ pc: PC_CELL_5d410f2a -│ callDepth: CALLDEPTH_CELL_5d410f2a -│ statusCode: STATUSCODE_FINAL - - -Node 11: - -( - - - - #halt - ~> CONTINUATION:K - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - 17 - - - 9079256848778909809 - - - false - - - 0 - - ... - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Expected\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 0 ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - - ( 46308022326495007027972728677917914892729792999299745830475596687180801507328 |-> 1 ) - - - .Map - - - 0 - - ... - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - - ( 0 |-> 256 ) - - - .Map - - - 1 - - ... - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - ... - -#And ( { true #Equals 0 <=Int CALLER_ID:Int } -#And ( { true #Equals 0 <=Int ORIGIN_ID:Int } -#And ( #Not ( { VV0_a_114b9705:Int #Equals VV1_b_114b9705:Int } ) -#And ( { true #Equals 0 <=Int NUMBER_CELL:Int } -#And ( { true #Equals 0 <=Int VV0_a_114b9705:Int } -#And ( { true #Equals 0 <=Int VV1_b_114b9705:Int } -#And ( { true #Equals CALLER_ID:Int - - ( #execute - ~> CONTINUATION => CALL 9223372036854772765 645326474426547203313410069153905908525362434349 0 128 36 128 0 - ~> #pc [ CALL ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( AssumeTest . test_assume_false ( VV0_a_114b9705 : uint256 , VV1_b_114b9705 : uint256 ) => b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) ) - - - 0 - - - ( .WordStack => ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) ) - - ... - ... - - ( 0 => 6 ) - - - ( _CALLGAS_CELL => 9079256848778916843 ) - - - false - - - 0 - - - - - .List - - - ( .Set => SetItem ( 645326474426547203313410069153905908525362434349 ) ) - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( VV0_a_114b9705:Int - - ( CALL 9223372036854772765 645326474426547203313410069153905908525362434349 0 128 36 128 0 => #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) false - ~> #return 128 0 ) - ~> #pc [ CALL ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) - - ... - ... - - 6 - - - 9079256848778916843 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - ( #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) false - ~> #return 128 0 - ~> #pc [ CALL ] => #gas [ MSTORE , MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 ] - ~> MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 - ~> #pc [ MSTORE ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 164 => 128 ) : ( ( selector ( "assume(bool)" ) => 645326474426547203313410069153905908525362434349 ) : ( ( 645326474426547203313410069153905908525362434349 => 455 ) : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( ( 182 => 455 ) : ( ( selector ( "test_assume_false(uint256,uint256)" ) => VV1_b_114b9705:Int ) : ( .WordStack => ( VV0_a_114b9705:Int : ( 182 : ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( ( notBool VV0_a_114b9705:Int ==Int VV1_b_114b9705:Int ) ) ) => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - ... - ... - - ( 6 => 8 ) - - - 9079256848778916843 - - - false - - - 0 - - - - - ( .List => ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Expected\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - ( #gas [ MSTORE , MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 ] - ~> MSTORE 192 46308022326495007027972728677917914892729792999299745830475596687180801507328 - ~> #pc [ MSTORE ] => #gasExec ( LONDON , JUMP 2621 ) - ~> #deductGas - ~> #access [ JUMP , JUMP 2621 ] - ~> JUMP 2621 - ~> #pc [ JUMP ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 128 => 256 ) : ( ( 645326474426547203313410069153905908525362434349 => 388 ) : ( ( 455 => 2540 ) : ( ( VV1_b_114b9705:Int => 0 ) : ( ( VV0_a_114b9705:Int => 388 ) : ( ( 455 => 256 ) : ( ( VV1_b_114b9705:Int => 2375 ) : ( ( VV0_a_114b9705:Int => 645326474426547203313410069153905908525362434349 ) : ( ( 182 => 0 ) : ( ( selector ( "test_assume_false(uint256,uint256)" ) => 455 ) : ( .WordStack => ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - ... - ... - - ( 8 => 13 ) - - - 9079256848778916843 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Expected\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - ( #gasExec ( LONDON , JUMP 2621 ) - ~> #deductGas - ~> #access [ JUMP , JUMP 2621 ] - ~> JUMP 2621 - ~> #pc [ JUMP ] => CALL 9223372036854765620 645326474426547203313410069153905908525362434349 0 388 100 388 0 - ~> #pc [ CALL ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 256 => 488 ) : ( ( 388 => 645326474426547203313410069153905908525362434349 ) : ( ( 2540 => 0 ) : ( ( 0 => 455 ) : ( ( 388 => VV1_b_114b9705:Int ) : ( ( 256 => VV0_a_114b9705:Int ) : ( ( 2375 => 455 ) : ( ( 645326474426547203313410069153905908525362434349 => VV1_b_114b9705:Int ) : ( ( 0 => VV0_a_114b9705:Int ) : ( ( 455 => 182 ) : ( ( VV1_b_114b9705:Int => selector ( "test_assume_false(uint256,uint256)" ) ) : ( ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) => .WordStack ) ) ) ) ) ) ) ) ) ) ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - ... - ... - - ( 13 => 17 ) - - - ( 9079256848778916843 => 9079256848778909809 ) - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Expected\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - ( CALL 9223372036854765620 645326474426547203313410069153905908525362434349 0 388 100 388 0 => #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" false - ~> #return 388 0 ) - ~> #pc [ CALL ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( 488 : ( 645326474426547203313410069153905908525362434349 : ( 0 : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909809 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Expected\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - ( #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" false - ~> #return 388 0 - ~> #pc [ CALL ] => #end EVMC_SUCCESS - ~> #pc [ STOP ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( ( 488 => selector ( "test_assume_false(uint256,uint256)" ) ) : ( ( 645326474426547203313410069153905908525362434349 : ( 0 : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 455 : ( VV1_b_114b9705:Int : ( VV0_a_114b9705:Int : ( 182 : ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) ) ) ) ) ) ) ) ) ) => .WordStack ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909809 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Expected\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - ( .Map => ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 0 ) ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - ( .Map => ( 46308022326495007027972728677917914892729792999299745830475596687180801507328 |-> 1 ) ) - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( .Map => ( 0 |-> 256 ) ) - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ STOP ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909809 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Expected\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 0 ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - ( 46308022326495007027972728677917914892729792999299745830475596687180801507328 |-> 1 ) - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( 0 |-> 256 ) - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int - - #halt - ~> ( #pc [ STOP ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"\xe4\x1b\xef\xb4" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes #buf ( 32 , VV1_b_114b9705:Int ) - - - 0 - - - ( selector ( "test_assume_false(uint256,uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dp\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01p\xca\x10\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - ... - ... - - 17 - - - 9079256848778909809 - - - false - - - 0 - - - - - ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 29485693714967335757563038618841744472215891622979272243827124658718922284880 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"Error: a == b not satisfied [uint]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV1_b_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Expected\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) ListItem ( { 728815563385977040452943777879061427756277306518 | ListItem ( 80904256614161075919025625882663817043659112028191499838463115877652359487912 ) | b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" +Bytes #buf ( 32 , VV0_a_114b9705:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n Actual\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" } ) - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 0 ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - ( 46308022326495007027972728677917914892729792999299745830475596687180801507328 |-> 1 ) - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( 0 |-> 256 ) - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( VV0_a_114b9705:Int =/=K VV1_b_114b9705:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_a_114b9705:Int - andBool ( 0 <=Int VV1_b_114b9705:Int - andBool ( CALLER_ID:Int 1 ) , 46308022326495007027972728677917914892729792999299745830475596687180801507328 ) , revertExpected: false , opcodeExpected: false , recordEventExpected: false , eventExpected: false ) } ) - Path condition: - #Top - -Join the Runtime Verification Discord server for support: https://discord.gg/GHvFbRDD - -Access documentation for KEVM foundry integration at https://docs.runtimeverification.com/kevm-integration-for-foundry/ diff --git a/tests/foundry/golden/LoopsTest.sum_N(uint256).expected b/tests/foundry/golden/LoopsTest.sum_N(uint256).expected deleted file mode 100644 index 40167d221a..0000000000 --- a/tests/foundry/golden/LoopsTest.sum_N(uint256).expected +++ /dev/null @@ -1,2106 +0,0 @@ - -┌─ 1 (root) -│ k: #execute ~> CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ src: tests/foundry/test/Loops.t.sol:5:278 -│ -│ (776 steps) -├─ 3 -│ k: CALL 9223372036854772793 645326474426547203313410069153905908525362434349 0 128 ... -│ pc: 1509 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (1 step) -├─ 4 -│ k: #checkCall 728815563385977040452943777879061427756277306518 0 ~> #call 728815563 ... -│ pc: 1509 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ -│ (153 steps) -├─ 5 (split) -│ k: JUMPI 1569 bool2Word ( VV0_n_114b9705:Int ==Int 0 ) ~> #pc [ JUMPI ] ~> #execute ... -│ pc: 1539 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ src: tests/foundry/test/Loops.t.sol:164:178 -┃ -┃ (branch) -┣━━┓ constraint: { true #Equals VV0_n_114b9705:Int ==Int 0 } -┃ │ -┃ ├─ 6 -┃ │ k: JUMPI 1569 bool2Word ( VV0_n_114b9705:Int ==Int 0 ) ~> #pc [ JUMPI ] ~> #execute ... -┃ │ pc: 1539 -┃ │ callDepth: 0 -┃ │ statusCode: STATUSCODE:StatusCode -┃ │ src: tests/foundry/test/Loops.t.sol:164:178 -┃ │ -┃ │ (162 steps) -┃ ├─ 8 -┃ │ k: #end EVMC_SUCCESS ~> #pc [ RETURN ] ~> #execute ~> CONTINUATION:K -┃ │ pc: 352 -┃ │ callDepth: 0 -┃ │ statusCode: STATUSCODE:StatusCode -┃ │ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 -┃ │ -┃ │ (1 step) -┃ ├─ 10 -┃ │ k: #halt ~> #pc [ RETURN ] ~> #execute ~> CONTINUATION:K -┃ │ pc: 352 -┃ │ callDepth: 0 -┃ │ statusCode: EVMC_SUCCESS -┃ │ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 -┃ │ -┃ │ (2 steps) -┃ ├─ 12 -┃ │ k: #halt ~> CONTINUATION:K -┃ │ pc: 352 -┃ │ callDepth: 0 -┃ │ statusCode: EVMC_SUCCESS -┃ │ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 -┃ │ -┃ ┊ constraint: true -┃ ┊ subst: OMITTED SUBST -┃ └─ 2 (leaf) -┃ k: #halt ~> CONTINUATION -┃ pc: PC_CELL_5d410f2a -┃ callDepth: CALLDEPTH_CELL_5d410f2a -┃ statusCode: STATUSCODE_FINAL -┃ -┗━━┓ constraint: { true #Equals ( notBool VV0_n_114b9705:Int ==Int 0 ) } - │ - ├─ 7 - │ k: JUMPI 1569 bool2Word ( VV0_n_114b9705:Int ==Int 0 ) ~> #pc [ JUMPI ] ~> #execute ... - │ pc: 1539 - │ callDepth: 0 - │ statusCode: STATUSCODE:StatusCode - │ src: tests/foundry/test/Loops.t.sol:164:178 - │ - │ (162 steps) - ├─ 9 - │ k: #end EVMC_SUCCESS ~> #pc [ RETURN ] ~> #execute ~> CONTINUATION:K - │ pc: 352 - │ callDepth: 0 - │ statusCode: STATUSCODE:StatusCode - │ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 - │ - │ (1 step) - ├─ 11 - │ k: #halt ~> #pc [ RETURN ] ~> #execute ~> CONTINUATION:K - │ pc: 352 - │ callDepth: 0 - │ statusCode: EVMC_SUCCESS - │ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 - │ - │ (2 steps) - ├─ 13 - │ k: #halt ~> CONTINUATION:K - │ pc: 352 - │ callDepth: 0 - │ statusCode: EVMC_SUCCESS - │ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 - │ - ┊ constraint: true - ┊ subst: OMITTED SUBST - └─ 2 (leaf) - k: #halt ~> CONTINUATION - pc: PC_CELL_5d410f2a - callDepth: CALLDEPTH_CELL_5d410f2a - statusCode: STATUSCODE_FINAL - - - - -module SUMMARY-LOOPSTEST.SUM-N:031A8A7FD8A89EA433A5C7307FD8E6EE86FED775C4188C1078F3DE94C1EE710D - - - - - ( #execute - ~> CONTINUATION => CALL 9223372036854772793 645326474426547203313410069153905908525362434349 0 128 36 128 0 - ~> #pc [ CALL ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( LoopsTest . sum_N ( VV0_n_114b9705 : uint256 ) => b"~\x8e#\xd0" +Bytes #buf ( 32 , VV0_n_114b9705:Int ) ) - - - 0 - - - ( .WordStack => ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( 0 : ( VV0_n_114b9705:Int : ( 334 : ( selector ( "sum_N(uint256)" ) : .WordStack ) ) ) ) ) ) ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) ) - - ... - ... - - ( 0 => 6 ) - - - ( _CALLGAS_CELL => 9079256848778916870 ) - - - false - - - 0 - - - - - .List - - - ( .Set => SetItem ( 645326474426547203313410069153905908525362434349 ) ) - - - .Map - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int VV0_n_114b9705:Int - andBool ( VV0_n_114b9705:Int - - ( CALL 9223372036854772793 645326474426547203313410069153905908525362434349 0 128 36 128 0 => #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) false - ~> #return 128 0 ) - ~> #pc [ CALL ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"~\x8e#\xd0" +Bytes #buf ( 32 , VV0_n_114b9705:Int ) - - - 0 - - - ( 164 : ( selector ( "assume(bool)" ) : ( 645326474426547203313410069153905908525362434349 : ( 0 : ( VV0_n_114b9705:Int : ( 334 : ( selector ( "sum_N(uint256)" ) : .WordStack ) ) ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_n_114b9705:Int - andBool ( CALLER_ID:Int - - ( #checkCall 728815563385977040452943777879061427756277306518 0 - ~> #call 728815563385977040452943777879061427756277306518 645326474426547203313410069153905908525362434349 645326474426547203313410069153905908525362434349 0 0 b"Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) false - ~> #return 128 0 - ~> #pc [ CALL ] => JUMPI 1569 bool2Word ( VV0_n_114b9705:Int ==Int 0 ) - ~> #pc [ JUMPI ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"~\x8e#\xd0" +Bytes #buf ( 32 , VV0_n_114b9705:Int ) - - - 0 - - - ( ( 164 => 0 ) : ( ( selector ( "assume(bool)" ) => 0 ) : ( ( 645326474426547203313410069153905908525362434349 => VV0_n_114b9705:Int ) : ( ( 0 => 334 ) : ( ( VV0_n_114b9705:Int => selector ( "sum_N(uint256)" ) ) : ( ( 334 : ( selector ( "sum_N(uint256)" ) : .WordStack ) ) => .WordStack ) ) ) ) ) ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_n_114b9705:Int - andBool ( CALLER_ID:Int - - ( JUMPI 1569 bool2Word ( VV0_n_114b9705:Int ==Int 0 ) - ~> #pc [ JUMPI ] => #end EVMC_SUCCESS - ~> #pc [ RETURN ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( b"" => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - ( b"~\x8e#\xd0" +Bytes #buf ( 32 , VV0_n_114b9705:Int ) => b"~\x8e#\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) - - - 0 - - - ( ( 0 => selector ( "sum_N(uint256)" ) ) : ( ( 0 : ( VV0_n_114b9705:Int : ( 334 : ( selector ( "sum_N(uint256)" ) : .WordStack ) ) ) ) => .WordStack ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" +Bytes #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ) - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_n_114b9705:Int - andBool ( VV0_n_114b9705:Int ==Int 0 - andBool ( CALLER_ID:Int - - ( JUMPI 1569 bool2Word ( VV0_n_114b9705:Int ==Int 0 ) - ~> #pc [ JUMPI ] => #end EVMC_SUCCESS - ~> #pc [ RETURN ] ) - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - ( b"" => #buf ( 32 , ( ( VV0_n_114b9705:Int *Int ( VV0_n_114b9705:Int +Int 1 ) ) /Int 2 ) ) ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"~\x8e#\xd0" +Bytes #buf ( 32 , VV0_n_114b9705:Int ) - - - 0 - - - ( ( 0 => selector ( "sum_N(uint256)" ) ) : ( ( 0 : ( VV0_n_114b9705:Int : ( 334 : ( selector ( "sum_N(uint256)" ) : .WordStack ) ) ) ) => .WordStack ) ) - - - ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lc\xe5b" => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) +Bytes ( #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) => #buf ( 32 , ( ( VV0_n_114b9705:Int *Int ( VV0_n_114b9705:Int +Int 1 ) ) /Int 2 ) ) +Bytes #range ( #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) , 28 , 4 ) ) - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 <=Int VV0_n_114b9705:Int - andBool ( CALLER_ID:Int - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ RETURN ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"~\x8e#\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - 0 - - - ( selector ( "sum_N(uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( _VV0_n_114b9705 ==K 0 - andBool ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ RETURN ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - #buf ( 32 , ( ( VV0_n_114b9705:Int *Int ( VV0_n_114b9705:Int +Int 1 ) ) /Int 2 ) ) - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"~\x8e#\xd0" +Bytes #buf ( 32 , VV0_n_114b9705:Int ) - - - 0 - - - ( selector ( "sum_N(uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +Bytes #buf ( 32 , ( ( VV0_n_114b9705:Int *Int ( VV0_n_114b9705:Int +Int 1 ) ) /Int 2 ) ) +Bytes #range ( #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) , 28 , 4 ) - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( VV0_n_114b9705:Int =/=K 0 - andBool ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 - - #halt - ~> ( #pc [ RETURN ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"~\x8e#\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - - - 0 - - - ( selector ( "sum_N(uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( _VV0_n_114b9705 ==K 0 - andBool ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - #halt - ~> ( #pc [ RETURN ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - #buf ( 32 , ( ( VV0_n_114b9705:Int *Int ( VV0_n_114b9705:Int +Int 1 ) ) /Int 2 ) ) - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"~\x8e#\xd0" +Bytes #buf ( 32 , VV0_n_114b9705:Int ) - - - 0 - - - ( selector ( "sum_N(uint256)" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +Bytes #buf ( 32 , ( ( VV0_n_114b9705:Int *Int ( VV0_n_114b9705:Int +Int 1 ) ) /Int 2 ) ) +Bytes #range ( #buf ( 32 , bool2Word ( VV0_n_114b9705:Int <=Int 51816696836262767 ) ) , 28 , 4 ) - - ... - ... - - 6 - - - 9079256848778916870 - - - false - - - 0 - - - - - .List - - - SetItem ( 645326474426547203313410069153905908525362434349 ) - - - .Map - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - .Map - - - .Map - - - 1 - - ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( VV0_n_114b9705:Int =/=K 0 - andBool ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( 0 CONTINUATION -│ pc: 0 -│ callDepth: 0 -│ statusCode: STATUSCODE -│ src: tests/foundry/test/SetUpDeploy.t.sol:18:35 -│ -│ (435 steps) -├─ 3 -│ k: #end EVMC_SUCCESS ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 112 -│ callDepth: 0 -│ statusCode: STATUSCODE:StatusCode -│ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 -│ -│ (1 step) -├─ 4 -│ k: #halt ~> #pc [ STOP ] ~> #execute ~> CONTINUATION:K -│ pc: 112 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 -│ -│ (2 steps) -├─ 5 -│ k: #halt ~> CONTINUATION:K -│ pc: 112 -│ callDepth: 0 -│ statusCode: EVMC_SUCCESS -│ src: tests/foundry/lib/forge-std/src/Script.sol:8:9 -│ -┊ constraint: true -┊ subst: OMITTED SUBST -└─ 2 (leaf) - k: #halt ~> CONTINUATION - pc: PC_CELL_5d410f2a - callDepth: CALLDEPTH_CELL_5d410f2a - statusCode: STATUSCODE_FINAL - - - - -module SUMMARY-SETUPDEPLOYTEST.TEST-EXTCODESIZE:54FC4ADD5DF72818F51CF0E55EF001823EBA0E0715C8B0B71E8EAF089508F226 - - - - - ( #execute - ~> CONTINUATION => #end EVMC_SUCCESS - ~> #pc [ STOP ] - ~> #execute - ~> CONTINUATION:K ) - - - NORMAL - - - LONDON - - - - - ( _OUTPUT_CELL => b"" ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID - - - ( SetUpDeployTest . test_extcodesize ( ) => b"b\xc9\xea\xc5" ) - - - 0 - - - ( .WordStack => ( selector ( "test_extcodesize()" ) : .WordStack ) ) - - - ( .Bytes => b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" ) - - ... - ... - - ( 0 => 3 ) - - - false - - - 0 - - ... - - - - .List - - - ( .Set => SetItem ( 491460923342184218035706888008750043977755113263 ) ) - - - ( .Map => ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 8 ) ) ) - - ... - - - ORIGIN_ID - - - - NUMBER_CELL - - ... - - ... - - - - ( - - 491460923342184218035706888008750043977755113263 - - - 0 - - ... - - ( 0 |-> 0 ) - - - .Map - - - 1 - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( 8 |-> 491460923342184218035706888008750043977755113263 ) - - - .Map - - - 2 - - ) ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - ( .Bytes => b"" ) - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID - andBool ( CALLER_ID - - ( #end EVMC_SUCCESS => #halt ) - ~> #pc [ STOP ] - ~> #execute - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - ( _STATUSCODE => EVMC_SUCCESS ) - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"b\xc9\xea\xc5" - - - 0 - - - ( selector ( "test_extcodesize()" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - SetItem ( 491460923342184218035706888008750043977755113263 ) - - - ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 8 ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 491460923342184218035706888008750043977755113263 - - - 0 - - ... - - ( 0 |-> 0 ) - - - .Map - - - 1 - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( 8 |-> 491460923342184218035706888008750043977755113263 ) - - - .Map - - - 2 - - ) ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int - - #halt - ~> ( #pc [ STOP ] - ~> #execute => .K ) - ~> _CONTINUATION - - - NORMAL - - - LONDON - - - - - b"" - - - EVMC_SUCCESS - - - .List - - - .List - - - ... - ... - - 728815563385977040452943777879061427756277306518 - - - CALLER_ID:Int - - - b"b\xc9\xea\xc5" - - - 0 - - - ( selector ( "test_extcodesize()" ) : .WordStack ) - - - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - - ... - ... - - 3 - - - false - - - 0 - - ... - - - - .List - - - SetItem ( 491460923342184218035706888008750043977755113263 ) - - - ( 728815563385977040452943777879061427756277306518 |-> SetItem ( 8 ) ) - - ... - - - ORIGIN_ID:Int - - - - NUMBER_CELL:Int - - ... - - ... - - - - ( - - 491460923342184218035706888008750043977755113263 - - - 0 - - ... - - ( 0 |-> 0 ) - - - .Map - - - 1 - - - ( - - 645326474426547203313410069153905908525362434349 - - - 0 - - ... - - .Map - - - .Map - - - 0 - - - - - 728815563385977040452943777879061427756277306518 - - - 0 - - ... - - ( 8 |-> 491460923342184218035706888008750043977755113263 ) - - - .Map - - - 2 - - ) ) - - ... - - - ... - - - - - .Account - - - .Account - - - .Account - - - .Account - - - false - - - false - - ... - - - - false - - ... - - - - false - - - .Account - - - 0 - - - b"" - - - .OpcodeType - - - - - false - - - false - - ... - - - - false - - - false - - - .Set - - - .Set - - - - - requires ( 0 <=Int CALLER_ID:Int - andBool ( 0 <=Int ORIGIN_ID:Int - andBool ( 0 <=Int NUMBER_CELL:Int - andBool ( CALLER_ID:Int maxUInt256 -Int N - requires #rangeUInt(256, N) - [simplification] - - rule [foundry-sum-to-n-loop-invariant]: - - - ((JUMPI 1569 CONDITION) => JUMP 1569) - ~> #pc [ JUMPI ] - ~> #execute - ... - - - NORMAL - - - LONDON - - - - - - PROGRAM - - - JUMPDESTS - - - (S => (S +Int ((N *Int (N +Int 1)) /Int 2))) - : 0 - : (N => 0) - : 334 - : 2123244496 - : .WordStack - - - 1539 - - - GAS_AMT:Int => GAS_AMT -Int (N *Int 178) - - ... - - ... - - ... - - ... - - - requires 0 =Int N *Int 178 - andBool CONDITION ==K bool2Word ( N:Int ==Int 0 ) - andBool PROGRAM ==K #binRuntime(S2KLoopsTest) - andBool JUMPDESTS ==K #computeValidJumpDests(#binRuntime(S2KLoopsTest)) - [priority(40)] - -endmodule diff --git a/tests/foundry/src/Constants.sol b/tests/foundry/src/Constants.sol deleted file mode 100644 index ad5f098557..0000000000 --- a/tests/foundry/src/Constants.sol +++ /dev/null @@ -1,5 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -bytes4 constant zero = 0x00000000; -bytes4 constant ff = 0xffffffff; diff --git a/tests/foundry/src/Contract.sol b/tests/foundry/src/Contract.sol deleted file mode 100644 index 96771514fe..0000000000 --- a/tests/foundry/src/Contract.sol +++ /dev/null @@ -1,4 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -contract Contract {} diff --git a/tests/foundry/src/EmitContract.sol b/tests/foundry/src/EmitContract.sol deleted file mode 100644 index eb66fe934d..0000000000 --- a/tests/foundry/src/EmitContract.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -contract ExpectEmit { - event Transfer(address indexed from, address indexed to, uint256 amount); - - function t() public { - emit Transfer(msg.sender, address(1337), 1337); - } -} diff --git a/tests/foundry/src/KEVMCheats.sol b/tests/foundry/src/KEVMCheats.sol deleted file mode 100644 index 14e3aef982..0000000000 --- a/tests/foundry/src/KEVMCheats.sol +++ /dev/null @@ -1,314 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; -pragma experimental ABIEncoderV2; - -interface KEVMCheatsBase { - // Expects a call using the CALL opcode to an address with the specified calldata. - function expectRegularCall(address,bytes calldata) external; - // Expects a call using the CALL opcode to an address with the specified msg.value and calldata. - function expectRegularCall(address,uint256,bytes calldata) external; - // Expects a static call to an address with the specified calldata. - function expectStaticCall(address,bytes calldata) external; - // Expects a delegate call to an address with the specified calldata. - function expectDelegateCall(address,bytes calldata) external; - // Expects that no contract calls are made after invoking the cheatcode. - function expectNoCall() external; - // Expects the given address to deploy a new contract, using the CREATE opcode, with the specified value and bytecode. - function expectCreate(address,uint256,bytes calldata) external; - // Expects the given address to deploy a new contract, using the CREATE2 opcode, with the specified value and bytecode (appended with a bytes32 salt). - function expectCreate2(address,uint256,bytes calldata) external; - // Makes the storage of the given address completely symbolic. - function symbolicStorage(address) external; - // Adds an address to the whitelist. - function allowCallsToAddress(address) external; - // Adds an address and a storage slot to the whitelist. - function allowChangesToStorage(address,uint256) external; - // Set the current cell - function infiniteGas() external; - // Returns a symbolic unsigned integer - function freshUInt(uint8) external returns (uint256); - // Returns a symbolic boolean value - function freshBool() external returns (uint256); -} - -abstract contract SymbolicWords { - address internal constant KEVM_CHEATS = address(uint160(uint256(keccak256("hevm cheat code")))); - - KEVMCheatsBase internal constant kevm = KEVMCheatsBase(KEVM_CHEATS); - - function freshUInt256() external returns (uint256) { - return kevm.freshUInt(32); - } - - function freshUInt248() external returns (uint248) { - return uint248(kevm.freshUInt(31)); - } - - function freshUInt240() external returns (uint240) { - return uint240(kevm.freshUInt(30)); - } - - function freshUInt232() external returns (uint232) { - return uint232(kevm.freshUInt(29)); - } - - function freshUInt224() external returns (uint224) { - return uint224(kevm.freshUInt(28)); - } - - function freshUInt216() external returns (uint216) { - return uint216(kevm.freshUInt(27)); - } - - function freshUInt208() external returns (uint208) { - return uint208(kevm.freshUInt(26)); - } - - function freshUInt200() external returns (uint200) { - return uint200(kevm.freshUInt(25)); - } - - function freshUInt192() external returns (uint192) { - return uint192(kevm.freshUInt(24)); - } - - function freshUInt184() external returns (uint184) { - return uint184(kevm.freshUInt(23)); - } - - function freshUInt176() external returns (uint176) { - return uint176(kevm.freshUInt(22)); - } - - function freshUInt168() external returns (uint168) { - return uint168(kevm.freshUInt(21)); - } - - function freshUInt160() external returns (uint160) { - return uint160(kevm.freshUInt(20)); - } - - function freshUInt152() external returns (uint152) { - return uint152(kevm.freshUInt(19)); - } - - function freshUInt144() external returns (uint144) { - return uint144(kevm.freshUInt(18)); - } - - function freshUInt136() external returns (uint136) { - return uint136(kevm.freshUInt(17)); - } - - function freshUInt128() external returns (uint128) { - return uint128(kevm.freshUInt(16)); - } - - function freshUInt120() external returns (uint120) { - return uint120(kevm.freshUInt(15)); - } - - function freshUInt112() external returns (uint112) { - return uint112(kevm.freshUInt(14)); - } - - function freshUInt104() external returns (uint104) { - return uint104(kevm.freshUInt(13)); - } - - function freshUInt96() external returns (uint96) { - return uint96(kevm.freshUInt(12)); - } - - function freshUInt88() external returns (uint88) { - return uint88(kevm.freshUInt(11)); - } - - function freshUInt80() external returns (uint80) { - return uint80(kevm.freshUInt(10)); - } - - function freshUInt72() external returns (uint72) { - return uint72(kevm.freshUInt(9)); - } - - function freshUInt64() external returns (uint64) { - return uint64(kevm.freshUInt(8)); - } - - function freshUInt56() external returns (uint56) { - return uint56(kevm.freshUInt(7)); - } - - function freshUInt48() external returns (uint48) { - return uint48(kevm.freshUInt(6)); - } - - function freshUInt40() external returns (uint40) { - return uint40(kevm.freshUInt(5)); - } - - function freshUInt32() external returns (uint32) { - return uint32(kevm.freshUInt(4)); - } - - function freshUInt24() external returns (uint24) { - return uint24(kevm.freshUInt(3)); - } - - function freshUInt16() external returns (uint16) { - return uint16(kevm.freshUInt(2)); - } - - function freshUInt8() external returns (uint8) { - return uint8(kevm.freshUInt(1)); - } - - function freshAddress() external returns (address) { - return address(uint160(kevm.freshUInt(20))); - } - - function freshSInt256() external returns (int256) { - return int256(kevm.freshUInt(32)); - } - - function freshSInt248() external returns (int248) { - return int248(uint248(kevm.freshUInt(31))); - } - - function freshSInt240() external returns (int240) { - return int240(uint240(kevm.freshUInt(30))); - } - - function freshSInt232() external returns (int232) { - return int232(uint232(kevm.freshUInt(29))); - } - - function freshSInt224() external returns (int224) { - return int224(uint224(kevm.freshUInt(28))); - } - - function freshSInt216() external returns (int216) { - return int216(uint216(kevm.freshUInt(27))); - } - - function freshSInt208() external returns (int208) { - return int208(uint208(kevm.freshUInt(26))); - } - - function freshSInt200() external returns (int200) { - return int200(uint200(kevm.freshUInt(25))); - } - - function freshSInt192() external returns (int192) { - return int192(uint192(kevm.freshUInt(24))); - } - - function freshSInt184() external returns (int184) { - return int184(uint184(kevm.freshUInt(23))); - } - - function freshSInt176() external returns (int176) { - return int176(uint176(kevm.freshUInt(22))); - } - - function freshSInt168() external returns (int168) { - return int168(uint168(kevm.freshUInt(21))); - } - - function freshSInt160() external returns (int160) { - return int160(uint160(kevm.freshUInt(20))); - } - - function freshSInt152() external returns (int152) { - return int152(uint152(kevm.freshUInt(19))); - } - - function freshSInt144() external returns (int144) { - return int144(uint144(kevm.freshUInt(18))); - } - - function freshSInt136() external returns (int136) { - return int136(uint136(kevm.freshUInt(17))); - } - - function freshSInt128() external returns (int128) { - return int128(uint128(kevm.freshUInt(16))); - } - - function freshSInt120() external returns (int120) { - return int120(uint120(kevm.freshUInt(15))); - } - - function freshSInt112() external returns (int112) { - return int112(uint112(kevm.freshUInt(14))); - } - - function freshSInt104() external returns (int104) { - return int104(uint104(kevm.freshUInt(13))); - } - - function freshSInt96() external returns (int96) { - return int96(uint96(kevm.freshUInt(12))); - } - - function freshSInt88() external returns (int88) { - return int88(uint88(kevm.freshUInt(11))); - } - - function freshSInt80() external returns (int80) { - return int80(uint80(kevm.freshUInt(10))); - } - - function freshSInt72() external returns (int72) { - return int72(uint72(kevm.freshUInt(9))); - } - - function freshSInt64() external returns (int64) { - return int64(uint64(kevm.freshUInt(8))); - } - - function freshSInt56() external returns (int56) { - return int56(uint56(kevm.freshUInt(7))); - } - - function freshSInt48() external returns (int48) { - return int48(uint48(kevm.freshUInt(6))); - } - - function freshSInt40() external returns (int40) { - return int40(uint40(kevm.freshUInt(5))); - } - - function freshSInt32() external returns (int32) { - return int32(uint32(kevm.freshUInt(4))); - } - - function freshSInt24() external returns (int24) { - return int24(uint24(kevm.freshUInt(3))); - } - - function freshSInt16() external returns (int16) { - return int16(uint16(kevm.freshUInt(2))); - } - - function freshSInt8() external returns (int8) { - return int8(uint8((kevm.freshUInt(1)))); - } -} - -abstract contract KEVMUtils { - // @notice Checks if an address matches one of the built-in addresses. - function notBuiltinAddress(address addr) internal pure returns (bool) { - return (addr != address(645326474426547203313410069153905908525362434349) && - addr != address(728815563385977040452943777879061427756277306518)); - } -} - -abstract contract KEVMBase { - address internal constant KEVM_CHEATS = address(uint160(uint256(keccak256("hevm cheat code")))); - - KEVMCheatsBase internal constant kevm = KEVMCheatsBase(KEVM_CHEATS); -} - -abstract contract KEVMCheats is KEVMBase, KEVMUtils {} diff --git a/tests/foundry/src/MyIERC20.sol b/tests/foundry/src/MyIERC20.sol deleted file mode 100644 index 7761234855..0000000000 --- a/tests/foundry/src/MyIERC20.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity =0.8.13; - -interface MyIERC20 { - function totalSupply() external view returns (uint256); - - function transfer(address recipient, uint256 amount) external returns (bool); - - function decimals() external view returns (uint8); - - function symbol() external view returns (string memory); - - function balanceOf(address) external view returns (uint256); - - function transferFrom( - address sender, - address recipient, - uint256 amount - ) external returns (bool); - - function approve(address spender, uint256 value) external returns (bool); -} \ No newline at end of file diff --git a/tests/foundry/src/MyToken.sol b/tests/foundry/src/MyToken.sol deleted file mode 100644 index df5307b8e1..0000000000 --- a/tests/foundry/src/MyToken.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -contract MyToken{ - address public token; - mapping (address => uint256) public balances; - - constructor(address sometoken) { - token = sometoken; - } - - function balanceOf(address user) external view returns (uint256) { - return balances[user]; - } - - receive() external payable {} - - function pay(address user) external payable returns (uint256) { - balances[user]+=msg.value; - return balances[user]; - } -} diff --git a/tests/foundry/src/OwnerOnlyUp.sol b/tests/foundry/src/OwnerOnlyUp.sol deleted file mode 100644 index 6d71a3920c..0000000000 --- a/tests/foundry/src/OwnerOnlyUp.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -error Unauthorized(); - -contract OwnerUpOnly { - address public immutable owner; - uint256 public count; - - constructor() { - owner = msg.sender; - } - - function increment() external { - if (msg.sender != owner) { - revert Unauthorized(); - } - count++; - } -} \ No newline at end of file diff --git a/tests/foundry/src/Prank.sol b/tests/foundry/src/Prank.sol deleted file mode 100644 index e0fb903dec..0000000000 --- a/tests/foundry/src/Prank.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -error Unauthorized(); - -contract Prank { - address public immutable owner; - uint256 public count; - - constructor() { - owner = msg.sender; - } - - function add(uint256 value) external { - require(msg.sender == owner, "Only owner"); - count += value; - } - - function subtract(uint256 value) external { - require(tx.origin == address(0)); - require(count >= value); - count -= value; - } -} \ No newline at end of file diff --git a/tests/foundry/src/Safe.sol b/tests/foundry/src/Safe.sol deleted file mode 100644 index 3b3d390b22..0000000000 --- a/tests/foundry/src/Safe.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -contract Safe { - receive() external payable {} - - function withdraw() external { - payable(msg.sender).transfer(address(this).balance); - } -} \ No newline at end of file diff --git a/tests/foundry/src/TestNumber.sol b/tests/foundry/src/TestNumber.sol deleted file mode 100644 index b7ce5adcea..0000000000 --- a/tests/foundry/src/TestNumber.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "ds-test/test.sol"; - -contract TestNumber is DSTest{ - uint256 public testNumber ; - - constructor(uint256 initial){ - testNumber = initial; - } - - function t(uint256 a) public returns (uint256) { - uint256 b = 0; - testNumber = a; - emit log_string("here"); - return b; - } - -} \ No newline at end of file diff --git a/tests/foundry/src/Token.sol b/tests/foundry/src/Token.sol deleted file mode 100644 index 9c267d2d74..0000000000 --- a/tests/foundry/src/Token.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -contract Token { - uint256 x; - mapping(address => uint256) balances; - mapping(address => mapping(address => uint256)) allowances; - string name; - uint64 y; - uint96 z; - uint32 a; - - struct Foo { - uint256 bar; - address baz; - uint48 boo; - uint48 frob; - uint48[] bills; - } - - mapping(address => Foo) foos; - - function _move(address src, address dst, uint256 amount) internal { - balances[src] = balances[src] - amount; - balances[dst] = balances[dst] + amount; - } - - function transfer(address dst, uint256 amount) external { - _move(msg.sender, dst, amount); - } -} diff --git a/tests/foundry/test/AccountParamsTest.t.sol b/tests/foundry/test/AccountParamsTest.t.sol deleted file mode 100644 index 1f1a399312..0000000000 --- a/tests/foundry/test/AccountParamsTest.t.sol +++ /dev/null @@ -1,76 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract AccountParamsTest is Test { - - function testDealConcrete() public { - vm.deal(address(505), 256); - assertEq(address(505).balance, 256); - } - - function testDealSymbolic(uint256 value) public { - vm.deal(address(328), value); - assertEq(address(328).balance, value); - } - - function testEtchConcrete() public { - bytes memory code = bytes("this should be EVM bytecode"); - vm.etch(address(124), code); - assertEq(address(124).code, code); - } - - function testEtchSymbolic(bytes calldata code) public { - vm.etch(address(124), code); - assertEq(address(124).code, code); - } - - function testNonceSymbolic(uint64 newNonce) public { - uint64 oldNonce = vm.getNonce(address(this)); - vm.assume(newNonce > oldNonce); - vm.setNonce(address(this), newNonce); - assert(vm.getNonce(address(this)) == newNonce); - } - - function test_GetNonce_true() public { - uint64 nonce = vm.getNonce(address(this)); - assert(nonce == 1); - } - - function test_getNonce_unknownSymbolic(address addr) public { - vm.assume(addr != address(vm)); - vm.assume(addr != address(this)); - vm.assume(addr != address(0x3fAB184622Dc19b6109349B94811493BF2a45362)); - vm.assume(addr != address(0x4e59b44847b379578588920cA78FbF26c0B4956C)); - uint64 nonce = vm.getNonce(addr); - assert(nonce == 0); - } - - function test_GetNonce_false() public { - uint64 nonce = vm.getNonce(address(100)); - assertEq(nonce, 10); - } - - function testFail_GetNonce_true() public { - uint64 nonce = vm.getNonce(address(0)); - assertEq(nonce, 10); - } - - function testFail_GetNonce_false() public { - uint64 nonce = vm.getNonce(address(this)); - assertEq(nonce, 1); - } - - function test_Nonce_ExistentAddress() public { - vm.setNonce(address(this), 100); - uint64 nonce = vm.getNonce(address(this)); - assert(nonce == 100); - } - - function test_Nonce_NonExistentAddress() public { - vm.setNonce(address(100), 100); - uint64 nonce = vm.getNonce(address(100)); - assert(nonce == 100); - } -} diff --git a/tests/foundry/test/AddrTest.t.sol b/tests/foundry/test/AddrTest.t.sol deleted file mode 100644 index 3e0a470c06..0000000000 --- a/tests/foundry/test/AddrTest.t.sol +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract AddrTest is Test, KEVMCheats { - - function test_addr_true() public { - address alice = vm.addr(1); - assertEq(alice, 0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf); - } - - function test_addr_false() public { - address alice = vm.addr(0); - } - - function testFail_addr_true() public { - address alice = vm.addr(115792089237316195423570985008687907852837564279074904382605163141518161494337); - } - - function testFail_addr_false() public { - address alice = vm.addr(1); - assertEq(alice, 0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf); - } - - function test_addr_symbolic(uint256 pk) public { - vm.assume(pk != 0); - vm.assume(pk < 115792089237316195423570985008687907852837564279074904382605163141518161494337); - address alice = vm.addr(pk); - assert(true); - } - - function test_notBuiltinAddress_concrete() public { - assertTrue(notBuiltinAddress(address(110))); - } - - function test_notBuiltinAddress_symbolic(address addr) public { - vm.assume(addr != address(728815563385977040452943777879061427756277306518)); - vm.assume(addr != address(645326474426547203313410069153905908525362434349)); - assertTrue(notBuiltinAddress(addr)); - } - - function test_builtInAddresses() public { - assertEq(address(this), address(728815563385977040452943777879061427756277306518)); - assertEq(address(vm), address(645326474426547203313410069153905908525362434349)); - } -} diff --git a/tests/foundry/test/AllowChangesTest.t.sol b/tests/foundry/test/AllowChangesTest.t.sol deleted file mode 100644 index aa382a1cfa..0000000000 --- a/tests/foundry/test/AllowChangesTest.t.sol +++ /dev/null @@ -1,64 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract ValueStore { - uint256 public value1; - uint256 public value2; - - function changeValue1(uint256 newValue) public { - value1 = newValue; - } - - function changeValue2(uint256 newValue) public { - value2 = newValue; - } -} - -contract AllowChangesTest is Test, KEVMCheats { - function test() public { - assertTrue(true); - } - - function testAllow() public { - ValueStore canChange = new ValueStore(); - ValueStore cannotChange = new ValueStore(); - - kevm.allowCallsToAddress(address(canChange)); - kevm.allowChangesToStorage(address(canChange), 0); - - canChange.changeValue1(85); - } - - function testFailAllowCallsToAddress() public { - ValueStore canChange = new ValueStore(); - ValueStore cannotChange = new ValueStore(); - - kevm.allowCallsToAddress(address(canChange)); - kevm.allowChangesToStorage(address(canChange), 0); - - cannotChange.changeValue1(10245); - } - - function testFailAllowChangesToStorage() public { - ValueStore canChange = new ValueStore(); - ValueStore cannotChange = new ValueStore(); - - kevm.allowCallsToAddress(address(canChange)); - kevm.allowChangesToStorage(address(canChange), 0); - - canChange.changeValue2(23452); - } - - function testAllow_fail() public { - ValueStore canChange = new ValueStore(); - ValueStore cannotChange = new ValueStore(); - - kevm.allowCallsToAddress(address(canChange)); - kevm.allowChangesToStorage(address(canChange), 0); - - canChange.changeValue2(234521); - } -} diff --git a/tests/foundry/test/Ambiguous.t.sol b/tests/foundry/test/Ambiguous.t.sol deleted file mode 100644 index 9a52016229..0000000000 --- a/tests/foundry/test/Ambiguous.t.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -contract AmbiguousTest { - function test_assert_true() public pure { - assert(true); - } - - function test_assert_true(uint256) public pure { - assert(true); - } - - function test_assert_true(uint8) public pure { - assert(true); - } - - function test_array_type(uint256) public { - assert(true); - } - - function test_array_type(uint256[] calldata numbers) public { - assert(true); - } -} diff --git a/tests/foundry/test/Arithmetic.t.sol b/tests/foundry/test/Arithmetic.t.sol deleted file mode 100644 index 9ebbe51749..0000000000 --- a/tests/foundry/test/Arithmetic.t.sol +++ /dev/null @@ -1,146 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract ArithmeticTest is Test { - function max(uint x, uint y) internal pure returns (uint z) { - if (x < y) { - return y; - } - return x; - } - - function test_max1(uint a, uint b) external { - vm.assume(a <= b); - uint c = max(a, b); - assertEq(c, b); - } - - function test_max1_broken(uint a, uint b) external { - vm.assume(a <= b); - uint c = max(a, b); - assertEq(c + 1, a); - } - - function max2(uint256 x, uint256 y) internal pure returns (uint256) { - if (x < y && x != 2**100 - 1337) { - return y; - } - return x; - } - - function test_max2(uint256 x, uint256 y) public { - uint256 m = max(x, y); - assertTrue(m >= x && m >= y); - } - - uint constant MAX_INT = (2 ** 256) - 1; - uint constant WAD = 10 ** 18; - uint constant RAY = 10 ** 27; - - function wmul1(uint x, uint y) internal pure returns (uint z) { - z = ((x * y) + (WAD / 2)) / WAD; - } - - function wmul2(uint x, uint y) internal pure returns (uint z) { - z = (x * y) / WAD; - } - - function wdiv1(uint x, uint y) internal pure returns (uint z) { - z = ((x * WAD) + (y / 2)) / y; - } - - function wdiv2(uint x, uint y) internal pure returns (uint z) { - z = (x * WAD) / y; - } - - function test_wmul_rounding(uint a, uint b) external { - uint c1 = wmul1(a, b); - uint c2 = wmul2(a ,b); - assertTrue(c2 <= c1); - } - - function test_wmul_increasing_overflow(uint a, uint b) public { - uint c = wmul2(a, b); - assertTrue(a < c && b < c); - } - // { true #Equals ( ( 115792089237316195423570985008687907853269984665640564039457584007913129639935 /Int VV0_a_3c5818c8 ) ) true requires Y <=Int maxUInt256 /Int X [simplification] - - function test_wmul_wdiv_inverse_underflow(uint a, uint b) public { - if (0 < a && 0 < b) { - if (b <= MAX_INT / a) { - uint c = wdiv2(wmul2(a, b), b); - assertEq(a, c); - } - } - } - // { true #Equals maxUInt256 /Word ( ( ( ( VV0_a_3c5818c8 *Int VV1_b_3c5818c8 ) ) /Int 1000000000000000000 ) ) 0) { - n = n - 1; - } - assert(n == 0); - } - - function test_countdown_symbolic(uint n) public returns (uint) { - vm.assume(n <= 3); - while (n > 0) { - n = n - 1; - } - assert(n == 0); - } - - function test_bmc(uint256 n) public { - uint256 x = 0; - for (uint256 i = 0; i < n; ++i) { - x += 1; - } - assertEq(x, n); - } -} diff --git a/tests/foundry/test/BlockParamsTest.t.sol b/tests/foundry/test/BlockParamsTest.t.sol deleted file mode 100644 index 423cca9e31..0000000000 --- a/tests/foundry/test/BlockParamsTest.t.sol +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract BlockParamsTest is Test { - - function testWarp(uint256 time) public { - vm.warp(time); - assertEq(block.timestamp, time); - } - - function testRoll(uint256 newHeight) public { - vm.roll(newHeight); - assertEq(block.number, newHeight); - } - - function testFee(uint256 newFee) public { - vm.fee(newFee); - assertEq(block.basefee, newFee); - } - - function testChainId(uint256 newChainId) public { - vm.chainId(newChainId); - assertEq(block.chainid, newChainId); - } - - function testCoinBase() public { - address coinBase = 0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8; - vm.coinbase(coinBase); - assertEq(block.coinbase, coinBase); - } - - function testBlockNumber() public { - uint256 x = block.number; - assert(x >= 0); - } -} diff --git a/tests/foundry/test/BroadcastTest.t.sol b/tests/foundry/test/BroadcastTest.t.sol deleted file mode 100644 index b9e254d1d6..0000000000 --- a/tests/foundry/test/BroadcastTest.t.sol +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "src/TestNumber.sol"; -import "forge-std/Test.sol"; - -contract BroadcastTest is Test { - address ACCOUNT_A; - address ACCOUNT_B; - - function setUp() public { - ACCOUNT_A = 0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8; - ACCOUNT_B = 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D; - } - - function testDeploy() public { - vm.broadcast(ACCOUNT_A); - TestNumber test = new TestNumber(10); - // this won't generate tx to sign - uint256 b = test.t(4); - assertEq(b,0); - // this will - vm.broadcast(ACCOUNT_B); - test.t(5); - } - - function deployOther() public { - vm.startBroadcast(ACCOUNT_A); - TestNumber test = new TestNumber(10); - - // will trigger a transaction - test.t(1); - - vm.stopBroadcast(); - } - - function deployNoArgs() public { - // broadcast the next call - vm.broadcast(); - TestNumber test1 = new TestNumber(5); - test1.t(0); - - // broadcast all calls between this line and `stopBroadcast` - vm.startBroadcast(); - TestNumber test2 = new TestNumber(20); - test2.t(25); - vm.stopBroadcast(); -} -} diff --git a/tests/foundry/test/Contract.t.sol b/tests/foundry/test/Contract.t.sol deleted file mode 100644 index 07a537ee2d..0000000000 --- a/tests/foundry/test/Contract.t.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract ContractTest is Test { - function testExample() public { - assertTrue(true); - } -} diff --git a/tests/foundry/test/ContractBTest.t.sol b/tests/foundry/test/ContractBTest.t.sol deleted file mode 100644 index f50f9b999e..0000000000 --- a/tests/foundry/test/ContractBTest.t.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract ContractBTest is Test { - uint256 testNumber; - - function setUp() public { - testNumber = 42; - } - - function testNumberIs42() public { - assertEq(testNumber, 42); - } - - function testFailSubtract43() public { - testNumber -= 43; - } - - function testCannotSubtract43() public { - vm.expectRevert(stdError.arithmeticError); - testNumber -= 43; - } - -} diff --git a/tests/foundry/test/CounterTest.t.sol b/tests/foundry/test/CounterTest.t.sol deleted file mode 100644 index ec2e6bb6ec..0000000000 --- a/tests/foundry/test/CounterTest.t.sol +++ /dev/null @@ -1,43 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity >=0.8.13; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract Counter { - int120 public number; - - function setNumber(int120 newNumber) public { - number = newNumber; - } - - function increment() public { - number++; - } -} - -contract CounterTest is Test, KEVMCheats { - Counter public counter; - - // function setUp() public { - // counter = new Counter(); - // counter.setNumber(0); - // } - - function testIncrement() public { - kevm.infiniteGas(); - counter = new Counter(); - counter.setNumber(0); - counter.increment(); - assertEq(counter.number(), 1); - } - - function testSetNumber(int120 x) public { - //setUp(); - kevm.infiniteGas(); - counter = new Counter(); - counter.setNumber(0); - counter.setNumber(x); - assertEq(counter.number(), x); - } -} diff --git a/tests/foundry/test/DynamicTypes.t.sol b/tests/foundry/test/DynamicTypes.t.sol deleted file mode 100644 index 82cb69a9e9..0000000000 --- a/tests/foundry/test/DynamicTypes.t.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract DynamicTypes is Test { - - function test_dynamic_byte_read(bytes memory data, uint256 offset) public { - uint8 mydata = uint8(data[offset]); - vm.assume(mydata < 3); - assertTrue(mydata == 2 || mydata == 1 || mydata == 0); - } -} diff --git a/tests/foundry/test/EmitContractTest.t.sol b/tests/foundry/test/EmitContractTest.t.sol deleted file mode 100644 index d53ea18279..0000000000 --- a/tests/foundry/test/EmitContractTest.t.sol +++ /dev/null @@ -1,39 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/EmitContract.sol"; - -contract EmitContractTest is Test { - event Transfer(address indexed from, address indexed to, uint256 amount); - - function testExpectEmit() public { - ExpectEmit emitter = new ExpectEmit(); - // Check that topic 1, topic 2, and data are the same as the following emitted event. - // Checking topic 3 here doesn't matter, because `Transfer` only has 2 indexed topics. - vm.expectEmit(true, true, false, true); - // The event we expect - emit Transfer(address(this), address(1337), 1337); - // The event we get - emitter.t(); - } - - function testExpectEmitDoNotCheckData() public { - ExpectEmit emitter = new ExpectEmit(); - // Check topic 1 and topic 2, but do not check data - vm.expectEmit(true, true, false, false); - // The event we expect - emit Transfer(address(this), address(1337), 1338); - // The event we get - emitter.t(); - } - - function testExpectEmitCheckEmitter() public { - ExpectEmit emitter = new ExpectEmit(); - vm.expectEmit(true, true, false, true, address(emitter)); - // The event we expect - emit Transfer(address(this), address(1337), 1337); - // The event we get - emitter.t(); - } -} \ No newline at end of file diff --git a/tests/foundry/test/EnvTest.t.sol b/tests/foundry/test/EnvTest.t.sol deleted file mode 100644 index 4e0373d2a6..0000000000 --- a/tests/foundry/test/EnvTest.t.sol +++ /dev/null @@ -1,170 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract EnvTest is Test { - - function testEnvBool() public { - string memory key = "BOOL_VALUE"; - string memory val = "true"; - vm.setEnv(key, val); - - bool expected = true; - bool output = vm.envBool(key); - assert(output == expected); - } - - function testEnvUInt() public { - string memory key = "UINT_VALUE"; - string memory val = "115792089237316195423570985008687907853269984665640564039457584007913129639935"; - vm.setEnv(key, val); - - uint256 expected = type(uint256).max; - uint256 output = vm.envUint(key); - assert(output == expected); - } - - function testEnvInt() public { - string memory key = "INT_VALUE"; - string memory val = "-57896044618658097711785492504343953926634992332820282019728792003956564819968"; - vm.setEnv(key, val); - - int256 expected = type(int256).min; - int256 output = vm.envInt(key); - assert(output == expected); - } - - function testEnvAddress() public { - string memory key = "ADDRESS_VALUE"; - string memory val = "0x7109709ECfa91a80626fF3989D68f67F5b1DD12D"; - vm.setEnv(key, val); - - address expected = 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D; - address output = vm.envAddress(key); - assert(output == expected); - } - - function testEnvBytes32() public { - string memory key = "BYTES32_VALUE"; - string memory val = "0x00"; - vm.setEnv(key, val); - - bytes32 expected = bytes32(0x0000000000000000000000000000000000000000000000000000000000000000); - bytes32 output = vm.envBytes32(key); - assert(output == expected); - } - - function testEnvString() public { - string memory key = "STRING_VALUE"; - string memory val = "hello, world!"; - vm.setEnv(key, val); - - string memory expected = "hello, world!"; - string memory output = vm.envString(key); - assertEq(output, expected); - } - - function testEnvBytes() public { - string memory key = "BYTES_VALUE"; - string memory val = "0x7109709ECfa91a80626fF3989D68f67F5b1DD12D"; - vm.setEnv(key, val); - - bytes memory expected = hex"7109709ECfa91a80626fF3989D68f67F5b1DD12D"; - bytes memory output = vm.envBytes(key); - assertEq(output, expected); - } - - function testEnvBoolArray() public { - string memory key = "BOOL_VALUES"; - string memory val = "true,false,true,false"; - vm.setEnv(key, val); - - string memory delimiter = ","; - bool[4] memory expected = [true, false, true, false]; - bool[] memory output = vm.envBool(key, delimiter); - assert(keccak256(abi.encodePacked((output))) == keccak256(abi.encodePacked((expected)))); - } - - function testEnvUIntArray() public { - string memory key = "UINT_VALUES"; - string memory val = "0,0x0000000000000000000000000000000000000000000000000000000000000000"; - vm.setEnv(key, val); - - string memory delimiter = ","; - uint256[2] memory expected = [type(uint256).min, type(uint256).min]; - uint256[] memory output = vm.envUint(key, delimiter); - assert(keccak256(abi.encodePacked((output))) == keccak256(abi.encodePacked((expected)))); - } - - function testEnvIntArray() public { - string memory key = "INT_VALUES"; - string memory val = "-0x8000000000000000000000000000000000000000000000000000000000000000,+0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"; - vm.setEnv(key, val); - - string memory delimiter = ","; - int256[2] memory expected = [type(int256).min, type(int256).max]; - int256[] memory output = vm.envInt(key, delimiter); - assert(keccak256(abi.encodePacked((output))) == keccak256(abi.encodePacked((expected)))); - } - - function testEnvAddresseArray() public { - string memory key = "ADDRESS_VALUES"; - string memory val = "0x7109709ECfa91a80626fF3989D68f67F5b1DD12D,0x0000000000000000000000000000000000000000"; - vm.setEnv(key, val); - - string memory delimiter = ","; - address[2] memory expected = [ - 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D, - 0x0000000000000000000000000000000000000000 - ]; - address[] memory output = vm.envAddress(key, delimiter); - assert(keccak256(abi.encodePacked((output))) == keccak256(abi.encodePacked((expected)))); - } - - function testEnvBytes32Array() public { - string memory key = "BYTES32_VALUES"; - string memory val = "0x7109709ECfa91a80626fF3989D68f67F5b1DD12D,0x00"; - vm.setEnv(key, val); - - string memory delimiter = ","; - bytes32[2] memory expected = [ - bytes32(0x7109709ECfa91a80626fF3989D68f67F5b1DD12D000000000000000000000000), - bytes32(0x0000000000000000000000000000000000000000000000000000000000000000) - ]; - bytes32[] memory output = vm.envBytes32(key, delimiter); - assert(keccak256(abi.encodePacked((output))) == keccak256(abi.encodePacked((expected)))); - } - - function testEnvStringArray() public { - string memory key = "STRING_VALUES"; - string memory val = "hello, world!|0x7109709ECfa91a80626fF3989D68f67F5b1DD12D"; - vm.setEnv(key, val); - - string memory delimiter = "|"; - string[2] memory expected = [ - "hello, world!", - "0x7109709ECfa91a80626fF3989D68f67F5b1DD12D" - ]; - string[] memory output = vm.envString(key, delimiter); - for (uint i = 0; i < expected.length; ++i) { - assert(keccak256(abi.encodePacked((output[i]))) == keccak256(abi.encodePacked((expected[i])))); - } - } - - function testEnvBytesArray() public { - string memory key = "BYTES_VALUES"; - string memory val = "0x7109709ECfa91a80626fF3989D68f67F5b1DD12D,0x00"; - vm.setEnv(key, val); - - string memory delimiter = ","; - bytes[] memory expected = new bytes[](2); - expected[0] = hex"7109709ECfa91a80626fF3989D68f67F5b1DD12D"; - expected[1] = hex"00"; - bytes[] memory output = vm.envBytes(key, delimiter); - for (uint i = 0; i < expected.length; ++i) { - assert(keccak256(abi.encodePacked((output[i]))) == keccak256(abi.encodePacked((expected[i])))); - } - } - -} diff --git a/tests/foundry/test/ExpectCallTest.t.sol b/tests/foundry/test/ExpectCallTest.t.sol deleted file mode 100644 index dfe1876325..0000000000 --- a/tests/foundry/test/ExpectCallTest.t.sol +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract Dummy { - function numberA() public pure returns (uint) { - return 200; - } -} - -contract ExpectCallTest is Test, KEVMCheats { - - - function testExpectStaticCall() public { - Dummy dummyContract = new Dummy(); - address addr = address(dummyContract); - bytes memory data = abi.encodeWithSelector(dummyContract.numberA.selector); - uint256 result = 0; - kevm.expectStaticCall(addr, data); - - assembly { - let status := staticcall(16000, addr, add(data, 32), mload(data), 0, 0) - if eq(status, 1) { - if eq(returndatasize(), 32) { - returndatacopy(0, 0, 32) - result := mload(0) - } - } - } - - assert(result == 200); - } - - function testExpectRegularCall() public { - Dummy dummyContract = new Dummy(); - address addr = address(dummyContract); - bytes memory data = abi.encodeWithSelector(dummyContract.numberA.selector); - uint256 result = 0; - kevm.expectRegularCall(addr, 0, data); - - assembly { - let status := call(16000, addr, 0, add(data, 32), mload(data), 0, 0) - if eq(status, 1) { - if eq(returndatasize(), 32) { - returndatacopy(0, 0, 32) - result := mload(0) - } - } - } - - assert(result == 200); - } -} \ No newline at end of file diff --git a/tests/foundry/test/ExpectRevertTest.t.sol b/tests/foundry/test/ExpectRevertTest.t.sol deleted file mode 100644 index cdb44a35ca..0000000000 --- a/tests/foundry/test/ExpectRevertTest.t.sol +++ /dev/null @@ -1,147 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract Reverter { - function revertWithoutReason() public pure { - revert(); - } - - function revertWithReason(string calldata _a) public pure { - revert(_a); - } - - function noRevert() public pure returns (bool) { - return true; - } -} - -contract DepthReverter { - Reverter reverter; - - constructor() { - reverter = new Reverter(); - } - - function revertAtNextDepth() public view { - reverter.revertWithoutReason(); - } -} - -contract ReverterWithReturn { - function returnBytesUnless(bool revertInstead) - public - returns (bytes memory) - { - if (revertInstead) { - revert("Error"); - } else { - return abi.encodePacked(bytes4(0xdeadbeef)); - } - } - - function returnTupleUnless(bool revertInstead) - public - returns (uint256, uint256) - { - if (revertInstead) { - revert("Error"); - } else { - return (1, 2); - } - } -} - -contract ExpectRevertTest is Test { - error NotAuthorised(address caller, string message); - - function doRevert() internal pure { - require(false, ""); - } - - function test_expectRevert_internalCall() public { - vm.expectRevert(); - doRevert(); - } - - function test_expectRevert_true() public { - Reverter reverter = new Reverter(); - vm.expectRevert(); - reverter.revertWithoutReason(); - } - - function testFail_expectRevert_false() public { - Reverter reverter = new Reverter(); - vm.expectRevert(); - reverter.noRevert(); - } - - function test_expectRevert_message() public { - Reverter reverter = new Reverter(); - vm.expectRevert(bytes("Revert Reason Here")); - reverter.revertWithReason("Revert Reason Here"); - } - - function testFail_expectRevert_bytes4() public { - Reverter reverter = new Reverter(); - vm.expectRevert(bytes4("FAIL")); - reverter.revertWithReason("But fail."); - } - - function test_expectRevert_bytes4() public { - Reverter reverter = new Reverter(); - vm.expectRevert(bytes4("FAIL")); - reverter.revertWithReason("FAIL"); - } - - function testFail_expectRevert_empty() public { - vm.expectRevert(); - } - - function testFail_expectRevert_multipleReverts() public { - Reverter reverter = new Reverter(); - vm.expectRevert(); - reverter.revertWithoutReason(); - reverter.revertWithoutReason(); - } - - function test_ExpectRevert_increasedDepth() public { - DepthReverter reverter = new DepthReverter(); - vm.expectRevert(); - reverter.revertAtNextDepth(); - } - - function testFail_ExpectRevert_failAndSuccess() public { - Reverter reverter = new Reverter(); - vm.expectRevert(); - reverter.noRevert(); - vm.expectRevert(); - reverter.revertWithoutReason(); - } - - function test_expectRevert_encodedSymbolic(address controller) public { - vm.startPrank(controller); - vm.expectRevert( - abi.encodeWithSelector( - NotAuthorised.selector, - controller, - "TRANSFEROWNERSHIP" - ) - ); - revert NotAuthorised(controller, "TRANSFEROWNERSHIP"); - } - - function test_expectRevert_returnValue() public { - ReverterWithReturn reverter = new ReverterWithReturn(); - - vm.expectRevert("Error"); - bytes memory returnValueBytes = reverter.returnBytesUnless(true); - assertEq0(returnValueBytes, ""); - - vm.expectRevert("Error"); - (uint256 fst, uint256 snd) = reverter.returnTupleUnless(true); - assertEq(fst, 0); - assertEq(snd, 0); - } -} diff --git a/tests/foundry/test/FfiTest.t.sol b/tests/foundry/test/FfiTest.t.sol deleted file mode 100644 index 99a37ee6e6..0000000000 --- a/tests/foundry/test/FfiTest.t.sol +++ /dev/null @@ -1,57 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract FfiTest is Test { - - function setUp() public{ - string memory key = "FOO"; - string memory val = "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a72756e74696d6556617200000000000000000000000000000000000000000000"; - vm.setEnv(key, val); - } - - function testffi() public { - string[] memory inputs = new string[](3); - inputs[0] = "echo"; - inputs[1] = "-n"; - // ABI encoded "gm", as a string - inputs[2] = vm.toString(abi.encode("gm")); - //inputs[2] = "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002676d000000000000000000000000000000000000000000000000000000000000"; - bytes memory res = vm.ffi(inputs); - string memory output = abi.decode(res, (string)); - assertEq(output, "gm"); - } - - - function testFFIFOO() public { - string[] memory inputs = new string[](3); - inputs[0] = "bash"; - inputs[1] = "-c"; - inputs[2] = "echo -n $FOO"; - - bytes memory res = vm.ffi(inputs); - string memory output = abi.decode(res, (string)); - assertEq(output, "runtimeVar"); - } - - function testFFIScript() public { - string[] memory inputs = new string[](2); - inputs[0] = "bash"; - inputs[1] = "test/myscript.sh"; - - bytes memory res = vm.ffi(inputs); - string memory output = abi.decode(res, (string)); - assertEq(output, "runtimeVar"); - } - - function testFFIScript2() public { - string[] memory inputs = new string[](2); - inputs[0] = "bash"; - inputs[1] = "test/script.sh"; - - bytes memory res = vm.ffi(inputs); - string memory output = abi.decode(res, (string)); - assertEq(output, "true"); - } -} \ No newline at end of file diff --git a/tests/foundry/test/FilesTest.t.sol b/tests/foundry/test/FilesTest.t.sol deleted file mode 100644 index 9f019aac58..0000000000 --- a/tests/foundry/test/FilesTest.t.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract FilesTest is Test { - - function testReadWriteFile() public { - string memory contents = vm.readFile("./test/file.txt"); - vm.writeFile("./test/filecopy.txt", contents); - string memory contentsCopy = vm.readFile("./test/filecopy.txt"); - - assertEq(contents, contentsCopy); - } - - function testReadWriteLine() public { - string memory line = vm.readLine("./test/file.txt"); - vm.writeLine("./test/fileline.txt", line); - line = vm.readLine("./test/file.txt"); - assertEq(line, "for testing"); - - vm.closeFile("./test/file.txt"); - line = vm.readLine("./test/file.txt"); - assertEq(line, "This is a file"); - } - - function testFailRemoveFile() public { - string memory contents = vm.readFile("./test/file.txt"); - vm.writeFile("./test/filecopy2.txt", contents); - vm.removeFile("./test/filecopy2.txt"); - vm.readFile("./test/filecopy2.txt"); - } -} diff --git a/tests/foundry/test/ForkTest.t.sol b/tests/foundry/test/ForkTest.t.sol deleted file mode 100644 index ba83e3eb93..0000000000 --- a/tests/foundry/test/ForkTest.t.sol +++ /dev/null @@ -1,86 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract ForkTest is Test { - - function testCreateFork() public { - uint256 forkId = vm.createFork("https://eth-mainnet.public.blastapi.io"); - vm.selectFork(forkId); - - assertGt(block.number, 15223854); // as of time of writing - } - - function testCreateForkBlock() public { - uint256 forkId = vm.createFork("https://eth-mainnet.public.blastapi.io", 15223849); - vm.selectFork(forkId); - - assertEq(block.number, 15223849); - } - - function testCreateSelectFork() public { - vm.createSelectFork("https://eth-mainnet.public.blastapi.io"); - assertGt(block.number, 15223854); - } - - function testCreateSelectForkBlock() public { - vm.createSelectFork("https://eth-mainnet.public.blastapi.io", 15223849); - assertEq(block.number, 15223849); - } - - function testActiveFork() public { - uint256 mainnetForkId = vm.createFork("https://eth-mainnet.public.blastapi.io"); - uint256 binanceForkId = vm.createFork("https://bscrpc.com"); - - assert(mainnetForkId != binanceForkId); - - vm.selectFork(mainnetForkId); - assertEq(vm.activeFork(), mainnetForkId); - - vm.selectFork(binanceForkId); - assertEq(vm.activeFork(), binanceForkId); - } - - function testRollFork() public { - uint256 forkId = vm.createFork("https://bscrpc.com"); - vm.selectFork(forkId); - - assertGt(block.number, 19918933); // - vm.rollFork(19918777); - - assertEq(block.number, 19918777); - } - - function testRollForkId() public { - uint256 forkId = vm.createFork("https://api.avax.network/ext/bc/C/rpc"); - vm.rollFork(forkId, 17871134); - - vm.selectFork(forkId); - //console.log(block.number); - assertEq(block.number, 17871134); - } - - function testRPCUrl() public { - string memory url = vm.rpcUrl("optimism"); - assertEq(url, "https://optimism.alchemyapi.io/v2/..."); - } - - function testRPCUrlRevert() public { - vm.expectRevert("Failed to resolve env var `RPC_MAINNET`: environment variable not found"); - vm.rpcUrl("mainnet"); - } - - function testAllRPCUrl() public { - //this line is to comment after I know how to set the environment variable RPC_MAINNET - vm.expectRevert("Failed to resolve env var `RPC_MAINNET`: environment variable not found"); - string[2][] memory allUrls = vm.rpcUrls(); - assertEq(allUrls.length, 2); - - string[2] memory val = allUrls[0]; - assertEq(val[0], "mainnet"); - - string[2] memory env = allUrls[1]; - assertEq(env[0], "optimism"); - } -} diff --git a/tests/foundry/test/FreshInt.t.sol b/tests/foundry/test/FreshInt.t.sol deleted file mode 100644 index 98cfa27ffb..0000000000 --- a/tests/foundry/test/FreshInt.t.sol +++ /dev/null @@ -1,37 +0,0 @@ -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -import "../src/KEVMCheats.sol"; - -contract FreshIntTest is Test, KEVMCheats { - int128 constant min = -170141183460469231731687303715884105728; - int128 constant max = 170141183460469231731687303715884105727; - - function test_uint128() public { - kevm.infiniteGas(); - uint256 fresh_uint128 = uint256(kevm.freshUInt(32)); - assertGe(fresh_uint128, type(uint128).min); - assertLe(fresh_uint128, type(uint128).max); - } - - function test_bool() public { - kevm.infiniteGas(); - uint256 fresh_uint256 = kevm.freshBool(); - assertGe(fresh_uint256, 0); - assertLe(fresh_uint256, 1); - } - - function test_int128() public { - kevm.infiniteGas(); - int128 val = int128(uint128(kevm.freshUInt(16))); - assertGe(val, min); - assertLe(val, max); - } - - function testFail_int128() public { - kevm.infiniteGas(); - int128 val = int128(uint128(kevm.freshUInt(16))); - assertGt(val, max); - } -} diff --git a/tests/foundry/test/GasTest.t.sol b/tests/foundry/test/GasTest.t.sol deleted file mode 100644 index 12d0ddba17..0000000000 --- a/tests/foundry/test/GasTest.t.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract GasTest is Test, KEVMCheats { - function testInfiniteGas() public { - kevm.infiniteGas(); - uint256 gasLeftBefore = gasleft(); - uint256 x = 345; - uint256 y = 928; - uint256 z = y - x; - uint256 gasLeftAfter = gasleft(); - assert(gasLeftBefore <= gasLeftAfter); - assert(gasLeftAfter <= gasLeftBefore); - } -} diff --git a/tests/foundry/test/GetCodeTest.t.sol b/tests/foundry/test/GetCodeTest.t.sol deleted file mode 100644 index 40681c40fb..0000000000 --- a/tests/foundry/test/GetCodeTest.t.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/MyToken.sol"; - - -contract GetCodeTest is Test { - MyToken myToken; - - - function setUp() public{ - myToken = new MyToken(address(1234)); - } - - function testGetCode() public { - bytes memory args = abi.encode(address(1234)); - vm.label(address(1234), "exampleAddress"); - bytes memory bytecode = abi.encodePacked(vm.getCode("MyToken.sol:MyToken"), args); - address anotherAddress; - assembly { - anotherAddress := create(0, add(bytecode, 0x20), mload(bytecode)) - } - - assertEq0(address(myToken).code, anotherAddress.code); - } - -} diff --git a/tests/foundry/test/LabelTest.t.sol b/tests/foundry/test/LabelTest.t.sol deleted file mode 100644 index 2d7e5dff48..0000000000 --- a/tests/foundry/test/LabelTest.t.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract LabelTest is Test { - - function testLabel() public { - vm.label(address(0), "Zero Address"); - //Just to check test trace - assert(true); - } -} \ No newline at end of file diff --git a/tests/foundry/test/Loops.t.sol b/tests/foundry/test/Loops.t.sol deleted file mode 100644 index 8431da9283..0000000000 --- a/tests/foundry/test/Loops.t.sol +++ /dev/null @@ -1,278 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract LoopsTest is Test { - - uint constant WAD = 10 ** 18; - uint constant RAY = 10 ** 27; - - function wmul(uint x, uint y) internal pure returns (uint z) { - z = ((x * y) + (WAD / 2)) / WAD; - } - - function wdiv(uint x, uint y) internal pure returns (uint z) { - z = ((x * WAD) + (y / 2)) / y; - } - - function sumToN(uint256 n) internal pure returns (uint256) { - uint256 result = 0; - for (uint256 i = 0; i <= n; i++) { - result += i; - } - return result; - } - - function sumToNBroken(uint256 n) internal pure returns (uint256) { - uint256 result = 0; - // Off by one error in loop condition - for (uint256 i = 0; i < n; i++) { - result += i; - } - return result; - } - - function testSumToN(uint256 n) public { - vm.assume(n <= 100); // We need this to keep the test running time low - uint256 expected = n * (n + 1) / 2; - uint256 actual = sumToN(n); - assertEq(expected, actual); - } - - function testSumToNBroken(uint256 n) public { - // This test should fail - vm.assume(n <= 100); // We need this to keep the test running time low - uint256 expected = n * (n + 1) / 2; - uint256 actual = sumToNBroken(n); - assertEq(expected, actual); - } - - function sum_N(uint n) public returns (uint) { - // Amount of gas left at beginning of loop: 9223372036854772642 - // Amount of gas consumed per iteration: 178 - // Number of iterations: n - // 9223372036854772642 // 178 = 51816696836262767 - vm.assume(n <= 51816696836262767); - uint s = 0; - while (0 < n) { - s = s + n; - n = n - 1; - } - return s; - } - - function test_sum_10() public returns (uint) { - return sum_N(10); - } - - function test_sum_100() public returns (uint) { - return sum_N(100); - } - - function test_sum_1000() public returns (uint) { - return sum_N(1000); - } - - function max(uint256[] memory numbers) internal pure returns (uint256) { - uint256 result = 0; - for (uint256 i = 0; i < numbers.length; i++) { - if (numbers[i] > result) result = numbers[i]; - } - return result; - } - - function maxBroken(uint256[] memory numbers) internal pure returns (uint256) { - uint256 result = 0; - // Off by one error in loop initialization - for (uint256 i = 1; i < numbers.length; i++) { - if (numbers[i] > result) result = numbers[i]; - } - return result; - } - - function testMax(uint256[] memory numbers) public { - uint256 maxium = max(numbers); - bool isMax = true; - for (uint256 i = 0; i < numbers.length && isMax; i++) { - isMax = maxium >= numbers[i]; - } - assertTrue(isMax); - } - - function testMaxBroken(uint256[] memory numbers) public { - // This test should fail - uint256 maxium = maxBroken(numbers); - bool isMax = true; - for (uint256 i = 0; i < numbers.length && isMax; i++) { - isMax = maxium >= numbers[i]; - } - assertTrue(isMax); - } - - function sort(uint256[] memory numbers) internal pure returns(uint256[] memory) { - if (numbers.length <= 1) return numbers; - quickSort(numbers, 0, numbers.length - 1); - return numbers; - } - - function sortBroken(uint256[] memory numbers) internal pure returns(uint256[] memory) { - if (numbers.length <= 1) return numbers; - // Off by one error in second parameter - quickSort(numbers, 1, numbers.length - 1); - return numbers; - } - - function quickSort(uint[] memory numbers, uint left, uint right) internal pure { - if (left >= right) return; - uint i = left; - uint j = right; - uint pivot = numbers[left + (right - left) / 2]; - while (i <= j) { - while (numbers[i] < pivot) i++; - while (pivot < numbers[j] && j > 0) j--; - if (i <= j) { - (numbers[i], numbers[j]) = (numbers[j], numbers[i]); - i++; - if (j > 0) j--; - } - } - if (left < j) - quickSort(numbers, left, j); - if (i < right) - quickSort(numbers, i, right); - } - - function testSort(uint256[] memory numbers) public { - uint256[] memory sorted = sort(numbers); - bool isSorted = true; - for (uint256 i = 1; i < sorted.length && isSorted; i++) { - isSorted = numbers[i - 1] <= numbers[i]; - } - assertTrue(isSorted); - } - - function testSortBroken(uint256[] memory numbers) public { - // This test should fail - uint256[] memory sorted = sortBroken(numbers); - bool isSorted = true; - for (uint256 i = 1; i < sorted.length && isSorted; i++) { - isSorted = numbers[i - 1] <= numbers[i]; - } - assertTrue(isSorted); - } - - function sqrt(uint x) internal pure returns (uint y) { - if (x == 0) { - y = 0; - } else { - uint z = x; - while (true) { - y = z; - z = (wdiv(x, z) + z) / 2; - if (y == z) { - break; - } - } - } - } - - function testSqrt(uint x) public { - uint res = sqrt(x); - uint sqr = wmul(res, res); - uint err; - if (sqr > x) { - err = sqr - x; - } else { - err = sqr - res; - } - assertTrue(err < x / 100); - } - - function isPrimeBroken(uint n) internal pure returns (bool) { - for (uint i = 2; i < n; i++) { - if (n % i != 0) { - return false; - } - } - return true; - } - - function testIsPrimeBroken(uint n, uint i) public { - // This test should fail for n < 2 - bool prime = isPrimeBroken(n); - assertTrue(!prime || n > 1); - assertTrue(i < 2 || i >= n || !prime || (n % i != 0)); - } - - function isPrime(uint n) internal pure returns (bool) { - if (n < 2) { - return false; - } - for (uint i = 2; i < n; i++) { - if (n % i != 0) { - return false; - } - } - return true; - } - - function testIsPrime(uint n, uint i) public { - bool prime = isPrime(n); - assertTrue(!prime || n > 1); - assertTrue(i < 2 || i >= n || !prime || (n % i != 0)); - } - - function testIsNotPrime(uint n) public { - bool prime = isPrime(n); - if (prime || n < 2) { - return; - } - for (uint i = 2; i < n; i++) { - if (n % i == 0) { - return; - } - } - assertTrue(false); - } - - function isPrimeOpt(uint n) internal pure returns (bool) { - if (n < 2) { - return false; - } - for (uint i = 2; i <= n / 2; i++) { - if (n % i != 0) { - return false; - } - } - return true; - } - - function testIsPrimeOpt(uint n) public { - assertEq(isPrime(n), isPrimeOpt(n)); - } - - function nthPrime(uint n) internal pure returns (uint i) { - uint m; - while (m < n) { - i++; - if (isPrime(i)) { - m++; - } - } - } - - function testNthPrime(uint n, uint i) public { - uint nth = nthPrime(n); - - if (n == 0) { - assertEq(nth, 0); - return; - } - - assertTrue(isPrime(nth)); - - uint prev = nthPrime(n - 1); - assertTrue(i <= prev || i >= nth || !isPrime(i)); - } -} diff --git a/tests/foundry/test/MethodDisambiguate.t.sol b/tests/foundry/test/MethodDisambiguate.t.sol deleted file mode 100644 index 02798005f8..0000000000 --- a/tests/foundry/test/MethodDisambiguate.t.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract MethodDisambiguateTest is Test { - - function getNumber(uint256 x) public returns(uint256) { - assertEq(x, x); - return 1; - } - - function getNumber(uint32 x) public returns(uint256) { - assertEq(x, x); - return 2; - } - - function test_method_call() public { - uint256 x = 0; - assertEq(1, getNumber(x)); - } -} diff --git a/tests/foundry/test/MockCallTest.t.sol b/tests/foundry/test/MockCallTest.t.sol deleted file mode 100644 index 5058d33fa1..0000000000 --- a/tests/foundry/test/MockCallTest.t.sol +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/MyToken.sol"; -import "src/MyIERC20.sol"; - - -contract MockCallTest is Test { - - function testMockCall() public { - vm.mockCall( - address(0), - abi.encodeWithSelector(MyToken.balanceOf.selector, address(1)), - abi.encode(10) - ); - assertEq(MyIERC20(address(0)).balanceOf(address(1)), 10); - } - - function testMockCalls() public { - vm.mockCall( - address(0), - abi.encodeWithSelector(MyToken.balanceOf.selector), - abi.encode(10) - ); - assertEq(MyIERC20(address(0)).balanceOf(address(1)), 10); - assertEq(MyIERC20(address(0)).balanceOf(address(2)), 10); - vm.clearMockedCalls(); - } - - function testMockCallValue() public { - MyToken token = new MyToken(address(1337)); - - assertEq(token.pay{value: 10}(address(1)), 10); - assertEq(token.pay{value: 2}(address(2)), 2); - vm.mockCall( - address(token), - 10, - abi.encodeWithSelector(MyToken.pay.selector), - abi.encode(99) - ); - assertEq(token.pay{value: 10}(address(1)), 99); - assertEq(token.pay{value: 2}(address(2)), 4); - } -} diff --git a/tests/foundry/test/NoImports.t.sol b/tests/foundry/test/NoImports.t.sol deleted file mode 100644 index 73ae0ce289..0000000000 --- a/tests/foundry/test/NoImports.t.sol +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -contract NoImport { - function test_source_map() public pure returns (uint) { - uint x = 0; - uint y = 1; - uint z = 2; - uint a = x + y; - uint b = z - y; - uint c = a * b; - return a + b + c; - } -} - diff --git a/tests/foundry/test/OwnerOnlyUpTest.t.sol b/tests/foundry/test/OwnerOnlyUpTest.t.sol deleted file mode 100644 index a9b8760ed9..0000000000 --- a/tests/foundry/test/OwnerOnlyUpTest.t.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/OwnerOnlyUp.sol"; - -contract OwnerUpOnlyTest is Test { - OwnerUpOnly upOnly; - - function setUp() public { - upOnly = new OwnerUpOnly(); - } - - function testIncrementAsOwner() public { - assertEq(upOnly.count(), 0); - upOnly.increment(); - assertEq(upOnly.count(), 1); - } - - function testFailIncrementAsNotOwner() public { - vm.prank(address(0)); - upOnly.increment(); - } - - function testIncrementAsNotOwner() public { - vm.expectRevert(Unauthorized.selector); - vm.prank(address(0)); - upOnly.increment(); - } -} \ No newline at end of file diff --git a/tests/foundry/test/PlainPrankTest.t.sol b/tests/foundry/test/PlainPrankTest.t.sol deleted file mode 100644 index 0dadbee951..0000000000 --- a/tests/foundry/test/PlainPrankTest.t.sol +++ /dev/null @@ -1,79 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract AdditionalToken { - address public immutable owner; - uint256 public count; - - constructor() { - owner = msg.sender; - count = 0; - } - - function incrementCount() public { - if(msg.sender != owner) - count = count + 1; - } -} - -contract PlainPrankTest is Test { - - function internalCounter() public view returns (bool) { - return msg.sender == address(15); - } - - function testFail_startPrank_internalCall() public { - // The vm.assume is required only by KEVM in order to have this test passing. It is required - // because the `msg.sender` in KEVM specs is a symbolic `CALLER_ID` while in foundry it is a - // concrete, hardcoded address. - vm.assume(msg.sender != address(15)); - vm.startPrank(address(15)); - assert(internalCounter()); - } - - function test_startPrank_true() public { - AdditionalToken token = new AdditionalToken(); - vm.startPrank(address(token)); - token.incrementCount(); - vm.stopPrank(); - assert(token.count() == 1); - } - - function test_startPrankWithOrigin_true() public { - AdditionalToken token = new AdditionalToken(); - vm.startPrank(address(token), address(token)); - token.incrementCount(); - vm.stopPrank(); - assert(token.count() == 1); - } - - function test_startPrank_zeroAddress_true() public { - AdditionalToken token = new AdditionalToken(); - vm.startPrank(address(0)); - token.incrementCount(); - vm.stopPrank(); - assert(token.count() == 1); - } - - function test_stopPrank_notExistent() public { - vm.stopPrank(); - assert(true); - } - - function testFail_startPrank_existingAlready() public { - vm.startPrank(address(0)); - vm.startPrank(address(1)); - vm.stopPrank(); - vm.stopPrank(); - } - - function test_prank_zeroAddress_true() public { - AdditionalToken token = new AdditionalToken(); - vm.prank(address(0)); - token.incrementCount(); - token.incrementCount(); - assert(token.count() == 1); - } -} \ No newline at end of file diff --git a/tests/foundry/test/PrankTest.t.sol b/tests/foundry/test/PrankTest.t.sol deleted file mode 100644 index 1516c25ece..0000000000 --- a/tests/foundry/test/PrankTest.t.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/Prank.sol"; - -contract PrankTest is Test { - Prank prankContract; - - function setUp() public { - prankContract = new Prank(); - } - - function testAddAsOwner(uint256 x) public { - assertEq(prankContract.count(), 0); - prankContract.add(x); - assertEq(prankContract.count(), x); - } - - function testFailAddPrank(uint256 x) public { - vm.prank(address(0)); - prankContract.add(x); - } - - function testAddStartPrank(uint256 x) public { - vm.expectRevert(bytes("Only owner")); - vm.startPrank(address(0)); - prankContract.add(x); - assertEq(prankContract.count(), 0); - vm.stopPrank(); - } - - - function testSubtractFail(uint256 x) public { - vm.expectRevert(); - prankContract.subtract(x); - assertEq(prankContract.count(), 0); - } - - function testSubtractAsTxOrigin(uint256 addValue, uint256 subValue) public { - prankContract.add(addValue); - vm.assume(subValue<=addValue); - vm.prank(address(0), address(0)); - prankContract.subtract(subValue); - assertEq(prankContract.count(), addValue-subValue); - } - - function testSubtractStartPrank(uint256 addValue, uint256 subValue) public { - prankContract.add(addValue); - vm.startPrank(address(0),address(0)); - vm.assume(subValue<=addValue); - prankContract.subtract(subValue); - assertEq(prankContract.count(), addValue-subValue); - vm.stopPrank(); - } -} diff --git a/tests/foundry/test/Preconditions.t.sol b/tests/foundry/test/Preconditions.t.sol deleted file mode 100644 index faeb134911..0000000000 --- a/tests/foundry/test/Preconditions.t.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity >=0.8.0; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract PreconditionsTest is Test, KEVMCheats { - uint256 n; - - function setUp() public { - kevm.symbolicStorage(address(this)); - vm.assume(n < 10); - } - - function testAssume() public { - assertLt(n, 10); - } -} - diff --git a/tests/foundry/test/RecordLogsTest.t.sol b/tests/foundry/test/RecordLogsTest.t.sol deleted file mode 100644 index 3b88bb0f6b..0000000000 --- a/tests/foundry/test/RecordLogsTest.t.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/EmitContract.sol"; - -contract RecordLogsTest is Test { - ExpectEmit emitter; - - function setUp() public { - emitter = new ExpectEmit(); - vm.recordLogs(); - } - - function testRecordLogs() public{ - emitter.t(); - Vm.Log[] memory entries = vm.getRecordedLogs(); - assertEq(entries.length, 1); - assertEq(entries[0].topics[0], keccak256("Transfer(address,address,uint256)")); - assertEq(abi.decode(entries[0].data, (uint256)), 1337); - } -} diff --git a/tests/foundry/test/SafeTest.t.sol b/tests/foundry/test/SafeTest.t.sol deleted file mode 100644 index 8b148dbbc7..0000000000 --- a/tests/foundry/test/SafeTest.t.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/Safe.sol"; - -contract SafeTest is Test { - Safe safe; - - // Needed so the test contract itself can receive ether - // when withdrawing - receive() external payable {} - - function setUp() public { - safe = new Safe(); - } - - function testWithdraw() public { - payable(address(safe)).transfer(1 ether); - uint256 preBalance = address(this).balance; - safe.withdraw(); - uint256 postBalance = address(this).balance; - assertEq(preBalance + 1 ether, postBalance); - } - - function testWithdrawFuzz(uint96 amount) public { - vm.assume(amount > 0.1 ether); - payable(address(safe)).transfer(amount); - uint256 preBalance = address(this).balance; - safe.withdraw(); - uint256 postBalance = address(this).balance; - assertEq(preBalance + amount, postBalance); - } -} \ No newline at end of file diff --git a/tests/foundry/test/SetUp2Test.t.sol b/tests/foundry/test/SetUp2Test.t.sol deleted file mode 100644 index f0bd827768..0000000000 --- a/tests/foundry/test/SetUp2Test.t.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract Setup2Test is Test { - - uint a; - uint b; - uint c; - - function setUp() public { - a = 1; - b = 2; - c = 3; - } - - function test_setup() public { - assertEq(a + b + c, 6); - } - function testFail_setup() public { - assertEq(a + b + c, 7); - } -} diff --git a/tests/foundry/test/SetUpDeploy.t.sol b/tests/foundry/test/SetUpDeploy.t.sol deleted file mode 100644 index b161ec78c4..0000000000 --- a/tests/foundry/test/SetUpDeploy.t.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "src/MyToken.sol"; - -// This experiment covers the basic behavior of the -// test contract constructor and setup function. -// -// In particular, it ensures that the constructor -// and setup functions are called before running -// the tests. -// -// The setup function is called exactly once after -// the constructor function. -// -// Before each test the VM reverts to the post -// setup state. -contract SetUpDeployTest is Test { - - MyToken token; - - function setUp() public{ - token = new MyToken(address(0)); - } - - function test_extcodesize() public { - uint size; - address token_addr = address(token); - assembly { - size := extcodesize(token_addr) - } - assert(size > 0); - } -} diff --git a/tests/foundry/test/SetUpTest.t.sol b/tests/foundry/test/SetUpTest.t.sol deleted file mode 100644 index 338831c356..0000000000 --- a/tests/foundry/test/SetUpTest.t.sol +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -// This experiment covers the basic behavior of the -// test contract constructor and setup function. -// -// In particular, it ensures that the constructor -// and setup functions are called before running -// the tests. -// -// The setup function is called exactly once after -// the constructor function. -// -// Before each test the VM reverts to the post -// setup state. -contract SetUpTest is Test { - - uint256 counter = 0; - - constructor () { - counter = 100; - } - - function setUp() public{ - counter++; - } - - function testSetUpCalled() public { - assertEq(counter, 101); - } - - // We also want to cover a symbolic case - function testSetUpCalledSymbolic(uint256 x) public { - assertEq(counter, 101); - // The following assertion is only here so that - // x is used and not thrown away by the optimizer - assertEq(x, x); - } -} diff --git a/tests/foundry/test/SignTest.t.sol b/tests/foundry/test/SignTest.t.sol deleted file mode 100644 index 42b3426c20..0000000000 --- a/tests/foundry/test/SignTest.t.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract SignTest is Test { - - function testSign() public { - address alice = vm.addr(1); - bytes32 hash = keccak256("Signed by Alice"); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(1, hash); - address signer = ecrecover(hash, v, r, s); - assertEq(alice, signer); - } - - function testSign_symbolic(uint256 pk) public { - vm.assume(pk != 0); - vm.assume(pk < 115792089237316195423570985008687907852837564279074904382605163141518161494337); - address fromPk = vm.addr(pk); - bytes32 hash = keccak256("Signed by private key"); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(pk, hash); - address signer = ecrecover(hash, v, r, s); - assertEq(fromPk, signer); - } -} diff --git a/tests/foundry/test/Simple.t.sol b/tests/foundry/test/Simple.t.sol deleted file mode 100644 index 1787b54f39..0000000000 --- a/tests/foundry/test/Simple.t.sol +++ /dev/null @@ -1,65 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract AssertTest is Test, KEVMCheats { - uint y; - - function setUp() public {} - - function test_failing_branch(uint x) public { - assert(x >= 100); - } - - function test_assert_true() public pure { - assert(true); - } - - function test_assert_true_branch(uint x) public { - if (x < 3) { - y = x; - assert(true); - } else { - y = x - 1; - assert(true); - } - assert(y <= x); - } - - function test_branch_merge(uint x) public { - kevm.infiniteGas(); - if (x < 10) { - y = 0; - } else { - y = 1; - } - assert(y < 2); - } - - function test_assert_false() public pure { - assert(false); - } - - function testFail_assert_true() public pure { - assert(true); - } - - function testFail_assert_false() public pure { - assert(false); - } - - function testFail_expect_revert() public { - vm.expectRevert(); - assert(false); - } - - function test_revert_branch(uint x, uint y) public{ - if (x < y) { - assert(true); - } else { - assert(false); - } - } -} diff --git a/tests/foundry/test/SnapshotTest.t.sol b/tests/foundry/test/SnapshotTest.t.sol deleted file mode 100644 index 62fbf074a5..0000000000 --- a/tests/foundry/test/SnapshotTest.t.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -struct Storage { - uint slot0; - uint slot1; -} - -contract SnapshotTest is Test { - Storage store; - - function setUp() public { - store.slot0 = 10; - store.slot1 = 20; - } - - function testSnapshot() public { - uint256 snapshot = vm.snapshot(); - store.slot0 = 300; - store.slot1 = 400; - - assertEq(store.slot0, 300); - assertEq(store.slot1, 400); - - // after resetting to a snapshot all changes are discarded - vm.revertTo(snapshot); - assertEq(store.slot0, 10, "snapshot revert for slot 0 unsuccessful"); - assertEq(store.slot1, 20, "snapshot revert for slot 1 unsuccessful"); - } - -} - diff --git a/tests/foundry/test/StoreTest.t.sol b/tests/foundry/test/StoreTest.t.sol deleted file mode 100644 index 7fc8206f99..0000000000 --- a/tests/foundry/test/StoreTest.t.sol +++ /dev/null @@ -1,110 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract Store { - uint256 private testNumber = 1337; // slot 0 - - constructor(){ - } -} - -contract StoreTest is Test { - - function testAccesses() public { - Store myStore = new Store(); - vm.record(); - - (bytes32[] memory reads, bytes32[] memory writes) = vm.accesses(address(myStore)); - assert(reads.length == 1); - assert(writes.length == 1); - } - - function testStoreLoad() public { - Store myStore = new Store(); - vm.store(address(myStore), bytes32(uint256(0)), bytes32(uint256(31337))); - bytes32 testNumber = vm.load(address(myStore), bytes32(uint256(0))); - assert(uint256(testNumber) == 31337); // 31337 - } - - function testStoreLoadNonExistent() public { - vm.store(address(0), bytes32(uint256(3)), bytes32(uint256(31337))); - bytes32 testNumber = vm.load(address(0), bytes32(uint256(3))); - assert(uint256(testNumber) == 31337); // 31337 - } - - function testLoadNonExistent() public { - bytes32 testNumber = vm.load(address(100), bytes32(uint256(23))); - assert(uint256(testNumber) == 0); - } - - - function testGasLoadColdVM() public { - // Call vm.load(address(101), bytes32(uint256(23))) - uint256 gasUsed = measureGasForCall(address(vm), abi.encodeCall(Vm.load, (address(101), bytes32(uint256(23))))); - assert(gasUsed == 2625); - } - - function testGasStoreColdVM() public { - // Call vm.store(address(101), bytes32(uint256(23)), bytes32(uint256(5))) - uint256 gasUsed = measureGasForCall(address(vm), abi.encodeCall(Vm.store, (address(101), bytes32(uint256(23)), bytes32(uint256(5))))); - assert(gasUsed == 2625); - } - - function testGasLoadWarmVM() public { - // Load the vm into the set of accessed accounts. Should make the - // following call to vm.load() cheaper - (payable(address(vm)).send(0)); - - // Call vm.load(address(101), bytes32(uint256(23))); - uint256 gasUsed = measureGasForCall(address(vm), abi.encodeCall(Vm.load, (address(101), bytes32(uint256(23))))); - assert(gasUsed == 125); - } - - function testGasStoreWarmVM() public { - // Load the vm into the set of accessed accounts. Should make the - // following call to vm.store() cheaper - (payable(address(vm)).send(0)); - - // Call vm.store(address(101), bytes32(uint256(23)), bytes32(uint256(5))); - uint256 gasUsed = measureGasForCall(address(vm), abi.encodeCall(Vm.store, (address(101), bytes32(uint256(23)), bytes32(uint256(5))))); - assert(gasUsed == 125); - } - - function testGasLoadWarmUp() public { - // Check that vm.load(addr, slot) loads addr into the set of accessed - // accounts, making subsequent access to addr cheaper - vm.load(address(101), bytes32(uint256(23))); - - uint256 gasUsed = measureGasForCall(address(101), ""); - assert(gasUsed == 125); - } - - - function testGasStoreWarmUp() public { - // Check that vm.store(addr, slot, val) loads addr into the set of accessed - // accounts, making subsequent access to addr cheaper - vm.store(address(101), bytes32(uint256(23)), bytes32(uint256(5))); - - uint256 gasUsed = measureGasForCall(address(101), ""); - assert(gasUsed == 125); - } - - - function measureGasForCall(address target, bytes memory callData) internal returns(uint256) { - // Use assembly to measure gas cost as this gives more predictable - // results than when using Solidity - - uint256 gasUsed; - assembly { - let dataPtr := add(32, callData) - let dataSize := mload(callData) - let g := gas() - let r := call(g, target, 0, dataPtr, dataSize, 0, 0) - gasUsed := sub(g, gas()) - } - - return gasUsed; - } -} diff --git a/tests/foundry/test/SymbolicStorageTest.t.sol b/tests/foundry/test/SymbolicStorageTest.t.sol deleted file mode 100644 index 4133313571..0000000000 --- a/tests/foundry/test/SymbolicStorageTest.t.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; -import "../src/KEVMCheats.sol"; - -contract SymbolicStore { - uint256 private testNumber = 1337; // slot 0 - constructor() {} -} - -contract SymbolicStorageTest is Test, KEVMCheats { - function testFail_SymbolicStorage(uint256 slot) public { - address addr = 0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8; - kevm.symbolicStorage(addr); - bytes32 value = vm.load(addr, bytes32(slot)); - require(value != 0); - assertEq(uint256(value), 0); - } - - function testFail_SymbolicStorage1(uint256 slot) public { - SymbolicStore myStore = new SymbolicStore(); - kevm.symbolicStorage(address(myStore)); - bytes32 value = vm.load(address(myStore), bytes32(uint256(slot))); - require(value != 0); - assertEq(uint256(value), 0); - } - - function testEmptyInitialStorage(uint256 slot) public { - bytes32 storage_value = vm.load(address(vm), bytes32(slot)); - assertEq(uint256(storage_value), 0); - } -} diff --git a/tests/foundry/test/ToStringTest.t.sol b/tests/foundry/test/ToStringTest.t.sol deleted file mode 100644 index 116210ff1e..0000000000 --- a/tests/foundry/test/ToStringTest.t.sol +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -import "forge-std/Test.sol"; - -contract ToStringTest is Test { - - function testAddressToString() public { - address addr = 0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8; - string memory addrStr = vm.toString(addr); - assertEq("0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8", addrStr); - } - - function testBytesToString() public { - bytes memory bts = hex"7109709ecfa91a80626ff3989d68f67f5b1dd12d"; - string memory btsStr = vm.toString(bts); - assertEq("0x7109709ecfa91a80626ff3989d68f67f5b1dd12d", btsStr); - } - - function testBytes32ToString() public { - bytes32 bts = 0x00; - string memory btsStr = vm.toString(bts); - assertEq("0x0000000000000000000000000000000000000000000000000000000000000000", btsStr); - } - - function testBoolToString() public { - string memory boolStr = vm.toString(true); - assertEq("true", boolStr); - boolStr = vm.toString(false); - assertEq("false", boolStr); - } - - function testUint256ToString() public { - uint256 number = 1234; - string memory numberStr = vm.toString(number); - assertEq("1234", numberStr); - } - - function testIntToString() public { - int number = -1234; - string memory numberStr = vm.toString(number); - assertEq("-1234", numberStr); - } -} \ No newline at end of file diff --git a/tests/foundry/test/TypeTest.t.sol b/tests/foundry/test/TypeTest.t.sol deleted file mode 100644 index 318fddddb7..0000000000 --- a/tests/foundry/test/TypeTest.t.sol +++ /dev/null @@ -1,566 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity =0.8.13; - -contract UintTypeTest { - - /* Tests for uint256 */ - function test_uint256(uint256 x) public pure { - assert(x == x); - assert(type(uint256).max >= x); - } - - function test_uint256_fail(uint256 x) public pure { - assert(type(uint256).max > x); - } - - function testFail_uint256(uint256 x) public pure { - assert(type(uint256).max > x); - } - - - /* Tests for uint248 */ - function test_uint248(uint248 x) public pure { - assert(x == x); - assert(type(uint248).max >= x); - } - - function test_uint248_fail(uint248 x) public pure { - assert(type(uint248).max > x); - } - - function testFail_uint248(uint248 x) public pure { - assert(type(uint248).max > x); - } - - - /* Tests for uint240 */ - function test_uint240(uint240 x) public pure { - assert(x == x); - assert(type(uint240).max >= x); - } - - function test_uint240_fail(uint240 x) public pure { - assert(type(uint240).max > x); - } - - function testFail_uint240(uint240 x) public pure { - assert(type(uint240).max > x); - } - - - /* Tests for uint232 */ - function test_uint232(uint232 x) public pure { - assert(x == x); - assert(type(uint232).max >= x); - } - - function test_uint232_fail(uint232 x) public pure { - assert(type(uint232).max > x); - } - - function testFail_uint232(uint232 x) public pure { - assert(type(uint232).max > x); - } - - - /* Tests for uint224 */ - function test_uint224(uint224 x) public pure { - assert(x == x); - assert(type(uint224).max >= x); - } - - function test_uint224_fail(uint224 x) public pure { - assert(type(uint224).max > x); - } - - function testFail_uint224(uint224 x) public pure { - assert(type(uint224).max > x); - } - - - /* Tests for uint216 */ - function test_uint216(uint216 x) public pure { - assert(x == x); - assert(type(uint216).max >= x); - } - - function test_uint216_fail(uint216 x) public pure { - assert(type(uint216).max > x); - } - - function testFail_uint216(uint216 x) public pure { - assert(type(uint216).max > x); - } - - - /* Tests for uint208 */ - function test_uint208(uint208 x) public pure { - assert(x == x); - assert(type(uint208).max >= x); - } - - function test_uint208_fail(uint208 x) public pure { - assert(type(uint208).max > x); - } - - function testFail_uint208(uint208 x) public pure { - assert(type(uint208).max > x); - } - - - /* Tests for uint200 */ - function test_uint200(uint200 x) public pure { - assert(x == x); - assert(type(uint200).max >= x); - } - - function test_uint200_fail(uint200 x) public pure { - assert(type(uint200).max > x); - } - - function testFail_uint200(uint200 x) public pure { - assert(type(uint200).max > x); - } - - - /* Tests for uint192 */ - function test_uint192(uint192 x) public pure { - assert(x == x); - assert(type(uint192).max >= x); - } - - function test_uint192_fail(uint192 x) public pure { - assert(type(uint192).max > x); - } - - function testFail_uint192(uint192 x) public pure { - assert(type(uint192).max > x); - } - - - /* Tests for uint184 */ - function test_uint184(uint184 x) public pure { - assert(x == x); - assert(type(uint184).max >= x); - } - - function test_uint184_fail(uint184 x) public pure { - assert(type(uint184).max > x); - } - - function testFail_uint184(uint184 x) public pure { - assert(type(uint184).max > x); - } - - - /* Tests for uint176 */ - function test_uint176(uint176 x) public pure { - assert(x == x); - assert(type(uint176).max >= x); - } - - function test_uint176_fail(uint176 x) public pure { - assert(type(uint176).max > x); - } - - function testFail_uint176(uint176 x) public pure { - assert(type(uint176).max > x); - } - - - /* Tests for uint168 */ - function test_uint168(uint168 x) public pure { - assert(x == x); - assert(type(uint168).max >= x); - } - - function test_uint168_fail(uint168 x) public pure { - assert(type(uint168).max > x); - } - - function testFail_uint168(uint168 x) public pure { - assert(type(uint168).max > x); - } - - - /* Tests for uint160 */ - function test_uint160(uint160 x) public pure { - assert(x == x); - assert(type(uint160).max >= x); - } - - function test_uint160_fail(uint160 x) public pure { - assert(type(uint160).max > x); - } - - function testFail_uint160(uint160 x) public pure { - assert(type(uint160).max > x); - } - - - /* Tests for uint152 */ - function test_uint152(uint152 x) public pure { - assert(x == x); - assert(type(uint152).max >= x); - } - - function test_uint152_fail(uint152 x) public pure { - assert(type(uint152).max > x); - } - - function testFail_uint152(uint152 x) public pure { - assert(type(uint152).max > x); - } - - - /* Tests for uint144 */ - function test_uint144(uint144 x) public pure { - assert(x == x); - assert(type(uint144).max >= x); - } - - function test_uint144_fail(uint144 x) public pure { - assert(type(uint144).max > x); - } - - function testFail_uint144(uint144 x) public pure { - assert(type(uint144).max > x); - } - - - /* Tests for uint136 */ - function test_uint136(uint136 x) public pure { - assert(x == x); - assert(type(uint136).max >= x); - } - - function test_uint136_fail(uint136 x) public pure { - assert(type(uint136).max > x); - } - - function testFail_uint136(uint136 x) public pure { - assert(type(uint136).max > x); - } - - - /* Tests for uint128 */ - function test_uint128(uint128 x) public pure { - assert(x == x); - assert(type(uint128).max >= x); - } - - function test_uint128_fail(uint128 x) public pure { - assert(type(uint128).max > x); - } - - function testFail_uint128(uint128 x) public pure { - assert(type(uint128).max > x); - } - - - /* Tests for uint120 */ - function test_uint120(uint120 x) public pure { - assert(x == x); - assert(type(uint120).max >= x); - } - - function test_uint120_fail(uint120 x) public pure { - assert(type(uint120).max > x); - } - - function testFail_uint120(uint120 x) public pure { - assert(type(uint120).max > x); - } - - - /* Tests for uint112 */ - function test_uint112(uint112 x) public pure { - assert(x == x); - assert(type(uint112).max >= x); - } - - function test_uint112_fail(uint112 x) public pure { - assert(type(uint112).max > x); - } - - function testFail_uint112(uint112 x) public pure { - assert(type(uint112).max > x); - } - - - /* Tests for uint104 */ - function test_uint104(uint104 x) public pure { - assert(x == x); - assert(type(uint104).max >= x); - } - - function test_uint104_fail(uint104 x) public pure { - assert(type(uint104).max > x); - } - - function testFail_uint104(uint104 x) public pure { - assert(type(uint104).max > x); - } - - - /* Tests for uint96 */ - function test_uint96(uint96 x) public pure { - assert(x == x); - assert(type(uint96).max >= x); - } - - function test_uint96_fail(uint96 x) public pure { - assert(type(uint96).max > x); - } - - function testFail_uint96(uint96 x) public pure { - assert(type(uint96).max > x); - } - - - /* Tests for uint88 */ - function test_uint88(uint88 x) public pure { - assert(x == x); - assert(type(uint88).max >= x); - } - - function test_uint88_fail(uint88 x) public pure { - assert(type(uint88).max > x); - } - - function testFail_uint88(uint88 x) public pure { - assert(type(uint88).max > x); - } - - - /* Tests for uint80 */ - function test_uint80(uint80 x) public pure { - assert(x == x); - assert(type(uint80).max >= x); - } - - function test_uint80_fail(uint80 x) public pure { - assert(type(uint80).max > x); - } - - function testFail_uint80(uint80 x) public pure { - assert(type(uint80).max > x); - } - - - /* Tests for uint72 */ - function test_uint72(uint72 x) public pure { - assert(x == x); - assert(type(uint72).max >= x); - } - - function test_uint72_fail(uint72 x) public pure { - assert(type(uint72).max > x); - } - - function testFail_uint72(uint72 x) public pure { - assert(type(uint72).max > x); - } - - - /* Tests for uint64 */ - function test_uint64(uint64 x) public pure { - assert(x == x); - assert(type(uint64).max >= x); - } - - function test_uint64_fail(uint64 x) public pure { - assert(type(uint64).max > x); - } - - function testFail_uint64(uint64 x) public pure { - assert(type(uint64).max > x); - } - - - /* Tests for uint56 */ - function test_uint56(uint56 x) public pure { - assert(x == x); - assert(type(uint56).max >= x); - } - - function test_uint56_fail(uint56 x) public pure { - assert(type(uint56).max > x); - } - - function testFail_uint56(uint56 x) public pure { - assert(type(uint56).max > x); - } - - - /* Tests for uint48 */ - function test_uint48(uint48 x) public pure { - assert(x == x); - assert(type(uint48).max >= x); - } - - function test_uint48_fail(uint48 x) public pure { - assert(type(uint48).max > x); - } - - function testFail_uint48(uint48 x) public pure { - assert(type(uint48).max > x); - } - - - /* Tests for uint40 */ - function test_uint40(uint40 x) public pure { - assert(x == x); - assert(type(uint40).max >= x); - } - - function test_uint40_fail(uint40 x) public pure { - assert(type(uint40).max > x); - } - - function testFail_uint40(uint40 x) public pure { - assert(type(uint40).max > x); - } - - - /* Tests for uint32 */ - function test_uint32(uint32 x) public pure { - assert(x == x); - assert(type(uint32).max >= x); - } - - function test_uint32_fail(uint32 x) public pure { - assert(type(uint32).max > x); - } - - function testFail_uint32(uint32 x) public pure { - assert(type(uint32).max > x); - } - - - /* Tests for uint24 */ - function test_uint24(uint24 x) public pure { - assert(x == x); - assert(type(uint24).max >= x); - } - - function test_uint24_fail(uint24 x) public pure { - assert(type(uint24).max > x); - } - - function testFail_uint24(uint24 x) public pure { - assert(type(uint24).max > x); - } - - - /* Tests for uint16 */ - function test_uint16(uint16 x) public pure { - assert(x == x); - assert(type(uint16).max >= x); - } - - function test_uint16_fail(uint16 x) public pure { - assert(type(uint16).max > x); - } - - function testFail_uint16(uint16 x) public pure { - assert(type(uint16).max > x); - } - - - /* Tests for uint8 */ - function test_uint8(uint8 x) public pure { - assert(x == x); - assert(type(uint8).max >= x); - } - - function test_uint8_fail(uint8 x) public pure { - assert(type(uint8).max > x); - } - - function testFail_uint8(uint8 x) public pure { - assert(type(uint8).max > x); - } - -} - - -contract IntTypeTest { - - /* Tests for int256 */ - function test_int256(int256 x) public pure { - assert(x == x); - assert(type(int256).max >= x); - } - - function test_int256_fail(int256 x) public pure { - assert(type(int256).max > x); - } - - function testFail_int256(int256 x) public pure { - assert(type(int256).max > x); - } - - - /* Tests for int128 */ - function test_int128(int128 x) public pure { - assert(x == x); - assert(type(int128).max >= x); - } - - function test_int128_fail(int128 x) public pure { - assert(type(int128).max > x); - } - - function testFail_int128(int128 x) public pure { - assert(type(int128).max > x); - } - - - /* Tests for int64 */ - function test_int64(int64 x) public pure { - assert(x == x); - assert(type(int64).max >= x); - } - - function test_int64_fail(int64 x) public pure { - assert(type(int64).max > x); - } - - function testFail_int64(int64 x) public pure { - assert(type(int64).max > x); - } -} - - -contract BytesTypeTest { - - /* Tests for bytes32 */ - function test_bytes32(bytes32 x) public pure { - assert(x == x); - assert(type(uint256).max >= uint256(x)); - } - - function test_bytes32_fail(bytes32 x) public pure { - assert(type(uint256).max > uint256(x)); - } - - function testFail_bytes32(bytes32 x) public pure { - assert(type(uint256).max > uint256(x)); - } - - - /* Tests for bytes4 */ - function test_bytes4(bytes4 x) public pure { - assert(x == x); - assert(type(uint32).max >= uint32(x)); - } - - function test_bytes4_fail(bytes4 x) public pure { - assert(type(uint32).max > uint32(x)); - } - - function testFail_bytes4(bytes4 x) public pure { - assert(type(uint32).max > uint32(x)); - } -} diff --git a/tests/foundry/test/file.txt b/tests/foundry/test/file.txt deleted file mode 100644 index 60b20ad427..0000000000 --- a/tests/foundry/test/file.txt +++ /dev/null @@ -1,3 +0,0 @@ -This is a file -for testing -file manipulation functions. diff --git a/tests/foundry/test/myscript.sh b/tests/foundry/test/myscript.sh deleted file mode 100755 index 1120ac4f26..0000000000 --- a/tests/foundry/test/myscript.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -echo -n $FOO \ No newline at end of file diff --git a/tests/foundry/test/script.sh b/tests/foundry/test/script.sh deleted file mode 100755 index 8a8cc01f1a..0000000000 --- a/tests/foundry/test/script.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -if [ $FOO ] -# true encoded -then echo -n 0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000047472756500000000000000000000000000000000000000000000000000000000 -# false encoded -else echo -n 0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000566616c7365000000000000000000000000000000000000000000000000000000 -fi diff --git a/tests/interactive/CallRecursiveContract_d0g0v0.json b/tests/interactive/CallRecursiveContract_d0g0v0.json deleted file mode 100644 index 34e71b575a..0000000000 --- a/tests/interactive/CallRecursiveContract_d0g0v0.json +++ /dev/null @@ -1,758 +0,0 @@ -{ - "CallRecursiveContract_d0g0v0_Byzantium" : { - "_info" : { - "comment" : "", - "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", - "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", - "source" : "src/BlockchainTestsFiller/GeneralStateTests/stInitCodeTest/CallRecursiveContract_d0g0v0Filler.json", - "sourceHash" : "8d529644ca8ea1a246d92e2a632eea5e3d047412caa3e9eecdabef4cddd0803e" - }, - "blocks" : [ - { - "blockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "", - "gasLimit" : "0x05f5e100", - "gasUsed" : "0x05d602", - "hash" : "0xad7a4536c5842f5caab4605d78e66b40b287d8eb3777d1692a8de6a6014d854f", - "mixHash" : "0x2997a2caefcc0da8b12b7ba0dc1621e28ff004cdcc4c30106952936ac7a49467", - "nonce" : "0xbb247707a7e8a083", - "number" : "0x01", - "parentHash" : "0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f", - "receiptTrie" : "0x29cd73fe1868f13a298f87d55ffc3c35f6c1251f98fd58835f99a95c718fbd31", - "stateRoot" : "0xc2eed555afd349166225c89bb46ab3428f34fe9388ce2a8b5b1b4409412dc8f9", - "timestamp" : "0x03e8", - "transactionsTrie" : "0xd4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "rlp" : "0xf90261f901f9a06c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2eed555afd349166225c89bb46ab3428f34fe9388ce2a8b5b1b4409412dc8f9a0d4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493a029cd73fe1868f13a298f87d55ffc3c35f6c1251f98fd58835f99a95c718fbd31b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018405f5e1008305d6028203e880a02997a2caefcc0da8b12b7ba0dc1621e28ff004cdcc4c30106952936ac7a4946788bb247707a7e8a083f862f860800183061a8094095e7baea6a6c7c4c2dfeb977efac326af552d8701001ca0767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072da06d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0cac0", - "transactions" : [ - { - "data" : "0x00", - "gasLimit" : "0x061a80", - "gasPrice" : "0x01", - "nonce" : "0x00", - "r" : "0x767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072d", - "s" : "0x6d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0ca", - "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", - "v" : "0x1c", - "value" : "0x01" - } - ], - "uncleHeaders" : [ - ] - } - ], - "genesisBlockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "0x42", - "gasLimit" : "0x05f5e100", - "gasUsed" : "0x00", - "hash" : "0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f", - "mixHash" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "nonce" : "0x0102030405060708", - "number" : "0x00", - "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "receiptTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot" : "0x9c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22", - "timestamp" : "0x03b6", - "transactionsTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "genesisRLP" : "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000808405f5e100808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", - "lastblockhash" : "0xad7a4536c5842f5caab4605d78e66b40b287d8eb3777d1692a8de6a6014d854f", - "network" : "Byzantium", - "postState" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x01", - "code" : "0x3060025560206000600039602060006000f0", - "nonce" : "0x29", - "storage" : { - "0x02" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" - } - }, - "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "0x29a2241af631d602", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - }, - "0x4b0b4b3c7fd3dd5cea1d04dcf027dea29f84acb1" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x02", - "storage" : { - "0x02" : "0x4b0b4b3c7fd3dd5cea1d04dcf027dea29f84acb1" - } - }, - "0x60f971aa65f7e520dcb750823e2c239e61c3736b" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x02", - "storage" : { - "0x02" : "0x60f971aa65f7e520dcb750823e2c239e61c3736b" - } - }, - "0x6fc9df08d2206eff4f4c378aeb2a1f8c570952b9" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x02", - "storage" : { - "0x02" : "0x6fc9df08d2206eff4f4c378aeb2a1f8c570952b9" - } - }, - "0x74a77e95f3228f0b4d116d5a12e09aaf99ce54ae" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x02", - "storage" : { - "0x02" : "0x74a77e95f3228f0b4d116d5a12e09aaf99ce54ae" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x096c3d", - "code" : "", - "nonce" : "0x01", - "storage" : { - } - }, - "0xf0064be0919341a45680ec0d592eaee47df671ac" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x02", - "storage" : { - "0x02" : "0xf0064be0919341a45680ec0d592eaee47df671ac" - } - } - }, - "pre" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x00", - "code" : "0x3060025560206000600039602060006000f0", - "nonce" : "0x28", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0f4240", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - } - } - }, - "CallRecursiveContract_d0g0v0_EIP150" : { - "_info" : { - "comment" : "", - "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", - "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", - "source" : "src/BlockchainTestsFiller/GeneralStateTests/stInitCodeTest/CallRecursiveContract_d0g0v0Filler.json", - "sourceHash" : "8d529644ca8ea1a246d92e2a632eea5e3d047412caa3e9eecdabef4cddd0803e" - }, - "blocks" : [ - { - "blockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "", - "gasLimit" : "0x05f5e100", - "gasUsed" : "0x05d602", - "hash" : "0xc8417a58a1b28973bf904f682286f7f75ce10f60efdb4ed6994aa2758a432a7a", - "mixHash" : "0x08537f394aad708dd1c0a270f66f815ce3dc8826a265c1610fcc11ffa4a68965", - "nonce" : "0xbf62a424947e2578", - "number" : "0x01", - "parentHash" : "0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f", - "receiptTrie" : "0x094fb672162ff0a137b3e30810321528a5a6cc10634df85054e4856fee261a17", - "stateRoot" : "0x0289aea08a0161f13694a60100228ab183174df65a4dbe5c95b1193b8aa4a292", - "timestamp" : "0x03e8", - "transactionsTrie" : "0xd4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "rlp" : "0xf90261f901f9a06c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00289aea08a0161f13694a60100228ab183174df65a4dbe5c95b1193b8aa4a292a0d4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493a0094fb672162ff0a137b3e30810321528a5a6cc10634df85054e4856fee261a17b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018405f5e1008305d6028203e880a008537f394aad708dd1c0a270f66f815ce3dc8826a265c1610fcc11ffa4a6896588bf62a424947e2578f862f860800183061a8094095e7baea6a6c7c4c2dfeb977efac326af552d8701001ca0767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072da06d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0cac0", - "transactions" : [ - { - "data" : "0x00", - "gasLimit" : "0x061a80", - "gasPrice" : "0x01", - "nonce" : "0x00", - "r" : "0x767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072d", - "s" : "0x6d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0ca", - "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", - "v" : "0x1c", - "value" : "0x01" - } - ], - "uncleHeaders" : [ - ] - } - ], - "genesisBlockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "0x42", - "gasLimit" : "0x05f5e100", - "gasUsed" : "0x00", - "hash" : "0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f", - "mixHash" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "nonce" : "0x0102030405060708", - "number" : "0x00", - "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "receiptTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot" : "0x9c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22", - "timestamp" : "0x03b6", - "transactionsTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "genesisRLP" : "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000808405f5e100808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", - "lastblockhash" : "0xc8417a58a1b28973bf904f682286f7f75ce10f60efdb4ed6994aa2758a432a7a", - "network" : "EIP150", - "postState" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x01", - "code" : "0x3060025560206000600039602060006000f0", - "nonce" : "0x29", - "storage" : { - "0x02" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" - } - }, - "0x1a4c83e1a9834cdc7e4a905ff7f0cf44aed73180" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0x1a4c83e1a9834cdc7e4a905ff7f0cf44aed73180" - } - }, - "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "0x4563918244f9d602", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - }, - "0x9ca74ad1a326b79d9ec9c080deb56062e975a7ee" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0x9ca74ad1a326b79d9ec9c080deb56062e975a7ee" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x096c3d", - "code" : "", - "nonce" : "0x01", - "storage" : { - } - }, - "0xbbba3a14689a28fd82f09d4e01bc87d9654e95c3" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0xbbba3a14689a28fd82f09d4e01bc87d9654e95c3" - } - }, - "0xdfceaa082d190ab34e3c37943de35ae8fc01f300" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0xdfceaa082d190ab34e3c37943de35ae8fc01f300" - } - }, - "0xf0064be0919341a45680ec0d592eaee47df671ac" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0xf0064be0919341a45680ec0d592eaee47df671ac" - } - } - }, - "pre" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x00", - "code" : "0x3060025560206000600039602060006000f0", - "nonce" : "0x28", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0f4240", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - } - } - }, - "CallRecursiveContract_d0g0v0_EIP158" : { - "_info" : { - "comment" : "", - "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", - "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", - "source" : "src/BlockchainTestsFiller/GeneralStateTests/stInitCodeTest/CallRecursiveContract_d0g0v0Filler.json", - "sourceHash" : "8d529644ca8ea1a246d92e2a632eea5e3d047412caa3e9eecdabef4cddd0803e" - }, - "blocks" : [ - { - "blockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "", - "gasLimit" : "0x05f5e100", - "gasUsed" : "0x05d602", - "hash" : "0x6476515a7c61709a2b089e0f2ecb62fa09d41b1fa1ae2459b36e8bb18c545747", - "mixHash" : "0x83a666d0df6cd0a56408696cad96d75cad4bf8068866a65920a29fa9f61550d0", - "nonce" : "0x42f2a8307bda5084", - "number" : "0x01", - "parentHash" : "0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f", - "receiptTrie" : "0xf09f9453977e0f663e221d4f499c3a69374a3e9114d96a24e5a5f43a66fdf8bf", - "stateRoot" : "0x40d37713bc5484e4042bebda7f367f88d1b7888e16428b359b4c57a2e42aa69d", - "timestamp" : "0x03e8", - "transactionsTrie" : "0xd4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "rlp" : "0xf90261f901f9a06c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa040d37713bc5484e4042bebda7f367f88d1b7888e16428b359b4c57a2e42aa69da0d4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493a0f09f9453977e0f663e221d4f499c3a69374a3e9114d96a24e5a5f43a66fdf8bfb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018405f5e1008305d6028203e880a083a666d0df6cd0a56408696cad96d75cad4bf8068866a65920a29fa9f61550d08842f2a8307bda5084f862f860800183061a8094095e7baea6a6c7c4c2dfeb977efac326af552d8701001ca0767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072da06d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0cac0", - "transactions" : [ - { - "data" : "0x00", - "gasLimit" : "0x061a80", - "gasPrice" : "0x01", - "nonce" : "0x00", - "r" : "0x767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072d", - "s" : "0x6d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0ca", - "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", - "v" : "0x1c", - "value" : "0x01" - } - ], - "uncleHeaders" : [ - ] - } - ], - "genesisBlockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "0x42", - "gasLimit" : "0x05f5e100", - "gasUsed" : "0x00", - "hash" : "0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f", - "mixHash" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "nonce" : "0x0102030405060708", - "number" : "0x00", - "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "receiptTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot" : "0x9c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22", - "timestamp" : "0x03b6", - "transactionsTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "genesisRLP" : "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000808405f5e100808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", - "lastblockhash" : "0x6476515a7c61709a2b089e0f2ecb62fa09d41b1fa1ae2459b36e8bb18c545747", - "network" : "EIP158", - "postState" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x01", - "code" : "0x3060025560206000600039602060006000f0", - "nonce" : "0x29", - "storage" : { - "0x02" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" - } - }, - "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "0x4563918244f9d602", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - }, - "0x4b0b4b3c7fd3dd5cea1d04dcf027dea29f84acb1" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x02", - "storage" : { - "0x02" : "0x4b0b4b3c7fd3dd5cea1d04dcf027dea29f84acb1" - } - }, - "0x60f971aa65f7e520dcb750823e2c239e61c3736b" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x02", - "storage" : { - "0x02" : "0x60f971aa65f7e520dcb750823e2c239e61c3736b" - } - }, - "0x6fc9df08d2206eff4f4c378aeb2a1f8c570952b9" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x02", - "storage" : { - "0x02" : "0x6fc9df08d2206eff4f4c378aeb2a1f8c570952b9" - } - }, - "0x74a77e95f3228f0b4d116d5a12e09aaf99ce54ae" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x02", - "storage" : { - "0x02" : "0x74a77e95f3228f0b4d116d5a12e09aaf99ce54ae" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x096c3d", - "code" : "", - "nonce" : "0x01", - "storage" : { - } - }, - "0xf0064be0919341a45680ec0d592eaee47df671ac" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x02", - "storage" : { - "0x02" : "0xf0064be0919341a45680ec0d592eaee47df671ac" - } - } - }, - "pre" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x00", - "code" : "0x3060025560206000600039602060006000f0", - "nonce" : "0x28", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0f4240", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - } - } - }, - "CallRecursiveContract_d0g0v0_Frontier" : { - "_info" : { - "comment" : "", - "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", - "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", - "source" : "src/BlockchainTestsFiller/GeneralStateTests/stInitCodeTest/CallRecursiveContract_d0g0v0Filler.json", - "sourceHash" : "8d529644ca8ea1a246d92e2a632eea5e3d047412caa3e9eecdabef4cddd0803e" - }, - "blocks" : [ - { - "blockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "", - "gasLimit" : "0x05f5e100", - "gasUsed" : "0x061a80", - "hash" : "0x56b01bc48896d0f148e3cbeb25d2acca2fb269f58c76259f12b6371b34cf55e0", - "mixHash" : "0xf2a65eacc585c243da6a578441843d140dd0f249a877b0ded6144c9377d0754b", - "nonce" : "0xe33515169624bac0", - "number" : "0x01", - "parentHash" : "0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f", - "receiptTrie" : "0x148ccddbf11792db5ae8678da605f39100dd3a61ccb30746f764c0da5f07fab6", - "stateRoot" : "0x55f734e7ea6efcad82a24fa8642ca33400d5d51513ab41b99f6e195ded745b83", - "timestamp" : "0x03e8", - "transactionsTrie" : "0xd4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "rlp" : "0xf90261f901f9a06c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa055f734e7ea6efcad82a24fa8642ca33400d5d51513ab41b99f6e195ded745b83a0d4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493a0148ccddbf11792db5ae8678da605f39100dd3a61ccb30746f764c0da5f07fab6b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018405f5e10083061a808203e880a0f2a65eacc585c243da6a578441843d140dd0f249a877b0ded6144c9377d0754b88e33515169624bac0f862f860800183061a8094095e7baea6a6c7c4c2dfeb977efac326af552d8701001ca0767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072da06d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0cac0", - "transactions" : [ - { - "data" : "0x00", - "gasLimit" : "0x061a80", - "gasPrice" : "0x01", - "nonce" : "0x00", - "r" : "0x767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072d", - "s" : "0x6d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0ca", - "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", - "v" : "0x1c", - "value" : "0x01" - } - ], - "uncleHeaders" : [ - ] - } - ], - "genesisBlockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "0x42", - "gasLimit" : "0x05f5e100", - "gasUsed" : "0x00", - "hash" : "0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f", - "mixHash" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "nonce" : "0x0102030405060708", - "number" : "0x00", - "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "receiptTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot" : "0x9c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22", - "timestamp" : "0x03b6", - "transactionsTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "genesisRLP" : "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000808405f5e100808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", - "lastblockhash" : "0x56b01bc48896d0f148e3cbeb25d2acca2fb269f58c76259f12b6371b34cf55e0", - "network" : "Frontier", - "postState" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x01", - "code" : "0x3060025560206000600039602060006000f0", - "nonce" : "0x29", - "storage" : { - "0x02" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" - } - }, - "0x1a4c83e1a9834cdc7e4a905ff7f0cf44aed73180" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0x1a4c83e1a9834cdc7e4a905ff7f0cf44aed73180" - } - }, - "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "0x4563918244fa1a80", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - }, - "0x8e3411c91d5dd4081b4846fa2f93808f5ad19686" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0x8e3411c91d5dd4081b4846fa2f93808f5ad19686" - } - }, - "0x9ca74ad1a326b79d9ec9c080deb56062e975a7ee" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0x9ca74ad1a326b79d9ec9c080deb56062e975a7ee" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0927bf", - "code" : "", - "nonce" : "0x01", - "storage" : { - } - }, - "0xbbba3a14689a28fd82f09d4e01bc87d9654e95c3" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0xbbba3a14689a28fd82f09d4e01bc87d9654e95c3" - } - }, - "0xdfceaa082d190ab34e3c37943de35ae8fc01f300" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0xdfceaa082d190ab34e3c37943de35ae8fc01f300" - } - }, - "0xf0064be0919341a45680ec0d592eaee47df671ac" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0xf0064be0919341a45680ec0d592eaee47df671ac" - } - } - }, - "pre" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x00", - "code" : "0x3060025560206000600039602060006000f0", - "nonce" : "0x28", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0f4240", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - } - } - }, - "CallRecursiveContract_d0g0v0_Homestead" : { - "_info" : { - "comment" : "", - "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", - "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", - "source" : "src/BlockchainTestsFiller/GeneralStateTests/stInitCodeTest/CallRecursiveContract_d0g0v0Filler.json", - "sourceHash" : "8d529644ca8ea1a246d92e2a632eea5e3d047412caa3e9eecdabef4cddd0803e" - }, - "blocks" : [ - { - "blockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "", - "gasLimit" : "0x05f5e100", - "gasUsed" : "0x061a80", - "hash" : "0x4b932565479299ee989f7bc9da55d2a3982052fe528791316164e8a9aa7f56db", - "mixHash" : "0x097d08e84b142edbdf167b1768103abcbaaf43d90f9ad99f8d06ab39a4444e20", - "nonce" : "0xf42704efd7c8c55b", - "number" : "0x01", - "parentHash" : "0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f", - "receiptTrie" : "0x148ccddbf11792db5ae8678da605f39100dd3a61ccb30746f764c0da5f07fab6", - "stateRoot" : "0x55f734e7ea6efcad82a24fa8642ca33400d5d51513ab41b99f6e195ded745b83", - "timestamp" : "0x03e8", - "transactionsTrie" : "0xd4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "rlp" : "0xf90261f901f9a06c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa055f734e7ea6efcad82a24fa8642ca33400d5d51513ab41b99f6e195ded745b83a0d4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493a0148ccddbf11792db5ae8678da605f39100dd3a61ccb30746f764c0da5f07fab6b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018405f5e10083061a808203e880a0097d08e84b142edbdf167b1768103abcbaaf43d90f9ad99f8d06ab39a4444e2088f42704efd7c8c55bf862f860800183061a8094095e7baea6a6c7c4c2dfeb977efac326af552d8701001ca0767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072da06d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0cac0", - "transactions" : [ - { - "data" : "0x00", - "gasLimit" : "0x061a80", - "gasPrice" : "0x01", - "nonce" : "0x00", - "r" : "0x767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072d", - "s" : "0x6d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0ca", - "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", - "v" : "0x1c", - "value" : "0x01" - } - ], - "uncleHeaders" : [ - ] - } - ], - "genesisBlockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "0x42", - "gasLimit" : "0x05f5e100", - "gasUsed" : "0x00", - "hash" : "0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f", - "mixHash" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "nonce" : "0x0102030405060708", - "number" : "0x00", - "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "receiptTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot" : "0x9c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22", - "timestamp" : "0x03b6", - "transactionsTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "genesisRLP" : "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000808405f5e100808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", - "lastblockhash" : "0x4b932565479299ee989f7bc9da55d2a3982052fe528791316164e8a9aa7f56db", - "network" : "Homestead", - "postState" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x01", - "code" : "0x3060025560206000600039602060006000f0", - "nonce" : "0x29", - "storage" : { - "0x02" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" - } - }, - "0x1a4c83e1a9834cdc7e4a905ff7f0cf44aed73180" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0x1a4c83e1a9834cdc7e4a905ff7f0cf44aed73180" - } - }, - "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "0x4563918244fa1a80", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - }, - "0x8e3411c91d5dd4081b4846fa2f93808f5ad19686" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0x8e3411c91d5dd4081b4846fa2f93808f5ad19686" - } - }, - "0x9ca74ad1a326b79d9ec9c080deb56062e975a7ee" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0x9ca74ad1a326b79d9ec9c080deb56062e975a7ee" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0927bf", - "code" : "", - "nonce" : "0x01", - "storage" : { - } - }, - "0xbbba3a14689a28fd82f09d4e01bc87d9654e95c3" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0xbbba3a14689a28fd82f09d4e01bc87d9654e95c3" - } - }, - "0xdfceaa082d190ab34e3c37943de35ae8fc01f300" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0xdfceaa082d190ab34e3c37943de35ae8fc01f300" - } - }, - "0xf0064be0919341a45680ec0d592eaee47df671ac" : { - "balance" : "0x00", - "code" : "", - "nonce" : "0x01", - "storage" : { - "0x02" : "0xf0064be0919341a45680ec0d592eaee47df671ac" - } - } - }, - "pre" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x00", - "code" : "0x3060025560206000600039602060006000f0", - "nonce" : "0x28", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0f4240", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - } - } - } -} \ No newline at end of file diff --git a/tests/interactive/CallRecursiveContract_d0g0v0.json.parse-expected b/tests/interactive/CallRecursiveContract_d0g0v0.json.parse-expected deleted file mode 100644 index 73e43155d6..0000000000 --- a/tests/interactive/CallRecursiveContract_d0g0v0.json.parse-expected +++ /dev/null @@ -1 +0,0 @@ -LblinitGeneratedTopCell{}(\left-assoc{}(Lbl'Unds'Map'Unds'{}(Lbl'UndsPipe'-'-GT-Unds'{}(inj{SortKConfigVar{}, SortKItem{}}(\dv{SortKConfigVar{}}("$PGM")), inj{SortJSON{}, SortKItem{}}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("CallRecursiveContract_d0g0v0_Byzantium")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("_info")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("comment")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("filledwith")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("cpp-1.3.0+commit.6e0ce939.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lllcversion")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("source")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("src/BlockchainTestsFiller/GeneralStateTests/stInitCodeTest/CallRecursiveContract_d0g0v0Filler.json"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("sourceHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("8d529644ca8ea1a246d92e2a632eea5e3d047412caa3e9eecdabef4cddd0803e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blocks")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x05f5e100"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x05d602"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xad7a4536c5842f5caab4605d78e66b40b287d8eb3777d1692a8de6a6014d854f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2997a2caefcc0da8b12b7ba0dc1621e28ff004cdcc4c30106952936ac7a49467"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xbb247707a7e8a083"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x29cd73fe1868f13a298f87d55ffc3c35f6c1251f98fd58835f99a95c718fbd31"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xc2eed555afd349166225c89bb46ab3428f34fe9388ce2a8b5b1b4409412dc8f9"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03e8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xd4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("rlp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf90261f901f9a06c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2eed555afd349166225c89bb46ab3428f34fe9388ce2a8b5b1b4409412dc8f9a0d4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493a029cd73fe1868f13a298f87d55ffc3c35f6c1251f98fd58835f99a95c718fbd31b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018405f5e1008305d6028203e880a02997a2caefcc0da8b12b7ba0dc1621e28ff004cdcc4c30106952936ac7a4946788bb247707a7e8a083f862f860800183061a8094095e7baea6a6c7c4c2dfeb977efac326af552d8701001ca0767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072da06d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0cac0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactions")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x061a80"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasPrice")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("r")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("s")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0ca"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("to")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("v")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1c"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHeaders")), LblJSONList{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisBlockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x42"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x05f5e100"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0102030405060708"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x9c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03b6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisRLP")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000808405f5e100808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lastblockhash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xad7a4536c5842f5caab4605d78e66b40b287d8eb3777d1692a8de6a6014d854f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("network")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Byzantium"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("postState")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x3060025560206000600039602060006000f0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x29"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x29a2241af631d602"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x4b0b4b3c7fd3dd5cea1d04dcf027dea29f84acb1")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x02"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4b0b4b3c7fd3dd5cea1d04dcf027dea29f84acb1"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x60f971aa65f7e520dcb750823e2c239e61c3736b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x02"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x60f971aa65f7e520dcb750823e2c239e61c3736b"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x6fc9df08d2206eff4f4c378aeb2a1f8c570952b9")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x02"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6fc9df08d2206eff4f4c378aeb2a1f8c570952b9"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x74a77e95f3228f0b4d116d5a12e09aaf99ce54ae")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x02"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x74a77e95f3228f0b4d116d5a12e09aaf99ce54ae"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x096c3d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xf0064be0919341a45680ec0d592eaee47df671ac")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x02"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf0064be0919341a45680ec0d592eaee47df671ac"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("pre")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x3060025560206000600039602060006000f0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x28"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0f4240"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("CallRecursiveContract_d0g0v0_EIP150")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("_info")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("comment")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("filledwith")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("cpp-1.3.0+commit.6e0ce939.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lllcversion")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("source")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("src/BlockchainTestsFiller/GeneralStateTests/stInitCodeTest/CallRecursiveContract_d0g0v0Filler.json"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("sourceHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("8d529644ca8ea1a246d92e2a632eea5e3d047412caa3e9eecdabef4cddd0803e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blocks")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x05f5e100"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x05d602"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xc8417a58a1b28973bf904f682286f7f75ce10f60efdb4ed6994aa2758a432a7a"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x08537f394aad708dd1c0a270f66f815ce3dc8826a265c1610fcc11ffa4a68965"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xbf62a424947e2578"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x094fb672162ff0a137b3e30810321528a5a6cc10634df85054e4856fee261a17"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0289aea08a0161f13694a60100228ab183174df65a4dbe5c95b1193b8aa4a292"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03e8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xd4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("rlp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf90261f901f9a06c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00289aea08a0161f13694a60100228ab183174df65a4dbe5c95b1193b8aa4a292a0d4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493a0094fb672162ff0a137b3e30810321528a5a6cc10634df85054e4856fee261a17b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018405f5e1008305d6028203e880a008537f394aad708dd1c0a270f66f815ce3dc8826a265c1610fcc11ffa4a6896588bf62a424947e2578f862f860800183061a8094095e7baea6a6c7c4c2dfeb977efac326af552d8701001ca0767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072da06d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0cac0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactions")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x061a80"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasPrice")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("r")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("s")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0ca"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("to")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("v")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1c"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHeaders")), LblJSONList{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisBlockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x42"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x05f5e100"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0102030405060708"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x9c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03b6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisRLP")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000808405f5e100808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lastblockhash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xc8417a58a1b28973bf904f682286f7f75ce10f60efdb4ed6994aa2758a432a7a"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("network")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("EIP150"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("postState")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x3060025560206000600039602060006000f0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x29"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x1a4c83e1a9834cdc7e4a905ff7f0cf44aed73180")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1a4c83e1a9834cdc7e4a905ff7f0cf44aed73180"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4563918244f9d602"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x9ca74ad1a326b79d9ec9c080deb56062e975a7ee")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x9ca74ad1a326b79d9ec9c080deb56062e975a7ee"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x096c3d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xbbba3a14689a28fd82f09d4e01bc87d9654e95c3")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xbbba3a14689a28fd82f09d4e01bc87d9654e95c3"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xdfceaa082d190ab34e3c37943de35ae8fc01f300")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xdfceaa082d190ab34e3c37943de35ae8fc01f300"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xf0064be0919341a45680ec0d592eaee47df671ac")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf0064be0919341a45680ec0d592eaee47df671ac"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("pre")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x3060025560206000600039602060006000f0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x28"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0f4240"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("CallRecursiveContract_d0g0v0_EIP158")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("_info")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("comment")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("filledwith")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("cpp-1.3.0+commit.6e0ce939.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lllcversion")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("source")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("src/BlockchainTestsFiller/GeneralStateTests/stInitCodeTest/CallRecursiveContract_d0g0v0Filler.json"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("sourceHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("8d529644ca8ea1a246d92e2a632eea5e3d047412caa3e9eecdabef4cddd0803e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blocks")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x05f5e100"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x05d602"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6476515a7c61709a2b089e0f2ecb62fa09d41b1fa1ae2459b36e8bb18c545747"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x83a666d0df6cd0a56408696cad96d75cad4bf8068866a65920a29fa9f61550d0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x42f2a8307bda5084"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf09f9453977e0f663e221d4f499c3a69374a3e9114d96a24e5a5f43a66fdf8bf"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x40d37713bc5484e4042bebda7f367f88d1b7888e16428b359b4c57a2e42aa69d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03e8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xd4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("rlp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf90261f901f9a06c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa040d37713bc5484e4042bebda7f367f88d1b7888e16428b359b4c57a2e42aa69da0d4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493a0f09f9453977e0f663e221d4f499c3a69374a3e9114d96a24e5a5f43a66fdf8bfb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018405f5e1008305d6028203e880a083a666d0df6cd0a56408696cad96d75cad4bf8068866a65920a29fa9f61550d08842f2a8307bda5084f862f860800183061a8094095e7baea6a6c7c4c2dfeb977efac326af552d8701001ca0767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072da06d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0cac0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactions")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x061a80"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasPrice")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("r")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("s")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0ca"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("to")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("v")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1c"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHeaders")), LblJSONList{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisBlockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x42"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x05f5e100"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0102030405060708"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x9c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03b6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisRLP")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000808405f5e100808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lastblockhash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6476515a7c61709a2b089e0f2ecb62fa09d41b1fa1ae2459b36e8bb18c545747"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("network")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("EIP158"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("postState")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x3060025560206000600039602060006000f0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x29"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4563918244f9d602"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x4b0b4b3c7fd3dd5cea1d04dcf027dea29f84acb1")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x02"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4b0b4b3c7fd3dd5cea1d04dcf027dea29f84acb1"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x60f971aa65f7e520dcb750823e2c239e61c3736b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x02"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x60f971aa65f7e520dcb750823e2c239e61c3736b"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x6fc9df08d2206eff4f4c378aeb2a1f8c570952b9")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x02"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6fc9df08d2206eff4f4c378aeb2a1f8c570952b9"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x74a77e95f3228f0b4d116d5a12e09aaf99ce54ae")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x02"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x74a77e95f3228f0b4d116d5a12e09aaf99ce54ae"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x096c3d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xf0064be0919341a45680ec0d592eaee47df671ac")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x02"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf0064be0919341a45680ec0d592eaee47df671ac"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("pre")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x3060025560206000600039602060006000f0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x28"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0f4240"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("CallRecursiveContract_d0g0v0_Frontier")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("_info")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("comment")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("filledwith")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("cpp-1.3.0+commit.6e0ce939.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lllcversion")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("source")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("src/BlockchainTestsFiller/GeneralStateTests/stInitCodeTest/CallRecursiveContract_d0g0v0Filler.json"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("sourceHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("8d529644ca8ea1a246d92e2a632eea5e3d047412caa3e9eecdabef4cddd0803e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blocks")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x05f5e100"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x061a80"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56b01bc48896d0f148e3cbeb25d2acca2fb269f58c76259f12b6371b34cf55e0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf2a65eacc585c243da6a578441843d140dd0f249a877b0ded6144c9377d0754b"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xe33515169624bac0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x148ccddbf11792db5ae8678da605f39100dd3a61ccb30746f764c0da5f07fab6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x55f734e7ea6efcad82a24fa8642ca33400d5d51513ab41b99f6e195ded745b83"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03e8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xd4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("rlp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf90261f901f9a06c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa055f734e7ea6efcad82a24fa8642ca33400d5d51513ab41b99f6e195ded745b83a0d4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493a0148ccddbf11792db5ae8678da605f39100dd3a61ccb30746f764c0da5f07fab6b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018405f5e10083061a808203e880a0f2a65eacc585c243da6a578441843d140dd0f249a877b0ded6144c9377d0754b88e33515169624bac0f862f860800183061a8094095e7baea6a6c7c4c2dfeb977efac326af552d8701001ca0767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072da06d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0cac0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactions")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x061a80"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasPrice")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("r")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("s")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0ca"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("to")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("v")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1c"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHeaders")), LblJSONList{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisBlockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x42"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x05f5e100"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0102030405060708"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x9c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03b6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisRLP")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000808405f5e100808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lastblockhash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56b01bc48896d0f148e3cbeb25d2acca2fb269f58c76259f12b6371b34cf55e0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("network")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Frontier"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("postState")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x3060025560206000600039602060006000f0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x29"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x1a4c83e1a9834cdc7e4a905ff7f0cf44aed73180")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1a4c83e1a9834cdc7e4a905ff7f0cf44aed73180"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4563918244fa1a80"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x8e3411c91d5dd4081b4846fa2f93808f5ad19686")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x8e3411c91d5dd4081b4846fa2f93808f5ad19686"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x9ca74ad1a326b79d9ec9c080deb56062e975a7ee")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x9ca74ad1a326b79d9ec9c080deb56062e975a7ee"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0927bf"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xbbba3a14689a28fd82f09d4e01bc87d9654e95c3")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xbbba3a14689a28fd82f09d4e01bc87d9654e95c3"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xdfceaa082d190ab34e3c37943de35ae8fc01f300")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xdfceaa082d190ab34e3c37943de35ae8fc01f300"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xf0064be0919341a45680ec0d592eaee47df671ac")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf0064be0919341a45680ec0d592eaee47df671ac"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("pre")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x3060025560206000600039602060006000f0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x28"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0f4240"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("CallRecursiveContract_d0g0v0_Homestead")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("_info")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("comment")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("filledwith")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("cpp-1.3.0+commit.6e0ce939.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lllcversion")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("source")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("src/BlockchainTestsFiller/GeneralStateTests/stInitCodeTest/CallRecursiveContract_d0g0v0Filler.json"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("sourceHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("8d529644ca8ea1a246d92e2a632eea5e3d047412caa3e9eecdabef4cddd0803e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blocks")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x05f5e100"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x061a80"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4b932565479299ee989f7bc9da55d2a3982052fe528791316164e8a9aa7f56db"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x097d08e84b142edbdf167b1768103abcbaaf43d90f9ad99f8d06ab39a4444e20"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf42704efd7c8c55b"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x148ccddbf11792db5ae8678da605f39100dd3a61ccb30746f764c0da5f07fab6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x55f734e7ea6efcad82a24fa8642ca33400d5d51513ab41b99f6e195ded745b83"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03e8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xd4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("rlp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf90261f901f9a06c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa055f734e7ea6efcad82a24fa8642ca33400d5d51513ab41b99f6e195ded745b83a0d4be89a2f61318fc9713ec59a5f4dc08476e084155c765e911baf3180b66a493a0148ccddbf11792db5ae8678da605f39100dd3a61ccb30746f764c0da5f07fab6b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018405f5e10083061a808203e880a0097d08e84b142edbdf167b1768103abcbaaf43d90f9ad99f8d06ab39a4444e2088f42704efd7c8c55bf862f860800183061a8094095e7baea6a6c7c4c2dfeb977efac326af552d8701001ca0767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072da06d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0cac0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactions")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x061a80"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasPrice")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("r")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x767b4aeef3b7b464066b6622894304ddbe828ff6f7d35b4a208479b84190072d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("s")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6d23402c4c7144e986f0a9dbbb8bfc7fd8e1d75f13bb85d5cce03b46f0a8b0ca"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("to")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("v")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1c"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHeaders")), LblJSONList{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisBlockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x42"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x05f5e100"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6c44ba6d50081eedac235864ef83628b46a1a93f57c34e03e4782e7a04e3bf3f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0102030405060708"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x9c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03b6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisRLP")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c33b65c5ead10d16ec24c6d6dcdff561dae7610857513f507152c6d05e15d22a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000808405f5e100808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lastblockhash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4b932565479299ee989f7bc9da55d2a3982052fe528791316164e8a9aa7f56db"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("network")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Homestead"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("postState")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x3060025560206000600039602060006000f0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x29"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x1a4c83e1a9834cdc7e4a905ff7f0cf44aed73180")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1a4c83e1a9834cdc7e4a905ff7f0cf44aed73180"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4563918244fa1a80"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x8e3411c91d5dd4081b4846fa2f93808f5ad19686")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x8e3411c91d5dd4081b4846fa2f93808f5ad19686"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x9ca74ad1a326b79d9ec9c080deb56062e975a7ee")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x9ca74ad1a326b79d9ec9c080deb56062e975a7ee"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0927bf"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xbbba3a14689a28fd82f09d4e01bc87d9654e95c3")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xbbba3a14689a28fd82f09d4e01bc87d9654e95c3"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xdfceaa082d190ab34e3c37943de35ae8fc01f300")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xdfceaa082d190ab34e3c37943de35ae8fc01f300"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xf0064be0919341a45680ec0d592eaee47df671ac")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x02")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf0064be0919341a45680ec0d592eaee47df671ac"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("pre")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x3060025560206000600039602060006000f0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x28"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0f4240"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))))), Lbl'UndsPipe'-'-GT-Unds'{}(inj{SortKConfigVar{}, SortKItem{}}(\dv{SortKConfigVar{}}("$SCHEDULE")), inj{SortSchedule{}, SortKItem{}}(LblMERGE'Unds'EVM{}())), Lbl'UndsPipe'-'-GT-Unds'{}(inj{SortKConfigVar{}, SortKItem{}}(\dv{SortKConfigVar{}}("$MODE")), inj{SortMode{}, SortKItem{}}(LblNORMAL{}())), Lbl'UndsPipe'-'-GT-Unds'{}(inj{SortKConfigVar{}, SortKItem{}}(\dv{SortKConfigVar{}}("$CHAINID")), inj{SortInt{}, SortKItem{}}(\dv{SortInt{}}("1")))))) diff --git a/tests/interactive/log3_MaxTopic_d0g0v0.json b/tests/interactive/log3_MaxTopic_d0g0v0.json deleted file mode 100644 index c8a4fe19e9..0000000000 --- a/tests/interactive/log3_MaxTopic_d0g0v0.json +++ /dev/null @@ -1,612 +0,0 @@ -{ - "log3_MaxTopic_d0g0v0_Byzantium" : { - "_info" : { - "comment" : "", - "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", - "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", - "source" : "src/BlockchainTestsFiller/GeneralStateTests/stLogTests/log3_MaxTopic_d0g0v0Filler.json", - "sourceHash" : "5888de2660af6f5e41f6388e846b0334e17727294bd89aac46336b7afd73836e" - }, - "blocks" : [ - { - "blockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008800000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "", - "gasLimit" : "0x0f4240", - "gasUsed" : "0xc41f", - "hash" : "0xa97a5390495b6e1382be3baf36b4f1e200f862c0804411ef4c67ba64ef7d2272", - "mixHash" : "0x32fbc3b912214560992d343044f4dc996b9c33e32a942029328a23ccc41a7495", - "nonce" : "0x75c57adb6cc00cb9", - "number" : "0x01", - "parentHash" : "0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403", - "receiptTrie" : "0x5febf5fcc40f54680c21e1afecd13e726b8e5784d6e10d5b08225ef6579b6f70", - "stateRoot" : "0x4b910d6040a2a2f1b7a165747c448c6585a54c2261db1c6dfab63b28a2a614e4", - "timestamp" : "0x03e8", - "transactionsTrie" : "0x466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "rlp" : "0xf90262f901f7a0739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04b910d6040a2a2f1b7a165747c448c6585a54c2261db1c6dfab63b28a2a614e4a0466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61a05febf5fcc40f54680c21e1afecd13e726b8e5784d6e10d5b08225ef6579b6f70b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000008000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000008302000001830f424082c41f8203e880a032fbc3b912214560992d343044f4dc996b9c33e32a942029328a23ccc41a74958875c57adb6cc00cb9f865f86380018303345094095e7baea6a6c7c4c2dfeb977efac326af552d87830186a0801ba09bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926a0177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1c0", - "transactions" : [ - { - "data" : "", - "gasLimit" : "0x033450", - "gasPrice" : "0x01", - "nonce" : "0x00", - "r" : "0x9bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926", - "s" : "0x177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1", - "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", - "v" : "0x1b", - "value" : "0x0186a0" - } - ], - "uncleHeaders" : [ - ] - } - ], - "genesisBlockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "0x42", - "gasLimit" : "0x0f4240", - "gasUsed" : "0x00", - "hash" : "0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403", - "mixHash" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "nonce" : "0x0102030405060708", - "number" : "0x00", - "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "receiptTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot" : "0xc2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60", - "timestamp" : "0x03b6", - "transactionsTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "genesisRLP" : "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080830f4240808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", - "lastblockhash" : "0xa97a5390495b6e1382be3baf36b4f1e200f862c0804411ef4c67ba64ef7d2272", - "network" : "Byzantium", - "postState" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x0de0b6b3a7658689", - "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", - "nonce" : "0x00", - "storage" : { - "0x00" : "0x01" - } - }, - "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "0x0de0b6b3a7640017", - "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3", - "nonce" : "0x00", - "storage" : { - } - }, - "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "0x29a2241af62cc41f", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0de0b6b3a761b541", - "code" : "", - "nonce" : "0x01", - "storage" : { - } - } - }, - "pre" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", - "nonce" : "0x00", - "storage" : { - } - }, - "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3", - "nonce" : "0x00", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - } - } - }, - "log3_MaxTopic_d0g0v0_EIP150" : { - "_info" : { - "comment" : "", - "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", - "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", - "source" : "src/BlockchainTestsFiller/GeneralStateTests/stLogTests/log3_MaxTopic_d0g0v0Filler.json", - "sourceHash" : "5888de2660af6f5e41f6388e846b0334e17727294bd89aac46336b7afd73836e" - }, - "blocks" : [ - { - "blockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008800000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "", - "gasLimit" : "0x0f4240", - "gasUsed" : "0xc41f", - "hash" : "0xffad7774f4bcbcbebca98ac2269d07e814661db5b7e2c730e3cf3c92f63678e1", - "mixHash" : "0x580bac5520779d5c51910dc6684c9bea21d0ffeb6933a65b9e5833d5c4a6fa12", - "nonce" : "0x88873ce85cf33435", - "number" : "0x01", - "parentHash" : "0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403", - "receiptTrie" : "0xcb832bb91f2515c21c7825e0a77b1009d83e6284d1e99e009a61e349abedbd0a", - "stateRoot" : "0xaa9e5fe68e309fd69a6e9687ddd49e6f07ecd344dc2d574954e87c7a540c0c1c", - "timestamp" : "0x03e8", - "transactionsTrie" : "0x466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "rlp" : "0xf90262f901f7a0739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0aa9e5fe68e309fd69a6e9687ddd49e6f07ecd344dc2d574954e87c7a540c0c1ca0466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61a0cb832bb91f2515c21c7825e0a77b1009d83e6284d1e99e009a61e349abedbd0ab90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000008000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000008302000001830f424082c41f8203e880a0580bac5520779d5c51910dc6684c9bea21d0ffeb6933a65b9e5833d5c4a6fa128888873ce85cf33435f865f86380018303345094095e7baea6a6c7c4c2dfeb977efac326af552d87830186a0801ba09bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926a0177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1c0", - "transactions" : [ - { - "data" : "", - "gasLimit" : "0x033450", - "gasPrice" : "0x01", - "nonce" : "0x00", - "r" : "0x9bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926", - "s" : "0x177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1", - "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", - "v" : "0x1b", - "value" : "0x0186a0" - } - ], - "uncleHeaders" : [ - ] - } - ], - "genesisBlockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "0x42", - "gasLimit" : "0x0f4240", - "gasUsed" : "0x00", - "hash" : "0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403", - "mixHash" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "nonce" : "0x0102030405060708", - "number" : "0x00", - "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "receiptTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot" : "0xc2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60", - "timestamp" : "0x03b6", - "transactionsTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "genesisRLP" : "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080830f4240808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", - "lastblockhash" : "0xffad7774f4bcbcbebca98ac2269d07e814661db5b7e2c730e3cf3c92f63678e1", - "network" : "EIP150", - "postState" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x0de0b6b3a7658689", - "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", - "nonce" : "0x00", - "storage" : { - "0x00" : "0x01" - } - }, - "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "0x0de0b6b3a7640017", - "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3", - "nonce" : "0x00", - "storage" : { - } - }, - "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "0x4563918244f4c41f", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0de0b6b3a761b541", - "code" : "", - "nonce" : "0x01", - "storage" : { - } - } - }, - "pre" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", - "nonce" : "0x00", - "storage" : { - } - }, - "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3", - "nonce" : "0x00", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - } - } - }, - "log3_MaxTopic_d0g0v0_EIP158" : { - "_info" : { - "comment" : "", - "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", - "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", - "source" : "src/BlockchainTestsFiller/GeneralStateTests/stLogTests/log3_MaxTopic_d0g0v0Filler.json", - "sourceHash" : "5888de2660af6f5e41f6388e846b0334e17727294bd89aac46336b7afd73836e" - }, - "blocks" : [ - { - "blockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008800000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "", - "gasLimit" : "0x0f4240", - "gasUsed" : "0xc41f", - "hash" : "0x54794f8aa0b45e86dd40b7525c38edfc94dbb0bb9babe271d0aadd558290e9e2", - "mixHash" : "0x5f44194143747e2c6d97b4f77c482109221d5e1e41833115ce524a91acc497dd", - "nonce" : "0xca33fea77872f27c", - "number" : "0x01", - "parentHash" : "0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403", - "receiptTrie" : "0xcb832bb91f2515c21c7825e0a77b1009d83e6284d1e99e009a61e349abedbd0a", - "stateRoot" : "0xaa9e5fe68e309fd69a6e9687ddd49e6f07ecd344dc2d574954e87c7a540c0c1c", - "timestamp" : "0x03e8", - "transactionsTrie" : "0x466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "rlp" : "0xf90262f901f7a0739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0aa9e5fe68e309fd69a6e9687ddd49e6f07ecd344dc2d574954e87c7a540c0c1ca0466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61a0cb832bb91f2515c21c7825e0a77b1009d83e6284d1e99e009a61e349abedbd0ab90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000008000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000008302000001830f424082c41f8203e880a05f44194143747e2c6d97b4f77c482109221d5e1e41833115ce524a91acc497dd88ca33fea77872f27cf865f86380018303345094095e7baea6a6c7c4c2dfeb977efac326af552d87830186a0801ba09bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926a0177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1c0", - "transactions" : [ - { - "data" : "", - "gasLimit" : "0x033450", - "gasPrice" : "0x01", - "nonce" : "0x00", - "r" : "0x9bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926", - "s" : "0x177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1", - "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", - "v" : "0x1b", - "value" : "0x0186a0" - } - ], - "uncleHeaders" : [ - ] - } - ], - "genesisBlockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "0x42", - "gasLimit" : "0x0f4240", - "gasUsed" : "0x00", - "hash" : "0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403", - "mixHash" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "nonce" : "0x0102030405060708", - "number" : "0x00", - "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "receiptTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot" : "0xc2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60", - "timestamp" : "0x03b6", - "transactionsTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "genesisRLP" : "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080830f4240808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", - "lastblockhash" : "0x54794f8aa0b45e86dd40b7525c38edfc94dbb0bb9babe271d0aadd558290e9e2", - "network" : "EIP158", - "postState" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x0de0b6b3a7658689", - "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", - "nonce" : "0x00", - "storage" : { - "0x00" : "0x01" - } - }, - "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "0x0de0b6b3a7640017", - "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3", - "nonce" : "0x00", - "storage" : { - } - }, - "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "0x4563918244f4c41f", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0de0b6b3a761b541", - "code" : "", - "nonce" : "0x01", - "storage" : { - } - } - }, - "pre" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", - "nonce" : "0x00", - "storage" : { - } - }, - "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3", - "nonce" : "0x00", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - } - } - }, - "log3_MaxTopic_d0g0v0_Frontier" : { - "_info" : { - "comment" : "", - "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", - "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", - "source" : "src/BlockchainTestsFiller/GeneralStateTests/stLogTests/log3_MaxTopic_d0g0v0Filler.json", - "sourceHash" : "5888de2660af6f5e41f6388e846b0334e17727294bd89aac46336b7afd73836e" - }, - "blocks" : [ - { - "blockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008800000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "", - "gasLimit" : "0x0f4240", - "gasUsed" : "0xc18b", - "hash" : "0x01a1b78976b17b1b15dcf5115caabd917260f648137f11fc032082441f4b9d6e", - "mixHash" : "0x8af0290cbf675befa2c0b57e24baadcf2286f0da98fd04a7ec179638c56ad261", - "nonce" : "0x7a34bd4217e6481a", - "number" : "0x01", - "parentHash" : "0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403", - "receiptTrie" : "0x844cc41b7d07def0bd20dd301798754b4e469f8f232f1f5092b96f7063a02a30", - "stateRoot" : "0xe0cae5148af74d0eb6a944b13ce34f96b6a60be802c1d722924548f91843b683", - "timestamp" : "0x03e8", - "transactionsTrie" : "0x466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "rlp" : "0xf90262f901f7a0739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0cae5148af74d0eb6a944b13ce34f96b6a60be802c1d722924548f91843b683a0466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61a0844cc41b7d07def0bd20dd301798754b4e469f8f232f1f5092b96f7063a02a30b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000008000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000008302000001830f424082c18b8203e880a08af0290cbf675befa2c0b57e24baadcf2286f0da98fd04a7ec179638c56ad261887a34bd4217e6481af865f86380018303345094095e7baea6a6c7c4c2dfeb977efac326af552d87830186a0801ba09bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926a0177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1c0", - "transactions" : [ - { - "data" : "", - "gasLimit" : "0x033450", - "gasPrice" : "0x01", - "nonce" : "0x00", - "r" : "0x9bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926", - "s" : "0x177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1", - "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", - "v" : "0x1b", - "value" : "0x0186a0" - } - ], - "uncleHeaders" : [ - ] - } - ], - "genesisBlockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "0x42", - "gasLimit" : "0x0f4240", - "gasUsed" : "0x00", - "hash" : "0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403", - "mixHash" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "nonce" : "0x0102030405060708", - "number" : "0x00", - "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "receiptTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot" : "0xc2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60", - "timestamp" : "0x03b6", - "transactionsTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "genesisRLP" : "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080830f4240808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", - "lastblockhash" : "0x01a1b78976b17b1b15dcf5115caabd917260f648137f11fc032082441f4b9d6e", - "network" : "Frontier", - "postState" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x0de0b6b3a7658689", - "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", - "nonce" : "0x00", - "storage" : { - "0x00" : "0x01" - } - }, - "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "0x0de0b6b3a7640017", - "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3", - "nonce" : "0x00", - "storage" : { - } - }, - "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "0x4563918244f4c18b", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0de0b6b3a761b7d5", - "code" : "", - "nonce" : "0x01", - "storage" : { - } - } - }, - "pre" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", - "nonce" : "0x00", - "storage" : { - } - }, - "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3", - "nonce" : "0x00", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - } - } - }, - "log3_MaxTopic_d0g0v0_Homestead" : { - "_info" : { - "comment" : "", - "filledwith" : "cpp-1.3.0+commit.6e0ce939.Linux.g++", - "lllcversion" : "Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++", - "source" : "src/BlockchainTestsFiller/GeneralStateTests/stLogTests/log3_MaxTopic_d0g0v0Filler.json", - "sourceHash" : "5888de2660af6f5e41f6388e846b0334e17727294bd89aac46336b7afd73836e" - }, - "blocks" : [ - { - "blockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008800000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "", - "gasLimit" : "0x0f4240", - "gasUsed" : "0xc18b", - "hash" : "0x1fc7dbcd9a46eae708c088001b2ad19930a8179e533107c5ee4345b721613748", - "mixHash" : "0x4111fd7141bb87fa29bd567970a71b07b20f2440beb06f6e75a19f7b7ed3b250", - "nonce" : "0xad9198e459b86782", - "number" : "0x01", - "parentHash" : "0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403", - "receiptTrie" : "0x844cc41b7d07def0bd20dd301798754b4e469f8f232f1f5092b96f7063a02a30", - "stateRoot" : "0xe0cae5148af74d0eb6a944b13ce34f96b6a60be802c1d722924548f91843b683", - "timestamp" : "0x03e8", - "transactionsTrie" : "0x466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "rlp" : "0xf90262f901f7a0739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0cae5148af74d0eb6a944b13ce34f96b6a60be802c1d722924548f91843b683a0466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61a0844cc41b7d07def0bd20dd301798754b4e469f8f232f1f5092b96f7063a02a30b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000008000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000008302000001830f424082c18b8203e880a04111fd7141bb87fa29bd567970a71b07b20f2440beb06f6e75a19f7b7ed3b25088ad9198e459b86782f865f86380018303345094095e7baea6a6c7c4c2dfeb977efac326af552d87830186a0801ba09bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926a0177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1c0", - "transactions" : [ - { - "data" : "", - "gasLimit" : "0x033450", - "gasPrice" : "0x01", - "nonce" : "0x00", - "r" : "0x9bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926", - "s" : "0x177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1", - "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", - "v" : "0x1b", - "value" : "0x0186a0" - } - ], - "uncleHeaders" : [ - ] - } - ], - "genesisBlockHeader" : { - "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "coinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "difficulty" : "0x020000", - "extraData" : "0x42", - "gasLimit" : "0x0f4240", - "gasUsed" : "0x00", - "hash" : "0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403", - "mixHash" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "nonce" : "0x0102030405060708", - "number" : "0x00", - "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "receiptTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot" : "0xc2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60", - "timestamp" : "0x03b6", - "transactionsTrie" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" - }, - "genesisRLP" : "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080830f4240808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", - "lastblockhash" : "0x1fc7dbcd9a46eae708c088001b2ad19930a8179e533107c5ee4345b721613748", - "network" : "Homestead", - "postState" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x0de0b6b3a7658689", - "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", - "nonce" : "0x00", - "storage" : { - "0x00" : "0x01" - } - }, - "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "0x0de0b6b3a7640017", - "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3", - "nonce" : "0x00", - "storage" : { - } - }, - "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "0x4563918244f4c18b", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0de0b6b3a761b7d5", - "code" : "", - "nonce" : "0x01", - "storage" : { - } - } - }, - "pre" : { - "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", - "nonce" : "0x00", - "storage" : { - } - }, - "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3", - "nonce" : "0x00", - "storage" : { - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "0x0de0b6b3a7640000", - "code" : "", - "nonce" : "0x00", - "storage" : { - } - } - } - } -} \ No newline at end of file diff --git a/tests/interactive/log3_MaxTopic_d0g0v0.json.parse-expected b/tests/interactive/log3_MaxTopic_d0g0v0.json.parse-expected deleted file mode 100644 index 1b23db619c..0000000000 --- a/tests/interactive/log3_MaxTopic_d0g0v0.json.parse-expected +++ /dev/null @@ -1 +0,0 @@ -LblinitGeneratedTopCell{}(\left-assoc{}(Lbl'Unds'Map'Unds'{}(Lbl'UndsPipe'-'-GT-Unds'{}(inj{SortKConfigVar{}, SortKItem{}}(\dv{SortKConfigVar{}}("$PGM")), inj{SortJSON{}, SortKItem{}}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("log3_MaxTopic_d0g0v0_Byzantium")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("_info")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("comment")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("filledwith")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("cpp-1.3.0+commit.6e0ce939.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lllcversion")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("source")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("src/BlockchainTestsFiller/GeneralStateTests/stLogTests/log3_MaxTopic_d0g0v0Filler.json"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("sourceHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("5888de2660af6f5e41f6388e846b0334e17727294bd89aac46336b7afd73836e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blocks")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008800000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0f4240"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xc41f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xa97a5390495b6e1382be3baf36b4f1e200f862c0804411ef4c67ba64ef7d2272"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x32fbc3b912214560992d343044f4dc996b9c33e32a942029328a23ccc41a7495"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x75c57adb6cc00cb9"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x5febf5fcc40f54680c21e1afecd13e726b8e5784d6e10d5b08225ef6579b6f70"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4b910d6040a2a2f1b7a165747c448c6585a54c2261db1c6dfab63b28a2a614e4"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03e8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("rlp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf90262f901f7a0739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04b910d6040a2a2f1b7a165747c448c6585a54c2261db1c6dfab63b28a2a614e4a0466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61a05febf5fcc40f54680c21e1afecd13e726b8e5784d6e10d5b08225ef6579b6f70b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000008000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000008302000001830f424082c41f8203e880a032fbc3b912214560992d343044f4dc996b9c33e32a942029328a23ccc41a74958875c57adb6cc00cb9f865f86380018303345094095e7baea6a6c7c4c2dfeb977efac326af552d87830186a0801ba09bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926a0177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1c0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactions")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x033450"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasPrice")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("r")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x9bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("s")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("to")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("v")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1b"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0186a0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHeaders")), LblJSONList{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisBlockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x42"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0f4240"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0102030405060708"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xc2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03b6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisRLP")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080830f4240808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lastblockhash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xa97a5390495b6e1382be3baf36b4f1e200f862c0804411ef4c67ba64ef7d2272"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("network")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Byzantium"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("postState")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7658689"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x00")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640017"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x29a2241af62cc41f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a761b541"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("pre")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("log3_MaxTopic_d0g0v0_EIP150")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("_info")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("comment")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("filledwith")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("cpp-1.3.0+commit.6e0ce939.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lllcversion")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("source")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("src/BlockchainTestsFiller/GeneralStateTests/stLogTests/log3_MaxTopic_d0g0v0Filler.json"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("sourceHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("5888de2660af6f5e41f6388e846b0334e17727294bd89aac46336b7afd73836e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blocks")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008800000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0f4240"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xc41f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xffad7774f4bcbcbebca98ac2269d07e814661db5b7e2c730e3cf3c92f63678e1"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x580bac5520779d5c51910dc6684c9bea21d0ffeb6933a65b9e5833d5c4a6fa12"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x88873ce85cf33435"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xcb832bb91f2515c21c7825e0a77b1009d83e6284d1e99e009a61e349abedbd0a"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xaa9e5fe68e309fd69a6e9687ddd49e6f07ecd344dc2d574954e87c7a540c0c1c"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03e8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("rlp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf90262f901f7a0739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0aa9e5fe68e309fd69a6e9687ddd49e6f07ecd344dc2d574954e87c7a540c0c1ca0466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61a0cb832bb91f2515c21c7825e0a77b1009d83e6284d1e99e009a61e349abedbd0ab90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000008000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000008302000001830f424082c41f8203e880a0580bac5520779d5c51910dc6684c9bea21d0ffeb6933a65b9e5833d5c4a6fa128888873ce85cf33435f865f86380018303345094095e7baea6a6c7c4c2dfeb977efac326af552d87830186a0801ba09bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926a0177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1c0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactions")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x033450"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasPrice")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("r")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x9bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("s")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("to")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("v")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1b"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0186a0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHeaders")), LblJSONList{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisBlockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x42"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0f4240"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0102030405060708"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xc2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03b6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisRLP")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080830f4240808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lastblockhash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xffad7774f4bcbcbebca98ac2269d07e814661db5b7e2c730e3cf3c92f63678e1"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("network")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("EIP150"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("postState")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7658689"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x00")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640017"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4563918244f4c41f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a761b541"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("pre")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("log3_MaxTopic_d0g0v0_EIP158")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("_info")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("comment")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("filledwith")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("cpp-1.3.0+commit.6e0ce939.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lllcversion")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("source")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("src/BlockchainTestsFiller/GeneralStateTests/stLogTests/log3_MaxTopic_d0g0v0Filler.json"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("sourceHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("5888de2660af6f5e41f6388e846b0334e17727294bd89aac46336b7afd73836e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blocks")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008800000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0f4240"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xc41f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x54794f8aa0b45e86dd40b7525c38edfc94dbb0bb9babe271d0aadd558290e9e2"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x5f44194143747e2c6d97b4f77c482109221d5e1e41833115ce524a91acc497dd"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xca33fea77872f27c"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xcb832bb91f2515c21c7825e0a77b1009d83e6284d1e99e009a61e349abedbd0a"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xaa9e5fe68e309fd69a6e9687ddd49e6f07ecd344dc2d574954e87c7a540c0c1c"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03e8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("rlp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf90262f901f7a0739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0aa9e5fe68e309fd69a6e9687ddd49e6f07ecd344dc2d574954e87c7a540c0c1ca0466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61a0cb832bb91f2515c21c7825e0a77b1009d83e6284d1e99e009a61e349abedbd0ab90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000008000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000008302000001830f424082c41f8203e880a05f44194143747e2c6d97b4f77c482109221d5e1e41833115ce524a91acc497dd88ca33fea77872f27cf865f86380018303345094095e7baea6a6c7c4c2dfeb977efac326af552d87830186a0801ba09bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926a0177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1c0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactions")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x033450"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasPrice")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("r")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x9bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("s")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("to")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("v")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1b"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0186a0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHeaders")), LblJSONList{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisBlockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x42"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0f4240"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0102030405060708"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xc2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03b6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisRLP")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080830f4240808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lastblockhash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x54794f8aa0b45e86dd40b7525c38edfc94dbb0bb9babe271d0aadd558290e9e2"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("network")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("EIP158"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("postState")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7658689"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x00")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640017"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4563918244f4c41f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a761b541"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("pre")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("log3_MaxTopic_d0g0v0_Frontier")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("_info")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("comment")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("filledwith")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("cpp-1.3.0+commit.6e0ce939.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lllcversion")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("source")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("src/BlockchainTestsFiller/GeneralStateTests/stLogTests/log3_MaxTopic_d0g0v0Filler.json"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("sourceHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("5888de2660af6f5e41f6388e846b0334e17727294bd89aac46336b7afd73836e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blocks")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008800000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0f4240"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xc18b"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01a1b78976b17b1b15dcf5115caabd917260f648137f11fc032082441f4b9d6e"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x8af0290cbf675befa2c0b57e24baadcf2286f0da98fd04a7ec179638c56ad261"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7a34bd4217e6481a"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x844cc41b7d07def0bd20dd301798754b4e469f8f232f1f5092b96f7063a02a30"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xe0cae5148af74d0eb6a944b13ce34f96b6a60be802c1d722924548f91843b683"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03e8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("rlp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf90262f901f7a0739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0cae5148af74d0eb6a944b13ce34f96b6a60be802c1d722924548f91843b683a0466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61a0844cc41b7d07def0bd20dd301798754b4e469f8f232f1f5092b96f7063a02a30b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000008000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000008302000001830f424082c18b8203e880a08af0290cbf675befa2c0b57e24baadcf2286f0da98fd04a7ec179638c56ad261887a34bd4217e6481af865f86380018303345094095e7baea6a6c7c4c2dfeb977efac326af552d87830186a0801ba09bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926a0177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1c0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactions")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x033450"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasPrice")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("r")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x9bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("s")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("to")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("v")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1b"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0186a0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHeaders")), LblJSONList{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisBlockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x42"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0f4240"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0102030405060708"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xc2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03b6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisRLP")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080830f4240808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lastblockhash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01a1b78976b17b1b15dcf5115caabd917260f648137f11fc032082441f4b9d6e"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("network")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Frontier"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("postState")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7658689"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x00")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640017"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4563918244f4c18b"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a761b7d5"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("pre")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("log3_MaxTopic_d0g0v0_Homestead")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("_info")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("comment")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("filledwith")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("cpp-1.3.0+commit.6e0ce939.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lllcversion")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Version: 0.4.18-develop.2017.9.25+commit.a72237f2.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("source")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("src/BlockchainTestsFiller/GeneralStateTests/stLogTests/log3_MaxTopic_d0g0v0Filler.json"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("sourceHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("5888de2660af6f5e41f6388e846b0334e17727294bd89aac46336b7afd73836e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blocks")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("blockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008800000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0f4240"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xc18b"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1fc7dbcd9a46eae708c088001b2ad19930a8179e533107c5ee4345b721613748"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4111fd7141bb87fa29bd567970a71b07b20f2440beb06f6e75a19f7b7ed3b250"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xad9198e459b86782"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x844cc41b7d07def0bd20dd301798754b4e469f8f232f1f5092b96f7063a02a30"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xe0cae5148af74d0eb6a944b13ce34f96b6a60be802c1d722924548f91843b683"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03e8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("rlp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf90262f901f7a0739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0cae5148af74d0eb6a944b13ce34f96b6a60be802c1d722924548f91843b683a0466f1520dd2fb37a6abe5419439e4bc5fd5146708535d1984cde813519a28e61a0844cc41b7d07def0bd20dd301798754b4e469f8f232f1f5092b96f7063a02a30b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000008000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000008302000001830f424082c18b8203e880a04111fd7141bb87fa29bd567970a71b07b20f2440beb06f6e75a19f7b7ed3b25088ad9198e459b86782f865f86380018303345094095e7baea6a6c7c4c2dfeb977efac326af552d87830186a0801ba09bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926a0177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1c0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactions")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x033450"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasPrice")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("r")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x9bae3efe7d9d16200582021c8f7c93c143c3fb1dd6be8a83213f3a5f1ad03926"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("s")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x177d82a90f883a19de8c6d62ce79c753ae4ea076de047ca19a017879a1ce8bc1"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("to")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("v")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1b"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0186a0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHeaders")), LblJSONList{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisBlockHeader")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("bloom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("coinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("difficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("extraData")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x42"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0f4240"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasUsed")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x739bdad18fdb2c6ce2ccb72b2e82b72fb426bf5e5336530b56010081594bc403"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("mixHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0102030405060708"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("number")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("parentHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000000000000000000000000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("receiptTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("stateRoot")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xc2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("timestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03b6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transactionsTrie")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("uncleHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("genesisRLP")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2441751ffff1a2a518d82f53bb71288841beb89898fbe9ab74b5f12a5810b60a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080830f4240808203b642a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lastblockhash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1fc7dbcd9a46eae708c088001b2ad19930a8179e533107c5ee4345b721613748"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("network")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Homestead"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("postState")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7658689"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x00")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640017"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4563918244f4c18b"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a761b7d5"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("pre")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x095e7baea6a6c7c4c2dfeb977efac326af552d87")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0de0b6b3a7640000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}(""))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))))), Lbl'UndsPipe'-'-GT-Unds'{}(inj{SortKConfigVar{}, SortKItem{}}(\dv{SortKConfigVar{}}("$SCHEDULE")), inj{SortSchedule{}, SortKItem{}}(LblMERGE'Unds'EVM{}())), Lbl'UndsPipe'-'-GT-Unds'{}(inj{SortKConfigVar{}, SortKItem{}}(\dv{SortKConfigVar{}}("$MODE")), inj{SortMode{}, SortKItem{}}(LblNORMAL{}())), Lbl'UndsPipe'-'-GT-Unds'{}(inj{SortKConfigVar{}, SortKItem{}}(\dv{SortKConfigVar{}}("$CHAINID")), inj{SortInt{}, SortKItem{}}(\dv{SortInt{}}("1")))))) diff --git a/tests/interactive/search/branching-invalid.evm b/tests/interactive/search/branching-invalid.evm deleted file mode 100644 index 0fb07f4af4..0000000000 --- a/tests/interactive/search/branching-invalid.evm +++ /dev/null @@ -1,13 +0,0 @@ -load "exec" : { "gas" : 10000 - ,"code" : PUSH(1, 3) ; PUSH(1, 4) ; ADD - ; PUSH(1, 8) ; EQ - ; PUSH(1, 12) ; JUMPI // jumpi("end") - ; INVALID - ; JUMPDEST // jumpdest("end") - ; STOP - ; .OpCodes - } - -start - -.EthereumSimulation diff --git a/tests/interactive/search/branching-invalid.evm.search-expected b/tests/interactive/search/branching-invalid.evm.search-expected deleted file mode 100644 index 17a1d4510e..0000000000 --- a/tests/interactive/search/branching-invalid.evm.search-expected +++ /dev/null @@ -1 +0,0 @@ -#Top diff --git a/tests/interactive/search/branching-no-invalid.evm b/tests/interactive/search/branching-no-invalid.evm deleted file mode 100644 index 933e777628..0000000000 --- a/tests/interactive/search/branching-no-invalid.evm +++ /dev/null @@ -1,13 +0,0 @@ -load "exec" : { "gas" : 10000 - ,"code" : PUSH(1, 3) ; PUSH(1, 4) ; ADD - ; PUSH(1, 7) ; EQ - ; PUSH(1, 13) ; JUMPI // jumpi("end") - ; INVALID - ; JUMPDEST // jumpdest("end") - ; STOP - ; .OpCodes - } - -start - -.EthereumSimulation diff --git a/tests/interactive/search/branching-no-invalid.evm.search-expected b/tests/interactive/search/branching-no-invalid.evm.search-expected deleted file mode 100644 index 88b8f237d0..0000000000 --- a/tests/interactive/search/branching-no-invalid.evm.search-expected +++ /dev/null @@ -1 +0,0 @@ -#Bottom diff --git a/tests/interactive/search/straight-line-no-invalid.evm b/tests/interactive/search/straight-line-no-invalid.evm deleted file mode 100644 index aaacee0dd0..0000000000 --- a/tests/interactive/search/straight-line-no-invalid.evm +++ /dev/null @@ -1,7 +0,0 @@ -load "exec" : { "gas" : 10000 - ,"code" : PUSH(32, 3) ; PUSH(32, 4) ; ADD ; .OpCodes - } - -start - -.EthereumSimulation diff --git a/tests/interactive/search/straight-line-no-invalid.evm.search-expected b/tests/interactive/search/straight-line-no-invalid.evm.search-expected deleted file mode 100644 index 88b8f237d0..0000000000 --- a/tests/interactive/search/straight-line-no-invalid.evm.search-expected +++ /dev/null @@ -1 +0,0 @@ -#Bottom diff --git a/tests/interactive/search/straight-line.evm b/tests/interactive/search/straight-line.evm deleted file mode 100644 index cf54bba2f3..0000000000 --- a/tests/interactive/search/straight-line.evm +++ /dev/null @@ -1,7 +0,0 @@ -load "exec" : { "gas" : 10000 - ,"code" : PUSH(32, 3) ; PUSH(32, 4) ; ADD ; INVALID ; .OpCodes - } - -start - -.EthereumSimulation diff --git a/tests/interactive/search/straight-line.evm.search-expected b/tests/interactive/search/straight-line.evm.search-expected deleted file mode 100644 index 17a1d4510e..0000000000 --- a/tests/interactive/search/straight-line.evm.search-expected +++ /dev/null @@ -1 +0,0 @@ -#Top diff --git a/tests/interactive/sumTo10.evm b/tests/interactive/sumTo10.evm deleted file mode 100644 index 0059cf6e18..0000000000 --- a/tests/interactive/sumTo10.evm +++ /dev/null @@ -1,35 +0,0 @@ -mkAcct 7 - -load "account" : { 7 : { "balance" : 1000000000 - , "nonce" : 1 - , "code" : .Bytes - , "storage" : .Map - } - } - -load "exec" : { "address" : 7 - , "gas" : 100000 - , "code" : PUSH(32, 0) ; PUSH(32, 0) ; MSTORE - ; PUSH(32, 10) ; PUSH(32, 32) ; MSTORE - ; JUMPDEST - ; PUSH(32, 32) ; MLOAD ; ISZERO ; PUSH(32, 411) ; JUMPI - ; PUSH(32, 32) ; MLOAD ; DUP(1) ; PUSH(32, 0) ; MLOAD ; ADD - ; PUSH(32, 0) ; MSTORE ; PUSH(32, 1) ; SWAP(1) ; SUB - ; PUSH(32, 32) ; MSTORE - ; PUSH(32, 134) ; JUMP - ; JUMPDEST - ; PUSH(32, 0) ; MLOAD ; PUSH(32, 0) ; SSTORE - ; .OpCodes - } - -start - -check "account" : { 7 : { "storage" : { "0x00" : "0x37" } } } - -failure "Interactive sumTo10 test" - -success - -clear - -.EthereumSimulation diff --git a/tests/interactive/sumTo10.evm.parse-expected b/tests/interactive/sumTo10.evm.parse-expected deleted file mode 100644 index 8fb6d54cbd..0000000000 --- a/tests/interactive/sumTo10.evm.parse-expected +++ /dev/null @@ -1 +0,0 @@ -Lbl'UndsUndsUnds'ETHEREUM-SIMULATION'Unds'EthereumSimulation'Unds'EthereumCommand'Unds'EthereumSimulation{}(LblmkAcct'UndsUnds'STATE-UTILS'Unds'EthereumCommand'Unds'Int{}(\dv{SortInt{}}("7")),Lbl'UndsUndsUnds'ETHEREUM-SIMULATION'Unds'EthereumSimulation'Unds'EthereumCommand'Unds'EthereumSimulation{}(Lblload'UndsUnds'STATE-UTILS'Unds'EthereumCommand'Unds'JSON{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("account")),LblJSONObject{}(LblJSONs{}(LblJSONEntry{}(inj{SortInt{}, SortJSONKey{}}(\dv{SortInt{}}("7")),LblJSONObject{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")),inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("1000000000"))),LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")),inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("1"))),LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")),inj{SortBytes{}, SortJSON{}}(Lbl'Stop'Bytes'Unds'BYTES-HOOKED'Unds'Bytes{}())),LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")),inj{SortMap{}, SortJSON{}}(Lbl'Stop'Map{}())),Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))))),Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))),Lbl'UndsUndsUnds'ETHEREUM-SIMULATION'Unds'EthereumSimulation'Unds'EthereumCommand'Unds'EthereumSimulation{}(Lblload'UndsUnds'STATE-UTILS'Unds'EthereumCommand'Unds'JSON{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("exec")),LblJSONObject{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("address")),inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("7"))),LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")),inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("100000"))),LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")),inj{SortOpCodes{}, SortJSON{}}(Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(LblPUSH'LParUndsCommUndsRParUnds'EVM-ASSEMBLY'Unds'OpCode'Unds'Int'Unds'Int{}(\dv{SortInt{}}("32"),\dv{SortInt{}}("0")),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(LblPUSH'LParUndsCommUndsRParUnds'EVM-ASSEMBLY'Unds'OpCode'Unds'Int'Unds'Int{}(\dv{SortInt{}}("32"),\dv{SortInt{}}("0")),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortBinStackOp{}, SortOpCode{}}(LblMSTORE'Unds'EVM'Unds'BinStackOp{}()),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(LblPUSH'LParUndsCommUndsRParUnds'EVM-ASSEMBLY'Unds'OpCode'Unds'Int'Unds'Int{}(\dv{SortInt{}}("32"),\dv{SortInt{}}("10")),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(LblPUSH'LParUndsCommUndsRParUnds'EVM-ASSEMBLY'Unds'OpCode'Unds'Int'Unds'Int{}(\dv{SortInt{}}("32"),\dv{SortInt{}}("32")),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortBinStackOp{}, SortOpCode{}}(LblMSTORE'Unds'EVM'Unds'BinStackOp{}()),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortNullStackOp{}, SortOpCode{}}(LblJUMPDEST'Unds'EVM'Unds'NullStackOp{}()),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(LblPUSH'LParUndsCommUndsRParUnds'EVM-ASSEMBLY'Unds'OpCode'Unds'Int'Unds'Int{}(\dv{SortInt{}}("32"),\dv{SortInt{}}("32")),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortUnStackOp{}, SortOpCode{}}(LblMLOAD'Unds'EVM'Unds'UnStackOp{}()),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortUnStackOp{}, SortOpCode{}}(LblISZERO'Unds'EVM'Unds'UnStackOp{}()),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(LblPUSH'LParUndsCommUndsRParUnds'EVM-ASSEMBLY'Unds'OpCode'Unds'Int'Unds'Int{}(\dv{SortInt{}}("32"),\dv{SortInt{}}("411")),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortBinStackOp{}, SortOpCode{}}(LblJUMPI'Unds'EVM'Unds'BinStackOp{}()),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(LblPUSH'LParUndsCommUndsRParUnds'EVM-ASSEMBLY'Unds'OpCode'Unds'Int'Unds'Int{}(\dv{SortInt{}}("32"),\dv{SortInt{}}("32")),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortUnStackOp{}, SortOpCode{}}(LblMLOAD'Unds'EVM'Unds'UnStackOp{}()),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortStackOp{}, SortOpCode{}}(LblDUP'LParUndsRParUnds'EVM'Unds'StackOp'Unds'Int{}(\dv{SortInt{}}("1"))),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(LblPUSH'LParUndsCommUndsRParUnds'EVM-ASSEMBLY'Unds'OpCode'Unds'Int'Unds'Int{}(\dv{SortInt{}}("32"),\dv{SortInt{}}("0")),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortUnStackOp{}, SortOpCode{}}(LblMLOAD'Unds'EVM'Unds'UnStackOp{}()),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortBinStackOp{}, SortOpCode{}}(LblADD'Unds'EVM'Unds'BinStackOp{}()),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(LblPUSH'LParUndsCommUndsRParUnds'EVM-ASSEMBLY'Unds'OpCode'Unds'Int'Unds'Int{}(\dv{SortInt{}}("32"),\dv{SortInt{}}("0")),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortBinStackOp{}, SortOpCode{}}(LblMSTORE'Unds'EVM'Unds'BinStackOp{}()),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(LblPUSH'LParUndsCommUndsRParUnds'EVM-ASSEMBLY'Unds'OpCode'Unds'Int'Unds'Int{}(\dv{SortInt{}}("32"),\dv{SortInt{}}("1")),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortStackOp{}, SortOpCode{}}(LblSWAP'LParUndsRParUnds'EVM'Unds'StackOp'Unds'Int{}(\dv{SortInt{}}("1"))),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortBinStackOp{}, SortOpCode{}}(LblSUB'Unds'EVM'Unds'BinStackOp{}()),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(LblPUSH'LParUndsCommUndsRParUnds'EVM-ASSEMBLY'Unds'OpCode'Unds'Int'Unds'Int{}(\dv{SortInt{}}("32"),\dv{SortInt{}}("32")),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortBinStackOp{}, SortOpCode{}}(LblMSTORE'Unds'EVM'Unds'BinStackOp{}()),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(LblPUSH'LParUndsCommUndsRParUnds'EVM-ASSEMBLY'Unds'OpCode'Unds'Int'Unds'Int{}(\dv{SortInt{}}("32"),\dv{SortInt{}}("134")),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortUnStackOp{}, SortOpCode{}}(LblJUMP'Unds'EVM'Unds'UnStackOp{}()),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortNullStackOp{}, SortOpCode{}}(LblJUMPDEST'Unds'EVM'Unds'NullStackOp{}()),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(LblPUSH'LParUndsCommUndsRParUnds'EVM-ASSEMBLY'Unds'OpCode'Unds'Int'Unds'Int{}(\dv{SortInt{}}("32"),\dv{SortInt{}}("0")),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortUnStackOp{}, SortOpCode{}}(LblMLOAD'Unds'EVM'Unds'UnStackOp{}()),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(LblPUSH'LParUndsCommUndsRParUnds'EVM-ASSEMBLY'Unds'OpCode'Unds'Int'Unds'Int{}(\dv{SortInt{}}("32"),\dv{SortInt{}}("0")),Lbl'UndsSClnUndsUnds'EVM-ASSEMBLY'Unds'OpCodes'Unds'OpCode'Unds'OpCodes{}(inj{SortBinStackOp{}, SortOpCode{}}(LblSSTORE'Unds'EVM'Unds'BinStackOp{}()),Lbl'Stop'OpCodes'Unds'EVM-ASSEMBLY'Unds'OpCodes{}())))))))))))))))))))))))))))))))))),Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))))),Lbl'UndsUndsUnds'ETHEREUM-SIMULATION'Unds'EthereumSimulation'Unds'EthereumCommand'Unds'EthereumSimulation{}(Lblstart'Unds'ETHEREUM-SIMULATION'Unds'EthereumCommand{}(),Lbl'UndsUndsUnds'ETHEREUM-SIMULATION'Unds'EthereumSimulation'Unds'EthereumCommand'Unds'EthereumSimulation{}(Lblcheck'UndsUnds'ETHEREUM-SIMULATION'Unds'EthereumCommand'Unds'JSON{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("account")),LblJSONObject{}(LblJSONs{}(LblJSONEntry{}(inj{SortInt{}, SortJSONKey{}}(\dv{SortInt{}}("7")),LblJSONObject{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")),LblJSONObject{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x00")),inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x37"))),Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))),Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))),Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))),Lbl'UndsUndsUnds'ETHEREUM-SIMULATION'Unds'EthereumSimulation'Unds'EthereumCommand'Unds'EthereumSimulation{}(Lblfailure'UndsUnds'ETHEREUM-SIMULATION'Unds'EthereumCommand'Unds'String{}(\dv{SortString{}}("Interactive sumTo10 test")),Lbl'UndsUndsUnds'ETHEREUM-SIMULATION'Unds'EthereumSimulation'Unds'EthereumCommand'Unds'EthereumSimulation{}(Lblsuccess'Unds'ETHEREUM-SIMULATION'Unds'EthereumCommand{}(),Lbl'UndsUndsUnds'ETHEREUM-SIMULATION'Unds'EthereumSimulation'Unds'EthereumCommand'Unds'EthereumSimulation{}(Lblclear'Unds'STATE-UTILS'Unds'EthereumCommand{}(),Lbl'Stop'EthereumSimulation'Unds'ETHEREUM-SIMULATION'Unds'EthereumSimulation{}())))))))) \ No newline at end of file diff --git a/tests/interactive/vmLogTest/log3.gst-to-kore.expected b/tests/interactive/vmLogTest/log3.gst-to-kore.expected deleted file mode 100644 index fe619ac3f0..0000000000 --- a/tests/interactive/vmLogTest/log3.gst-to-kore.expected +++ /dev/null @@ -1 +0,0 @@ -LblinitGeneratedTopCell{}(\left-assoc{}(Lbl'Unds'Map'Unds'{}(Lbl'UndsPipe'-'-GT-Unds'{}(inj{SortKConfigVar{}, SortKItem{}}(\dv{SortKConfigVar{}}("$PGM")), inj{SortJSON{}, SortKItem{}}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("log3")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("_info")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("comment")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Ori Pomerantz qbzzt1@gmail.com"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("filling-rpc-server")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("evm version 1.10.21-unstable-692bfd1b-20220630"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("filling-tool-version")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("retesteth-0.2.2-testinfo+commit.1e11e5ce.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("generatedTestHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("5dc2ed9151e61d6237418e9dba88399df8a80ef9fa1c411d46e46734d85aa2c8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("labels")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("emptyMem"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("1")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("memStartTooHigh"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("2")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("memSizeTooHigh"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("3")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("memSizeZero"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("4")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("nonEmptyMem"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("5")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("log_0_1"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("6")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("log_31_1"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("7")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("caller"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("8")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("maxTopic"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("9")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("pc"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("lllcversion")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Version: 0.5.14-develop.2022.6.6+commit.245805fe.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("solidity")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("Version: 0.8.5+commit.a4f2e591.Linux.g++"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("source")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("src/GeneralStateTestsFiller/VMTests/vmLogTest/log3Filler.yml"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("sourceHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("a9f85921eddbb5cb40c25866a6ddbeba848b97e212494ba81316c45a78e052a9"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("env")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("currentBaseFee")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0a"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("currentCoinbase")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("currentDifficulty")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("currentGasLimit")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x05f5e100"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("currentNumber")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("currentRandom")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000000000000000000000000020000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("currentTimestamp")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x03e8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("previousHash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("post")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("Berlin")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x42396b9989af3c53fbcb0db0534af563a7f1cdcf02985a801ec5da5bd98d7550"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x63b3449343f05e4ba767546497869b85a2a473d42121a021e7590d7017754ff3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000001ba0e8ff56322287185f6afd3422a825b47bf5c1a4ccf0dc0389cdc03f7c1c32b7eaa0776b02f9f5773238d3ff36b74a123f409cd6420908d7855bbe4c8ff63e00d698"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf9a2c0630236a840258d2a82ca1f81bd403e27a77bc1bab917763a13464831cd"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x63b3449343f05e4ba767546497869b85a2a473d42121a021e7590d7017754ff3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000031ba0f06eb219c5dba98711a9a2678339f64d172bfac289a5c43a0018d3917be8dc2aa0147bd7a6ee30217e63cbddc28b0e72f115da754d8916b87992aa27ed00eb105e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xa4461522a233f9d30e15bec3e894263cd79ad677cce29d0a775992c9db929807"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("4"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x962ab2b5876962ab2c27d260485a0a1ab1a930ea9143d99f3ba2b4962b6b39e0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000041ba0c148a101aa54703ff0e949441bdba90b1972a16c338f7f9a24b07f0313cd49d6a028cb82229b8a57e2048761d6fa5060c5b459f000d4e218de1372c1df9cfa171e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7f8a2902be970ec7b730f1e07e5aee950ef5572055a0b3d3256cb330ddd832f4"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("5"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xd98655f5c4759c56c8ba01eb9c3fcde34b26c4445714859bbd06d18b0c398322"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000051ca09a1ce3fdc8469be9bbe660a07c169cf5b6b70fe408cc1395057bbd4cdc2c8557a0560e8c0503c4364efd017933749f22e1d9ad4eff4580d5463df54b9bff8dca31"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7f8a2902be970ec7b730f1e07e5aee950ef5572055a0b3d3256cb330ddd832f4"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x442c5686dfaa9f7734ed17a45d5f91a8057b8ea587a342b8f8eba3d267874edb"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000061ca04f7114759d69db050a87677a2dff3d6f9399f0b66da593b2cc50748708377f6fa042f32766ce38ec3cee0d2c2dbc4d14b9cbf94e4af75b0584a04c933457bb83bb"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x60d87b4e4e4aa494d3c9f34f2c8e4740afa2fac829e11649fdfa0db6a4a83d91"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("7"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7892c989716799974e37f634fd1e5415875819865e33cb54062aab2f75cd2294"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000071ba0e77cc0b2a4af0e43bc5732d6747afb3ddcf781f7277650aeef15b9caba68c91aa04af80af420b77c3f4ad457f1c6535be5d46993e2c8987250d28d088b3a11bb4a"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xa16961c8dafa0bf94c37ec403ce587c7ecda8423c54ff93d1ae96757e9c6359a"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xa20826cf41f70c356832c534dd73f631c498760da2a0584e2844480b70b77e6d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf884800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000081ca057f87767c304f58d8c351529457f9fbe53d04ba7f9f0ae7f2bac7a2d6dc59bc09fd8de811557a1287c01a1e09edeb750adba79cef13ebeb951d030ff29e63f39"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x90e5972cf569d04de4fb4ad93c6c4b7e3048cf6c3170c810d9f5f3313d7408d5"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("9"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1b43586e1432a3ed43253dd44fd5e8fb20d65a9aa720b17f41da928266fd155e"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000091ba09cffdf14ebc27c6c36a8cc9e679e32251165b52fb39e7ccc52cbc42f7157c301a032f0bebe1ae01ef86e26c0194bc26e9ed9e6bb7dad277927a92def3d0badbe74"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x33d95667ec3167b5617a3d7e2b279b30aa9ce4f28c88ed7a23f74744c01bbc65"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("1"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000011ba02c5e81a024dd0f6fb773c8787fa46ab5eb55cb73df83562e6ddbe9106a3df7f6a029437b9a23e45bbfce086f2ddaa98b1e9e6914d7e58e2c5a128310042b332f89"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x33d95667ec3167b5617a3d7e2b279b30aa9ce4f28c88ed7a23f74744c01bbc65"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("2"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000021ba0fc37ad4eb0633eb18f2b7867bacbe994a2ffcbb04a71e394e6e76041f6ce216fa03b1b415a5c386d8de9e16be9fdc188234b80a0dec99922d03c240f2e463053e3"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("Istanbul")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6c54e333a6206a62906822ea0e5ac6917a18b4a06c5deb81f155faea49860e13"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x63b3449343f05e4ba767546497869b85a2a473d42121a021e7590d7017754ff3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000001ba0e8ff56322287185f6afd3422a825b47bf5c1a4ccf0dc0389cdc03f7c1c32b7eaa0776b02f9f5773238d3ff36b74a123f409cd6420908d7855bbe4c8ff63e00d698"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xfaedc25f6076674bdff3aeae4d470af97ebc3b0280786c39036a50cd78d9921a"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x63b3449343f05e4ba767546497869b85a2a473d42121a021e7590d7017754ff3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000031ba0f06eb219c5dba98711a9a2678339f64d172bfac289a5c43a0018d3917be8dc2aa0147bd7a6ee30217e63cbddc28b0e72f115da754d8916b87992aa27ed00eb105e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0af3c8f6bcc58ef358f4fe91b39b435a9d1a9c319a0f3c569d7f842c2a0a9c22"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("4"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x962ab2b5876962ab2c27d260485a0a1ab1a930ea9143d99f3ba2b4962b6b39e0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000041ba0c148a101aa54703ff0e949441bdba90b1972a16c338f7f9a24b07f0313cd49d6a028cb82229b8a57e2048761d6fa5060c5b459f000d4e218de1372c1df9cfa171e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x29c6bd6b3334d3d307e8081260607826a0e43b1c4efb4ae77200854634e6946e"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("5"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xd98655f5c4759c56c8ba01eb9c3fcde34b26c4445714859bbd06d18b0c398322"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000051ca09a1ce3fdc8469be9bbe660a07c169cf5b6b70fe408cc1395057bbd4cdc2c8557a0560e8c0503c4364efd017933749f22e1d9ad4eff4580d5463df54b9bff8dca31"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x29c6bd6b3334d3d307e8081260607826a0e43b1c4efb4ae77200854634e6946e"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x442c5686dfaa9f7734ed17a45d5f91a8057b8ea587a342b8f8eba3d267874edb"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000061ca04f7114759d69db050a87677a2dff3d6f9399f0b66da593b2cc50748708377f6fa042f32766ce38ec3cee0d2c2dbc4d14b9cbf94e4af75b0584a04c933457bb83bb"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x5aaca2155df07ac5d57bf7586e93ede59303956d47901c2c9440f0b468e32cbc"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("7"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7892c989716799974e37f634fd1e5415875819865e33cb54062aab2f75cd2294"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000071ba0e77cc0b2a4af0e43bc5732d6747afb3ddcf781f7277650aeef15b9caba68c91aa04af80af420b77c3f4ad457f1c6535be5d46993e2c8987250d28d088b3a11bb4a"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x93b9464dd6906ea7921615487695c01a447956387b3eaaa1be102e407546a5e8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xa20826cf41f70c356832c534dd73f631c498760da2a0584e2844480b70b77e6d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf884800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000081ca057f87767c304f58d8c351529457f9fbe53d04ba7f9f0ae7f2bac7a2d6dc59bc09fd8de811557a1287c01a1e09edeb750adba79cef13ebeb951d030ff29e63f39"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xeb920a13be734ff6b152b2f099bd1f6f3ed7f29cf267d966184bab5b5cb5dabe"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("9"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1b43586e1432a3ed43253dd44fd5e8fb20d65a9aa720b17f41da928266fd155e"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000091ba09cffdf14ebc27c6c36a8cc9e679e32251165b52fb39e7ccc52cbc42f7157c301a032f0bebe1ae01ef86e26c0194bc26e9ed9e6bb7dad277927a92def3d0badbe74"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x3f729d02a1c9e815e6974b91c882dbe525ed0a53a4efdbc74620e35bde99773f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("1"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000011ba02c5e81a024dd0f6fb773c8787fa46ab5eb55cb73df83562e6ddbe9106a3df7f6a029437b9a23e45bbfce086f2ddaa98b1e9e6914d7e58e2c5a128310042b332f89"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x3f729d02a1c9e815e6974b91c882dbe525ed0a53a4efdbc74620e35bde99773f"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("2"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000021ba0fc37ad4eb0633eb18f2b7867bacbe994a2ffcbb04a71e394e6e76041f6ce216fa03b1b415a5c386d8de9e16be9fdc188234b80a0dec99922d03c240f2e463053e3"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("London")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xac7c62b6de1eb79a887bca351ae00f251b5d28f12e387445c91c7d87afdd4dc0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x63b3449343f05e4ba767546497869b85a2a473d42121a021e7590d7017754ff3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000001ba0e8ff56322287185f6afd3422a825b47bf5c1a4ccf0dc0389cdc03f7c1c32b7eaa0776b02f9f5773238d3ff36b74a123f409cd6420908d7855bbe4c8ff63e00d698"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4fe66d9877d8773ecdc30931c93f7f099db0a680f4fa70a6900beaece1abe856"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x63b3449343f05e4ba767546497869b85a2a473d42121a021e7590d7017754ff3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000031ba0f06eb219c5dba98711a9a2678339f64d172bfac289a5c43a0018d3917be8dc2aa0147bd7a6ee30217e63cbddc28b0e72f115da754d8916b87992aa27ed00eb105e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xcc7f7b9cd5c6edeb998bda041a86d095ecc09509f6307865e84f6e797e8325bf"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("4"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x962ab2b5876962ab2c27d260485a0a1ab1a930ea9143d99f3ba2b4962b6b39e0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000041ba0c148a101aa54703ff0e949441bdba90b1972a16c338f7f9a24b07f0313cd49d6a028cb82229b8a57e2048761d6fa5060c5b459f000d4e218de1372c1df9cfa171e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xffe8d1bf9c58da99d37a483e737dc48ae9c804f0ea8757af12bbbdc394c59671"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("5"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xd98655f5c4759c56c8ba01eb9c3fcde34b26c4445714859bbd06d18b0c398322"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000051ca09a1ce3fdc8469be9bbe660a07c169cf5b6b70fe408cc1395057bbd4cdc2c8557a0560e8c0503c4364efd017933749f22e1d9ad4eff4580d5463df54b9bff8dca31"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xffe8d1bf9c58da99d37a483e737dc48ae9c804f0ea8757af12bbbdc394c59671"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x442c5686dfaa9f7734ed17a45d5f91a8057b8ea587a342b8f8eba3d267874edb"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000061ca04f7114759d69db050a87677a2dff3d6f9399f0b66da593b2cc50748708377f6fa042f32766ce38ec3cee0d2c2dbc4d14b9cbf94e4af75b0584a04c933457bb83bb"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x3f53b5efc13695d760896b7f28ee2fffa607c2e0c20859f96e1345258757d26b"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("7"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7892c989716799974e37f634fd1e5415875819865e33cb54062aab2f75cd2294"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000071ba0e77cc0b2a4af0e43bc5732d6747afb3ddcf781f7277650aeef15b9caba68c91aa04af80af420b77c3f4ad457f1c6535be5d46993e2c8987250d28d088b3a11bb4a"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x622394a760b62a716b949006f6f98bfaff0d5f5d1e14dbd01114d91be551254d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xa20826cf41f70c356832c534dd73f631c498760da2a0584e2844480b70b77e6d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf884800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000081ca057f87767c304f58d8c351529457f9fbe53d04ba7f9f0ae7f2bac7a2d6dc59bc09fd8de811557a1287c01a1e09edeb750adba79cef13ebeb951d030ff29e63f39"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7762d3b3246c3d075ec99522a1d036ddab001d209fdf1e037883679417f023be"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("9"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1b43586e1432a3ed43253dd44fd5e8fb20d65a9aa720b17f41da928266fd155e"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000091ba09cffdf14ebc27c6c36a8cc9e679e32251165b52fb39e7ccc52cbc42f7157c301a032f0bebe1ae01ef86e26c0194bc26e9ed9e6bb7dad277927a92def3d0badbe74"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xa14d9a813ff4ac2178940ec3d36c797fe36b563e77726c05e24811bf6b72482d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("1"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000011ba02c5e81a024dd0f6fb773c8787fa46ab5eb55cb73df83562e6ddbe9106a3df7f6a029437b9a23e45bbfce086f2ddaa98b1e9e6914d7e58e2c5a128310042b332f89"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xa14d9a813ff4ac2178940ec3d36c797fe36b563e77726c05e24811bf6b72482d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("2"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000021ba0fc37ad4eb0633eb18f2b7867bacbe994a2ffcbb04a71e394e6e76041f6ce216fa03b1b415a5c386d8de9e16be9fdc188234b80a0dec99922d03c240f2e463053e3"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("Merge")), LblJSONList{}(\right-assoc{}(LblJSONs{}(LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xac7c62b6de1eb79a887bca351ae00f251b5d28f12e387445c91c7d87afdd4dc0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x63b3449343f05e4ba767546497869b85a2a473d42121a021e7590d7017754ff3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000001ba0e8ff56322287185f6afd3422a825b47bf5c1a4ccf0dc0389cdc03f7c1c32b7eaa0776b02f9f5773238d3ff36b74a123f409cd6420908d7855bbe4c8ff63e00d698"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x4fe66d9877d8773ecdc30931c93f7f099db0a680f4fa70a6900beaece1abe856"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x63b3449343f05e4ba767546497869b85a2a473d42121a021e7590d7017754ff3"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000031ba0f06eb219c5dba98711a9a2678339f64d172bfac289a5c43a0018d3917be8dc2aa0147bd7a6ee30217e63cbddc28b0e72f115da754d8916b87992aa27ed00eb105e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xcc7f7b9cd5c6edeb998bda041a86d095ecc09509f6307865e84f6e797e8325bf"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("4"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x962ab2b5876962ab2c27d260485a0a1ab1a930ea9143d99f3ba2b4962b6b39e0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000041ba0c148a101aa54703ff0e949441bdba90b1972a16c338f7f9a24b07f0313cd49d6a028cb82229b8a57e2048761d6fa5060c5b459f000d4e218de1372c1df9cfa171e"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xffe8d1bf9c58da99d37a483e737dc48ae9c804f0ea8757af12bbbdc394c59671"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("5"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xd98655f5c4759c56c8ba01eb9c3fcde34b26c4445714859bbd06d18b0c398322"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000051ca09a1ce3fdc8469be9bbe660a07c169cf5b6b70fe408cc1395057bbd4cdc2c8557a0560e8c0503c4364efd017933749f22e1d9ad4eff4580d5463df54b9bff8dca31"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xffe8d1bf9c58da99d37a483e737dc48ae9c804f0ea8757af12bbbdc394c59671"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("6"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x442c5686dfaa9f7734ed17a45d5f91a8057b8ea587a342b8f8eba3d267874edb"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000061ca04f7114759d69db050a87677a2dff3d6f9399f0b66da593b2cc50748708377f6fa042f32766ce38ec3cee0d2c2dbc4d14b9cbf94e4af75b0584a04c933457bb83bb"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x3f53b5efc13695d760896b7f28ee2fffa607c2e0c20859f96e1345258757d26b"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("7"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7892c989716799974e37f634fd1e5415875819865e33cb54062aab2f75cd2294"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000071ba0e77cc0b2a4af0e43bc5732d6747afb3ddcf781f7277650aeef15b9caba68c91aa04af80af420b77c3f4ad457f1c6535be5d46993e2c8987250d28d088b3a11bb4a"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x622394a760b62a716b949006f6f98bfaff0d5f5d1e14dbd01114d91be551254d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xa20826cf41f70c356832c534dd73f631c498760da2a0584e2844480b70b77e6d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf884800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000081ca057f87767c304f58d8c351529457f9fbe53d04ba7f9f0ae7f2bac7a2d6dc59bc09fd8de811557a1287c01a1e09edeb750adba79cef13ebeb951d030ff29e63f39"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7762d3b3246c3d075ec99522a1d036ddab001d209fdf1e037883679417f023be"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("9"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1b43586e1432a3ed43253dd44fd5e8fb20d65a9aa720b17f41da928266fd155e"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000091ba09cffdf14ebc27c6c36a8cc9e679e32251165b52fb39e7ccc52cbc42f7157c301a032f0bebe1ae01ef86e26c0194bc26e9ed9e6bb7dad277927a92def3d0badbe74"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xa14d9a813ff4ac2178940ec3d36c797fe36b563e77726c05e24811bf6b72482d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("1"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000011ba02c5e81a024dd0f6fb773c8787fa46ab5eb55cb73df83562e6ddbe9106a3df7f6a029437b9a23e45bbfce086f2ddaa98b1e9e6914d7e58e2c5a128310042b332f89"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("hash")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xa14d9a813ff4ac2178940ec3d36c797fe36b563e77726c05e24811bf6b72482d"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("indexes")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("2"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gas")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), inj{SortInt{}, SortJSON{}}(\dv{SortInt{}}("0"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("logs")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("txbytes")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xf885800a8404c4b40094cccccccccccccccccccccccccccccccccccccccc01a4693c613900000000000000000000000000000000000000000000000000000000000000021ba0fc37ad4eb0633eb18f2b7867bacbe994a2ffcbb04a71e394e6e76041f6ce216fa03b1b415a5c386d8de9e16be9fdc188234b80a0dec99922d03c240f2e463053e3"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("pre")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000100")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0ba1a9ce0ba1a9ce"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x60006000600060006000a361600d60005500"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000101")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0ba1a9ce0ba1a9ce"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060016001600003a361600d60005500"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000102")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0ba1a9ce0ba1a9ce"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060016000036001a361600d60005500"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000103")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0ba1a9ce0ba1a9ce"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001a361600d60005500"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000104")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0ba1a9ce0ba1a9ce"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260006000600060206000a361600d60005500"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000105")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0ba1a9ce0ba1a9ce"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060016000a361600d60005500"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000106")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0ba1a9ce0ba1a9ce"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001601fa361600d60005500"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000107")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0ba1a9ce0ba1a9ce"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052336000600060206000a361600d60005500"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000108")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0ba1a9ce0ba1a9ce"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x60ff6000536001600003600160000360016000036001601fa361600d60005500"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x0000000000000000000000000000000000000109")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0ba1a9ce0ba1a9ce"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000525858586001601fa361600d60005500"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x100000000000"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0xcccccccccccccccccccccccccccccccccccccccc")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("balance")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0ba1a9ce0ba1a9ce"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("code")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x6000600060006000600435610100015af400"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("storage")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("0x00")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0bad"))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("transaction")), LblJSONObject{}(\right-assoc{}(LblJSONs{}(LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("data")), LblJSONList{}(\right-assoc{}(LblJSONs{}(inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x693c61390000000000000000000000000000000000000000000000000000000000000000")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x693c61390000000000000000000000000000000000000000000000000000000000000001")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x693c61390000000000000000000000000000000000000000000000000000000000000002")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x693c61390000000000000000000000000000000000000000000000000000000000000003")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x693c61390000000000000000000000000000000000000000000000000000000000000004")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x693c61390000000000000000000000000000000000000000000000000000000000000005")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x693c61390000000000000000000000000000000000000000000000000000000000000006")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x693c61390000000000000000000000000000000000000000000000000000000000000007")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x693c61390000000000000000000000000000000000000000000000000000000000000008")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x693c61390000000000000000000000000000000000000000000000000000000000000009")), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasLimit")), LblJSONList{}(\right-assoc{}(LblJSONs{}(inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x04c4b400")), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("gasPrice")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x0a"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("nonce")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x00"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("secretKey")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("sender")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("to")), inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0xcccccccccccccccccccccccccccccccccccccccc"))), LblJSONEntry{}(inj{SortString{}, SortJSONKey{}}(\dv{SortString{}}("value")), LblJSONList{}(\right-assoc{}(LblJSONs{}(inj{SortString{}, SortJSON{}}(\dv{SortString{}}("0x01")), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}())))), Lbl'Stop'List'LBraQuot'JSONs'QuotRBraUnds'JSONs{}()))))), Lbl'UndsPipe'-'-GT-Unds'{}(inj{SortKConfigVar{}, SortKItem{}}(\dv{SortKConfigVar{}}("$SCHEDULE")), inj{SortSchedule{}, SortKItem{}}(LblMERGE'Unds'EVM{}())), Lbl'UndsPipe'-'-GT-Unds'{}(inj{SortKConfigVar{}, SortKItem{}}(\dv{SortKConfigVar{}}("$MODE")), inj{SortMode{}, SortKItem{}}(LblNORMAL{}())), Lbl'UndsPipe'-'-GT-Unds'{}(inj{SortKConfigVar{}, SortKItem{}}(\dv{SortKConfigVar{}}("$CHAINID")), inj{SortInt{}, SortKItem{}}(\dv{SortInt{}}("1")))))) diff --git a/tests/slow.haskell b/tests/slow.haskell deleted file mode 100644 index a55082bfd3..0000000000 --- a/tests/slow.haskell +++ /dev/null @@ -1,368 +0,0 @@ -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/add3.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/add4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/addmod1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/addmod1_overflow2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/addmod1_overflow3.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/addmod1_overflow4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/addmod1_overflowDiff.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/addmod2_0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/addmod2_1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/addmod2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/addmod3_0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/addmod3.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/addmodDivByZero3.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/arith1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/div1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/divByNonZero0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/divByNonZero1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/divByZero_2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf2_128.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf2_16.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf2_256.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf2_2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf2_32.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf2_4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_10.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_11.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_12.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_13.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_14.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_15.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_16.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_17.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_18.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_19.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_20.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_21.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_22.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_23.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_24.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_25.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_26.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_27.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_28.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_29.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_30.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_31.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_32.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_33.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_3.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_5.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_6.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_7.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_8.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256_9.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_10.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_11.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_12.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_13.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_14.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_15.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_16.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_17.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_18.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_19.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_20.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_21.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_22.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_23.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_24.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_25.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_26.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_27.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_28.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_29.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_30.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_31.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_32.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_33.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_3.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_5.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_6.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_7.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_8.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf256Of256_9.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf2_64.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expPowerOf2_8.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expXY.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/expXY_success.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/fibbonacci_unrolled.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/mod4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/modByZero.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/mul5.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/mul7.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/mulmod0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/mulmod1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/mulmod1_overflow4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/mulmod1_overflow.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/mulmod2_0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/mulmod2_1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/mulmod2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/mulmod3_0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/mulmod3.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/mulmod4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/mulmoddivByZero2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/mulmoddivByZero3.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/not1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdiv0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdiv1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdiv2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdiv3.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdiv4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdiv5.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdiv6.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdiv7.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdiv8.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdiv9.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdivByZero0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdivByZero1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdivByZero2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdiv_dejavu.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdiv_i256min2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdiv_i256min3.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/sdiv_i256min.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/signextend_BigByteBigByte.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/signextend_Overflow_dj42.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/smod0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/smod1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/smod2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/smod4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/smod5.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/smod6.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/smod7.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/smod8_byZero.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/smod_i256min1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmArithmeticTest/smod_i256min2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/byte0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/byte10.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/byte1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/byte2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/byte3.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/byte4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/byte5.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/byte6.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/byte7.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/byte8.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/byte9.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/byteBN.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/eq0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/gt0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/lt0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/lt1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/sgt0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/sgt1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/sgt4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/slt0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/slt1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/slt3.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/slt4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmBitwiseLogicOperation/xor0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmEnvironmentalInfo/calldatacopy0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmEnvironmentalInfo/calldatacopy0_return.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmEnvironmentalInfo/calldatacopy1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmEnvironmentalInfo/calldatacopy1_return.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmEnvironmentalInfo/calldatacopy2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmEnvironmentalInfo/calldatacopy2_return.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh2_return.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh_return.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmEnvironmentalInfo/calldatacopy_sec.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmEnvironmentalInfo/calldatacopyZeroMemExpansion.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmEnvironmentalInfo/calldatacopyZeroMemExpansion_return.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmEnvironmentalInfo/codecopy0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmEnvironmentalInfo/codecopyZeroMemExpansion.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/BlockNumberDynamicJump0_foreverOutOfGas.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/BlockNumberDynamicJump0_jumpdest0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/BlockNumberDynamicJump0_jumpdest2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/BlockNumberDynamicJumpi1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/BlockNumberDynamicJumpiAfterStop.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/byte1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/deadCode_1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/DynamicJump0_foreverOutOfGas.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/DynamicJump0_jumpdest0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/DynamicJump0_jumpdest2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/DynamicJumpAfterStop.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/DynamicJumpi1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/DynamicJumpiAfterStop.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/DynamicJumpJD_DependsOnJumps1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/DynamicJumpPathologicalTest0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/DynamicJumpStartWithJumpDest.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/DynamicJump_value1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/DynamicJump_value2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/DynamicJump_value3.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/DynamicJump_valueUnderflow.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/for_loop1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/for_loop2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/gas0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/gasOverFlow.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/indirect_jump1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/indirect_jump2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/indirect_jump3.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/indirect_jump4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_foreverOutOfGas.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_jumpdest0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_jumpdest2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/JDfromStorageDynamicJumpiAfterStop.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/jump0_foreverOutOfGas.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/jump0_jumpdest0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/jump0_jumpdest2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/jumpdestBigList.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/jumpDynamicJumpSameDest.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/jumpi1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/jumpiAfterStop.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/jumpi_at_the_end.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/kv1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/loop_stacklimit_1020.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/loop_stacklimit_1021.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/memory1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/mloadError1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/msize0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/msize2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/msize3.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/mstore0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/mstore1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/mstore8_0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/mstore8_1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/mstore8WordToBigError.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/mstore_mload0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/mstoreWordToBigError.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/pop0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/return2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/sstore_load_0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/sstore_load_1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/sstore_load_2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/stackjump1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/stack_loop.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmIOandFlowOperations/when.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log0_emptyMem.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log0_logMemsizeZero.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log0_nonEmptyMem.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log0_nonEmptyMem_logMemSize1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log0_nonEmptyMem_logMemSize1_logMemStart31.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log1_Caller.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log1_emptyMem.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log1_logMemsizeZero.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log1_MaxTopic.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log1_nonEmptyMem.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log1_nonEmptyMem_logMemSize1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log1_nonEmptyMem_logMemSize1_logMemStart31.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log2_Caller.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log2_emptyMem.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log2_logMemsizeTooHigh.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log2_logMemsizeZero.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log_2logs.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log2_MaxTopic.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log2_nonEmptyMem.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log2_nonEmptyMem_logMemSize1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log2_nonEmptyMem_logMemSize1_logMemStart31.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log3_Caller.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log3_emptyMem.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log3_logMemsizeTooHigh.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log3_logMemsizeZero.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log3_logMemStartTooHigh.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log3_MaxTopic.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log3_nonEmptyMem.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log3_nonEmptyMem_logMemSize1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log3_nonEmptyMem_logMemSize1_logMemStart31.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log3_PC.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log4_Caller.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log4_emptyMem.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log4_logMemsizeTooHigh.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log4_logMemsizeZero.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log4_logMemStartTooHigh.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log4_MaxTopic.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log4_nonEmptyMem.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log4_nonEmptyMem_logMemSize1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log4_nonEmptyMem_logMemSize1_logMemStart31.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmLogTest/log4_PC.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/ackermann31.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/ackermann32.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/ackermann33.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/fibonacci10.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/fibonacci16.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/loop-add-10M.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/loop-divadd-10M.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/loop-divadd-unr100-10M.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/loop-exp-16b-100k.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/loop-exp-1b-1M.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/loop-exp-2b-100k.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/loop-exp-32b-100k.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/loop-exp-4b-100k.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/loop-exp-8b-100k.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/loop-exp-nop-1M.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/loop-mul.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/loop-mulmod-2M.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPerformance/manyFunctions100.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/dup10.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/dup11.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/dup12.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/dup13.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/dup14.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/dup15.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/dup16.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/dup4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/dup5.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/dup6.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/dup7.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/dup8.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/dup9.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/push33.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/swap10.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/swap11.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/swap12.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/swap13.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/swap14.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/swap15.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/swap16.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/swap4.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/swap5.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/swap6.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/swap7.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/swap8.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/swap9.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmPushDupSwapTest/swapjump1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmSha3Test/sha3_memSizeNoQuadraticCost31.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmSystemOperations/return0.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmSystemOperations/return1.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmSystemOperations/return2.json -tests/ethereum-tests/LegacyTests/Constantinople/VMTests/vmSystemOperations/TestNameRegistrator.json -tests/specs/benchmarks/ecrecoverloop00-sig0-invalid-spec.k -tests/specs/benchmarks/ecrecoverloop00-sigs-valid-spec.k -tests/specs/benchmarks/ecrecoverloop02-sig0-invalid-spec.k -tests/specs/benchmarks/ecrecoverloop02-sig1-invalid-spec.k -tests/specs/benchmarks/ecrecoverloop02-sigs-valid-spec.k -tests/specs/erc20/ds/transfer-failure-1-b-spec.k -tests/specs/erc20/ds/transferFrom-failure-1-a-spec.k -tests/specs/erc20/ds/transferFrom-failure-1-b-spec.k -tests/specs/erc20/ds/transferFrom-failure-1-c-spec.k -tests/specs/erc20/ds/transferFrom-failure-2-b-spec.k -tests/specs/erc20/ds/transferFrom-success-1-spec.k -tests/specs/erc20/ds/transferFrom-success-2-spec.k -tests/specs/erc20/ds/transfer-success-1-spec.k -tests/specs/erc20/hkg/transferFrom-success-1-spec.k -tests/specs/examples/erc721-spec.md -tests/specs/mcd/dstoken-burn-self-fail-rough-spec.k -tests/specs/mcd/dstoken-transferfrom-fail-rough-spec.k -tests/specs/mcd/end-cash-pass-rough-spec.k -tests/specs/mcd/end-pack-pass-rough-spec.k -tests/specs/mcd/flapper-yank-pass-rough-spec.k -tests/specs/mcd/flipper-bids-pass-rough-spec.k -tests/specs/mcd/flopper-dent-guy-diff-tic-not-0-pass-rough-spec.k -tests/specs/mcd/flopper-dent-guy-same-pass-rough-spec.k -tests/specs/mcd/flopper-file-pass-rough-spec.k -tests/specs/mcd/flopper-kick-pass-rough-spec.k -tests/specs/mcd/flopper-tick-pass-rough-spec.k -tests/specs/mcd/gemjoin-exit-pass-rough-spec.k -tests/specs/mcd/pot-join-pass-rough-spec.k -tests/specs/mcd/vat-flux-diff-pass-rough-spec.k -tests/specs/mcd/vat-fold-pass-rough-spec.k -tests/specs/mcd/vat-fork-diff-pass-rough-spec.k -tests/specs/mcd/vat-slip-pass-rough-spec.k diff --git a/tests/slow.llvm b/tests/slow.llvm deleted file mode 100644 index 32fd593b40..0000000000 --- a/tests/slow.llvm +++ /dev/null @@ -1,2 +0,0 @@ -tests/ethereum-tests/LegacyTests/Constantinople/BlockchainTests/GeneralStateTests/stQuadraticComplexityTest/Call50000bytesContract50_2_d0g1v0.json -tests/ethereum-tests/LegacyTests/Constantinople/BlockchainTests/GeneralStateTests/stStaticCall/static_Call50000bytesContract50_2_d1g0v0.json diff --git a/tests/specs/benchmarks/README.md b/tests/specs/benchmarks/README.md deleted file mode 100644 index 40ef7b6954..0000000000 --- a/tests/specs/benchmarks/README.md +++ /dev/null @@ -1,2 +0,0 @@ -Specs generated from https://github.com/denis-bogdanas/kevm-verify-benchmarks/tree/jenkins-support -, for all directories starting with `0-`. Originally developed by Suhabe Bugrara. diff --git a/tests/specs/benchmarks/address00-spec.k b/tests/specs/benchmarks/address00-spec.k deleted file mode 100644 index b876ccd368..0000000000 --- a/tests/specs/benchmarks/address00-spec.k +++ /dev/null @@ -1,126 +0,0 @@ -requires "verification.k" - -module ADDRESS00-SPEC - imports VERIFICATION - - // fn-execute - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => #encodeArgs(#address(A0)) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634b64e492146044575b600080fd5b348015604f57600080fd5b506082600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505060c4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008190509190505600a165627a7a72305820fef7ba925e24a935e59bb401907893518a66095fa9e2c2506b29051dfdaa6ff80029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634b64e492146044575b600080fd5b348015604f57600080fd5b506082600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505060c4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008190509190505600a165627a7a72305820fef7ba925e24a935e59bb401907893518a66095fa9e2c2506b29051dfdaa6ff80029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", #address(A0)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634b64e492146044575b600080fd5b348015604f57600080fd5b506082600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505060c4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008190509190505600a165627a7a72305820fef7ba925e24a935e59bb401907893518a66095fa9e2c2506b29051dfdaa6ff80029") - -_ - - -_ - - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #rangeAddress(A0) - -endmodule - diff --git a/tests/specs/benchmarks/address00.sol b/tests/specs/benchmarks/address00.sol deleted file mode 100644 index 4e3f8e2966..0000000000 --- a/tests/specs/benchmarks/address00.sol +++ /dev/null @@ -1,7 +0,0 @@ -pragma solidity 0.4.24; -contract address00 { - function execute(address a0) public returns (address) { - return a0; - } -} - diff --git a/tests/specs/benchmarks/bytes00-spec.k b/tests/specs/benchmarks/bytes00-spec.k deleted file mode 100644 index 9f01df2dc1..0000000000 --- a/tests/specs/benchmarks/bytes00-spec.k +++ /dev/null @@ -1,127 +0,0 @@ -requires "verification.k" - -module BYTES00-SPEC - imports VERIFICATION - - // fn-execute - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => #encodeArgs(#uint256(DATA_LEN)) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806309c5eabe146044575b600080fd5b348015604f57600080fd5b5060a8600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505060be565b6040518082815260200191505060405180910390f35b6000815190509190505600a165627a7a72305820443b6929f0411657e3b5f5371823da4795cb8ece704713e7934fea316a2af24a0029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806309c5eabe146044575b600080fd5b348015604f57600080fd5b5060a8600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505060be565b6040518082815260200191505060405180910390f35b6000815190509190505600a165627a7a72305820443b6929f0411657e3b5f5371823da4795cb8ece704713e7934fea316a2af24a0029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", #bytes(#bufStrict(DATA_LEN, DATA))) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806309c5eabe146044575b600080fd5b348015604f57600080fd5b5060a8600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505060be565b6040518082815260200191505060405180910390f35b6000815190509190505600a165627a7a72305820443b6929f0411657e3b5f5371823da4795cb8ece704713e7934fea316a2af24a0029") - -_ - - -_ - - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #range(0 <= DATA_LEN < pow16) - andBool #range(0 <= DATA < (2 ^Int (DATA_LEN *Int 8))) - -endmodule - diff --git a/tests/specs/benchmarks/bytes00.sol b/tests/specs/benchmarks/bytes00.sol deleted file mode 100644 index b032f5be34..0000000000 --- a/tests/specs/benchmarks/bytes00.sol +++ /dev/null @@ -1,7 +0,0 @@ -pragma solidity 0.4.24; -contract bytes00 { - function execute(bytes data) public returns (uint) { - return data.length; - } -} - diff --git a/tests/specs/benchmarks/ecrecover00-siginvalid-spec.k b/tests/specs/benchmarks/ecrecover00-siginvalid-spec.k deleted file mode 100644 index dafbe918d3..0000000000 --- a/tests/specs/benchmarks/ecrecover00-siginvalid-spec.k +++ /dev/null @@ -1,135 +0,0 @@ -requires "verification.k" - -module ECRECOVER00-SIGINVALID-SPEC - imports VERIFICATION - - // fn-execute-siginvalid - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => ?_ - _ => EVMC_REVERT - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634480949514610046575b600080fd5b34801561005257600080fd5b506100a06004803603608081101561006957600080fd5b8101908080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506100e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008060018686868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610142573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611151561018957600080fd5b8091505094935050505056fea165627a7a72305820ec9368f63b82a680b2493003123eec414f661d1259fdf9d0082a8815d68a9a7e0029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634480949514610046575b600080fd5b34801561005257600080fd5b506100a06004803603608081101561006957600080fd5b8101908080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506100e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008060018686868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610142573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611151561018957600080fd5b8091505094935050505056fea165627a7a72305820ec9368f63b82a680b2493003123eec414f661d1259fdf9d0082a8815d68a9a7e0029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", #bytes32(HASH), #uint8(SIGV), #bytes32(SIGR), #bytes32(SIGS)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634480949514610046575b600080fd5b34801561005257600080fd5b506100a06004803603608081101561006957600080fd5b8101908080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506100e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008060018686868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610142573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611151561018957600080fd5b8091505094935050505056fea165627a7a72305820ec9368f63b82a680b2493003123eec414f661d1259fdf9d0082a8815d68a9a7e0029") - -_ - - -_ - - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - - // Account address normality - andBool CONTRACT_ID >Int 0 andBool (notBool #isPrecompiledAccount(CONTRACT_ID, BYZANTIUM)) - andBool CALLEE_ID >Int 0 andBool (notBool #isPrecompiledAccount(CALLEE_ID , BYZANTIUM)) - - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV) - andBool #rangeBytes(32, SIGR) - andBool #rangeBytes(32, SIGS) - andBool #ecrecEmpty(#bufStrict(32, HASH), #bufStrict(32, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS)) - -endmodule - diff --git a/tests/specs/benchmarks/ecrecover00-sigvalid-spec.k b/tests/specs/benchmarks/ecrecover00-sigvalid-spec.k deleted file mode 100644 index ed558f00a0..0000000000 --- a/tests/specs/benchmarks/ecrecover00-sigvalid-spec.k +++ /dev/null @@ -1,135 +0,0 @@ -requires "verification.k" - -module ECRECOVER00-SIGVALID-SPEC - imports VERIFICATION - - // fn-execute-sigvalid - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => #buf(32, RECOVERED) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634480949514610046575b600080fd5b34801561005257600080fd5b506100a06004803603608081101561006957600080fd5b8101908080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506100e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008060018686868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610142573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611151561018957600080fd5b8091505094935050505056fea165627a7a72305820ec9368f63b82a680b2493003123eec414f661d1259fdf9d0082a8815d68a9a7e0029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634480949514610046575b600080fd5b34801561005257600080fd5b506100a06004803603608081101561006957600080fd5b8101908080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506100e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008060018686868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610142573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611151561018957600080fd5b8091505094935050505056fea165627a7a72305820ec9368f63b82a680b2493003123eec414f661d1259fdf9d0082a8815d68a9a7e0029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", #bytes32(HASH), #uint8(SIGV), #bytes32(SIGR), #bytes32(SIGS)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634480949514610046575b600080fd5b34801561005257600080fd5b506100a06004803603608081101561006957600080fd5b8101908080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506100e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008060018686868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610142573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611151561018957600080fd5b8091505094935050505056fea165627a7a72305820ec9368f63b82a680b2493003123eec414f661d1259fdf9d0082a8815d68a9a7e0029") - -_ - - -_ - - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - - // Account address normality - andBool CONTRACT_ID >Int 0 andBool (notBool #isPrecompiledAccount(CONTRACT_ID, BYZANTIUM)) - andBool CALLEE_ID >Int 0 andBool (notBool #isPrecompiledAccount(CALLEE_ID , BYZANTIUM)) - - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #range(0 <= CD < 1024) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #rangeAddress(MSG_SENDER) - andBool #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV) - andBool #rangeBytes(32, SIGR) - andBool #rangeBytes(32, SIGS) - andBool RECOVERED ==Int #asWord(#ecrec(#bufStrict(32, HASH), #bufStrict(32, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS))) - andBool notBool #ecrecEmpty(#bufStrict(32, HASH), #bufStrict(32, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS)) -endmodule - diff --git a/tests/specs/benchmarks/ecrecover00.sol b/tests/specs/benchmarks/ecrecover00.sol deleted file mode 100644 index b46181de6e..0000000000 --- a/tests/specs/benchmarks/ecrecover00.sol +++ /dev/null @@ -1,8 +0,0 @@ -pragma solidity 0.5.0; -contract ecrecover00 { - function execute(bytes32 hash, uint8 sigV, bytes32 sigR, bytes32 sigS) pure external returns(address) { - address recovered = ecrecover(hash, sigV, sigR, sigS); - require(recovered > address(0)); - return recovered; - } -} \ No newline at end of file diff --git a/tests/specs/benchmarks/ecrecoverloop00-sig0-invalid-spec.k b/tests/specs/benchmarks/ecrecoverloop00-sig0-invalid-spec.k deleted file mode 100644 index b0ffb1a9b8..0000000000 --- a/tests/specs/benchmarks/ecrecoverloop00-sig0-invalid-spec.k +++ /dev/null @@ -1,139 +0,0 @@ -requires "verification.k" - -module ECRECOVERLOOP00-SIG0-INVALID-SPEC - imports VERIFICATION - - // fn-execute-sig0-invalid - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => .Bytes - _ => EVMC_REVERT - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063e6daaf3c14610046575b600080fd5b34801561005257600080fd5b50610142600480360360e081101561006957600080fd5b810190808035906020019092919080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f8201169050808301925050505050509192919290505050610144565b005b60008090505b600281101561023d576000600186868460028110151561016657fe5b6020020151868560028110151561017957fe5b6020020151868660028110151561018c57fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156101e8573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611151561022f57600080fd5b50808060010191505061014a565b505050505056fea165627a7a723058209cbe77475c348cf6ab4edd37fdfe35cef78a2f1a391aad5c7b6fdbace01dd96d0029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063e6daaf3c14610046575b600080fd5b34801561005257600080fd5b50610142600480360360e081101561006957600080fd5b810190808035906020019092919080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f8201169050808301925050505050509192919290505050610144565b005b60008090505b600281101561023d576000600186868460028110151561016657fe5b6020020151868560028110151561017957fe5b6020020151868660028110151561018c57fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156101e8573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611151561022f57600080fd5b50808060010191505061014a565b505050505056fea165627a7a723058209cbe77475c348cf6ab4edd37fdfe35cef78a2f1a391aad5c7b6fdbace01dd96d0029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData2("execute(bytes32,uint8[2],bytes32[2],bytes32[2])", #bytes32(HASH), -#uint8(SIGV0), #uint8(SIGV1), -#bytes32(SIGR0), #bytes32(SIGR1), -#bytes32(SIGS0), #bytes32(SIGS1)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063e6daaf3c14610046575b600080fd5b34801561005257600080fd5b50610142600480360360e081101561006957600080fd5b810190808035906020019092919080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f8201169050808301925050505050509192919290505050610144565b005b60008090505b600281101561023d576000600186868460028110151561016657fe5b6020020151868560028110151561017957fe5b6020020151868660028110151561018c57fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156101e8573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611151561022f57600080fd5b50808060010191505061014a565b505050505056fea165627a7a723058209cbe77475c348cf6ab4edd37fdfe35cef78a2f1a391aad5c7b6fdbace01dd96d0029") - -_ - - -_ - - _ - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - _ - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - - // Account address normality - andBool CONTRACT_ID >Int 0 andBool (notBool #isPrecompiledAccount(CONTRACT_ID, BYZANTIUM)) - andBool CALLEE_ID >Int 0 andBool (notBool #isPrecompiledAccount(CALLEE_ID , BYZANTIUM)) - - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV0) - andBool #rangeUInt(8, SIGV1) - andBool #rangeBytes(32, SIGR0) - andBool #rangeBytes(32, SIGR1) - andBool #rangeBytes(32, SIGS0) - andBool #rangeBytes(32, SIGS1) - andBool #ecrecEmpty( #bufStrict(32, HASH), #bufStrict(32, SIGV0), #bufStrict(32, SIGR0), #bufStrict(32, SIGS0) ) - -endmodule - diff --git a/tests/specs/benchmarks/ecrecoverloop00-sig1-invalid-spec.k b/tests/specs/benchmarks/ecrecoverloop00-sig1-invalid-spec.k deleted file mode 100644 index 9688a1c204..0000000000 --- a/tests/specs/benchmarks/ecrecoverloop00-sig1-invalid-spec.k +++ /dev/null @@ -1,141 +0,0 @@ -requires "verification.k" - -module ECRECOVERLOOP00-SIG1-INVALID-SPEC - imports VERIFICATION - - // fn-execute-sig1-invalid - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => .Bytes - _ => EVMC_REVERT - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063e6daaf3c14610046575b600080fd5b34801561005257600080fd5b50610142600480360360e081101561006957600080fd5b810190808035906020019092919080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f8201169050808301925050505050509192919290505050610144565b005b60008090505b600281101561023d576000600186868460028110151561016657fe5b6020020151868560028110151561017957fe5b6020020151868660028110151561018c57fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156101e8573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611151561022f57600080fd5b50808060010191505061014a565b505050505056fea165627a7a723058209cbe77475c348cf6ab4edd37fdfe35cef78a2f1a391aad5c7b6fdbace01dd96d0029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063e6daaf3c14610046575b600080fd5b34801561005257600080fd5b50610142600480360360e081101561006957600080fd5b810190808035906020019092919080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f8201169050808301925050505050509192919290505050610144565b005b60008090505b600281101561023d576000600186868460028110151561016657fe5b6020020151868560028110151561017957fe5b6020020151868660028110151561018c57fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156101e8573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611151561022f57600080fd5b50808060010191505061014a565b505050505056fea165627a7a723058209cbe77475c348cf6ab4edd37fdfe35cef78a2f1a391aad5c7b6fdbace01dd96d0029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData2("execute(bytes32,uint8[2],bytes32[2],bytes32[2])", #bytes32(HASH), -#uint8(SIGV0), #uint8(SIGV1), -#bytes32(SIGR0), #bytes32(SIGR1), -#bytes32(SIGS0), #bytes32(SIGS1)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063e6daaf3c14610046575b600080fd5b34801561005257600080fd5b50610142600480360360e081101561006957600080fd5b810190808035906020019092919080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f8201169050808301925050505050509192919290505050610144565b005b60008090505b600281101561023d576000600186868460028110151561016657fe5b6020020151868560028110151561017957fe5b6020020151868660028110151561018c57fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156101e8573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611151561022f57600080fd5b50808060010191505061014a565b505050505056fea165627a7a723058209cbe77475c348cf6ab4edd37fdfe35cef78a2f1a391aad5c7b6fdbace01dd96d0029") - -_ - - -_ - - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - - // Account address normality - andBool CONTRACT_ID >Int 0 andBool (notBool #isPrecompiledAccount(CONTRACT_ID, BYZANTIUM)) - andBool CALLEE_ID >Int 0 andBool (notBool #isPrecompiledAccount(CALLEE_ID , BYZANTIUM)) - - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV0) - andBool #rangeUInt(8, SIGV1) - andBool #rangeBytes(32, SIGR0) - andBool #rangeBytes(32, SIGR1) - andBool #rangeBytes(32, SIGS0) - andBool #rangeBytes(32, SIGS1) - andBool #ecrecEmpty( #bufStrict(32, HASH), #bufStrict(32, SIGV1), #bufStrict(32, SIGR1), #bufStrict(32, SIGS1) ) - -endmodule - diff --git a/tests/specs/benchmarks/ecrecoverloop00-sigs-valid-spec.k b/tests/specs/benchmarks/ecrecoverloop00-sigs-valid-spec.k deleted file mode 100644 index fdd6b5fc97..0000000000 --- a/tests/specs/benchmarks/ecrecoverloop00-sigs-valid-spec.k +++ /dev/null @@ -1,142 +0,0 @@ -requires "verification.k" - -module ECRECOVERLOOP00-SIGS-VALID-SPEC - imports VERIFICATION - - // fn-execute-sigs-valid - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => .Bytes - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063e6daaf3c14610046575b600080fd5b34801561005257600080fd5b50610142600480360360e081101561006957600080fd5b810190808035906020019092919080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f8201169050808301925050505050509192919290505050610144565b005b60008090505b600281101561023d576000600186868460028110151561016657fe5b6020020151868560028110151561017957fe5b6020020151868660028110151561018c57fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156101e8573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611151561022f57600080fd5b50808060010191505061014a565b505050505056fea165627a7a723058209cbe77475c348cf6ab4edd37fdfe35cef78a2f1a391aad5c7b6fdbace01dd96d0029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063e6daaf3c14610046575b600080fd5b34801561005257600080fd5b50610142600480360360e081101561006957600080fd5b810190808035906020019092919080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f8201169050808301925050505050509192919290505050610144565b005b60008090505b600281101561023d576000600186868460028110151561016657fe5b6020020151868560028110151561017957fe5b6020020151868660028110151561018c57fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156101e8573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611151561022f57600080fd5b50808060010191505061014a565b505050505056fea165627a7a723058209cbe77475c348cf6ab4edd37fdfe35cef78a2f1a391aad5c7b6fdbace01dd96d0029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData2("execute(bytes32,uint8[2],bytes32[2],bytes32[2])", #bytes32(HASH), -#uint8(SIGV0), #uint8(SIGV1), -#bytes32(SIGR0), #bytes32(SIGR1), -#bytes32(SIGS0), #bytes32(SIGS1)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063e6daaf3c14610046575b600080fd5b34801561005257600080fd5b50610142600480360360e081101561006957600080fd5b810190808035906020019092919080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f8201169050808301925050505050509192919290505050610144565b005b60008090505b600281101561023d576000600186868460028110151561016657fe5b6020020151868560028110151561017957fe5b6020020151868660028110151561018c57fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156101e8573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611151561022f57600080fd5b50808060010191505061014a565b505050505056fea165627a7a723058209cbe77475c348cf6ab4edd37fdfe35cef78a2f1a391aad5c7b6fdbace01dd96d0029") - -_ - - -_ - - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - - // Account address normality - andBool CONTRACT_ID >Int 0 andBool (notBool #isPrecompiledAccount(CONTRACT_ID, BYZANTIUM)) - andBool CALLEE_ID >Int 0 andBool (notBool #isPrecompiledAccount(CALLEE_ID , BYZANTIUM)) - - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV0) - andBool #rangeUInt(8, SIGV1) - andBool #rangeBytes(32, SIGR0) - andBool #rangeBytes(32, SIGR1) - andBool #rangeBytes(32, SIGS0) - andBool #rangeBytes(32, SIGS1) - andBool notBool #ecrecEmpty( #bufStrict(32, HASH), #bufStrict(32, SIGV0), #bufStrict(32, SIGR0), #bufStrict(32, SIGS0) ) - andBool notBool #ecrecEmpty( #bufStrict(32, HASH), #bufStrict(32, SIGV1), #bufStrict(32, SIGR1), #bufStrict(32, SIGS1) ) - -endmodule - diff --git a/tests/specs/benchmarks/ecrecoverloop00.sol b/tests/specs/benchmarks/ecrecoverloop00.sol deleted file mode 100644 index 6ca9031940..0000000000 --- a/tests/specs/benchmarks/ecrecoverloop00.sol +++ /dev/null @@ -1,9 +0,0 @@ -pragma solidity 0.5.0; -contract ecrecoverloop00 { - function execute(bytes32 hash, uint8[2] memory sigV, bytes32[2] memory sigR, bytes32[2] memory sigS) pure public { - for (uint i = 0; i < 2; i++) { - address recovered = ecrecover(hash, sigV[i], sigR[i], sigS[i]); - require(recovered > address(0)); - } - } -} \ No newline at end of file diff --git a/tests/specs/benchmarks/ecrecoverloop02-sig0-invalid-spec.k b/tests/specs/benchmarks/ecrecoverloop02-sig0-invalid-spec.k deleted file mode 100644 index d4ce52f373..0000000000 --- a/tests/specs/benchmarks/ecrecoverloop02-sig0-invalid-spec.k +++ /dev/null @@ -1,142 +0,0 @@ -requires "verification.k" - -module ECRECOVERLOOP02-SIG0-INVALID-SPEC - imports VERIFICATION - - // fn-execute-sig0-invalid - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => .Bytes - _ => EVMC_REVERT - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633543d4b214610046575b600080fd5b34801561005257600080fd5b506101da600480360361010081101561006a57600080fd5b81019080803590602001909291908035906020019064010000000081111561009157600080fd5b8201836020820111156100a357600080fd5b803590602001918460018302840111640100000000831117156100c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f82011690508083019250505050505091929192905050506101dc565b005b60008090505b60028110156102d557600060018786846002811015156101fe57fe5b6020020151868560028110151561021157fe5b6020020151868660028110151561022457fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610280573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161115156102c757600080fd5b5080806001019150506101e2565b50505050505056fea165627a7a723058200e559ecf0b4ed3978069fd9e401adb4043ef711a33a5926f0e081d7bcdf08bb80029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633543d4b214610046575b600080fd5b34801561005257600080fd5b506101da600480360361010081101561006a57600080fd5b81019080803590602001909291908035906020019064010000000081111561009157600080fd5b8201836020820111156100a357600080fd5b803590602001918460018302840111640100000000831117156100c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f82011690508083019250505050505091929192905050506101dc565b005b60008090505b60028110156102d557600060018786846002811015156101fe57fe5b6020020151868560028110151561021157fe5b6020020151868660028110151561022457fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610280573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161115156102c757600080fd5b5080806001019150506101e2565b50505050505056fea165627a7a723058200e559ecf0b4ed3978069fd9e401adb4043ef711a33a5926f0e081d7bcdf08bb80029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData2("execute(bytes32,bytes,uint8[2],bytes32[2],bytes32[2])", -#bytes32(HASH), #bytes(#bufStrict(DATA_LEN,DATA)), -#uint8(SIGV0), #uint8(SIGV1), -#bytes32(SIGR0), #bytes32(SIGR1), -#bytes32(SIGS0), #bytes32(SIGS1)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633543d4b214610046575b600080fd5b34801561005257600080fd5b506101da600480360361010081101561006a57600080fd5b81019080803590602001909291908035906020019064010000000081111561009157600080fd5b8201836020820111156100a357600080fd5b803590602001918460018302840111640100000000831117156100c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f82011690508083019250505050505091929192905050506101dc565b005b60008090505b60028110156102d557600060018786846002811015156101fe57fe5b6020020151868560028110151561021157fe5b6020020151868660028110151561022457fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610280573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161115156102c757600080fd5b5080806001019150506101e2565b50505050505056fea165627a7a723058200e559ecf0b4ed3978069fd9e401adb4043ef711a33a5926f0e081d7bcdf08bb80029") - -_ - - -_ - - _ - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - _ - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - - // Account address normality - andBool CONTRACT_ID >Int 0 andBool (notBool #isPrecompiledAccount(CONTRACT_ID, BYZANTIUM)) - andBool CALLEE_ID >Int 0 andBool (notBool #isPrecompiledAccount(CALLEE_ID , BYZANTIUM)) - - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV0) - andBool #rangeUInt(8, SIGV1) - andBool #rangeBytes(32, SIGR0) - andBool #rangeBytes(32, SIGR1) - andBool #rangeBytes(32, SIGS0) - andBool #rangeBytes(32, SIGS1) - andBool #range(0 <= DATA_LEN < 2 ^Int 16) - andBool #range(0 <= DATA < (2 ^Int (DATA_LEN *Int 8))) - andBool #ecrecEmpty( #bufStrict(32, HASH), #bufStrict(32, SIGV0), #bufStrict(32, SIGR0), #bufStrict(32, SIGS0) ) - -endmodule - diff --git a/tests/specs/benchmarks/ecrecoverloop02-sig1-invalid-spec.k b/tests/specs/benchmarks/ecrecoverloop02-sig1-invalid-spec.k deleted file mode 100644 index baac521904..0000000000 --- a/tests/specs/benchmarks/ecrecoverloop02-sig1-invalid-spec.k +++ /dev/null @@ -1,143 +0,0 @@ -requires "verification.k" - -module ECRECOVERLOOP02-SIG1-INVALID-SPEC - imports VERIFICATION - - // fn-execute-sig1-invalid - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => .Bytes - _ => EVMC_REVERT - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633543d4b214610046575b600080fd5b34801561005257600080fd5b506101da600480360361010081101561006a57600080fd5b81019080803590602001909291908035906020019064010000000081111561009157600080fd5b8201836020820111156100a357600080fd5b803590602001918460018302840111640100000000831117156100c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f82011690508083019250505050505091929192905050506101dc565b005b60008090505b60028110156102d557600060018786846002811015156101fe57fe5b6020020151868560028110151561021157fe5b6020020151868660028110151561022457fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610280573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161115156102c757600080fd5b5080806001019150506101e2565b50505050505056fea165627a7a723058200e559ecf0b4ed3978069fd9e401adb4043ef711a33a5926f0e081d7bcdf08bb80029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633543d4b214610046575b600080fd5b34801561005257600080fd5b506101da600480360361010081101561006a57600080fd5b81019080803590602001909291908035906020019064010000000081111561009157600080fd5b8201836020820111156100a357600080fd5b803590602001918460018302840111640100000000831117156100c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f82011690508083019250505050505091929192905050506101dc565b005b60008090505b60028110156102d557600060018786846002811015156101fe57fe5b6020020151868560028110151561021157fe5b6020020151868660028110151561022457fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610280573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161115156102c757600080fd5b5080806001019150506101e2565b50505050505056fea165627a7a723058200e559ecf0b4ed3978069fd9e401adb4043ef711a33a5926f0e081d7bcdf08bb80029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData2("execute(bytes32,bytes,uint8[2],bytes32[2],bytes32[2])", -#bytes32(HASH), #bytes(#bufStrict(DATA_LEN,DATA)), -#uint8(SIGV0), #uint8(SIGV1), -#bytes32(SIGR0), #bytes32(SIGR1), -#bytes32(SIGS0), #bytes32(SIGS1)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633543d4b214610046575b600080fd5b34801561005257600080fd5b506101da600480360361010081101561006a57600080fd5b81019080803590602001909291908035906020019064010000000081111561009157600080fd5b8201836020820111156100a357600080fd5b803590602001918460018302840111640100000000831117156100c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f82011690508083019250505050505091929192905050506101dc565b005b60008090505b60028110156102d557600060018786846002811015156101fe57fe5b6020020151868560028110151561021157fe5b6020020151868660028110151561022457fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610280573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161115156102c757600080fd5b5080806001019150506101e2565b50505050505056fea165627a7a723058200e559ecf0b4ed3978069fd9e401adb4043ef711a33a5926f0e081d7bcdf08bb80029") - -_ - - -_ - - _ - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - _ - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - - // Account address normality - andBool CONTRACT_ID >Int 0 andBool (notBool #isPrecompiledAccount(CONTRACT_ID, BYZANTIUM)) - andBool CALLEE_ID >Int 0 andBool (notBool #isPrecompiledAccount(CALLEE_ID , BYZANTIUM)) - - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV0) - andBool #rangeUInt(8, SIGV1) - andBool #rangeBytes(32, SIGR0) - andBool #rangeBytes(32, SIGR1) - andBool #rangeBytes(32, SIGS0) - andBool #rangeBytes(32, SIGS1) - andBool #range(0 <= DATA_LEN < pow16) - andBool #range(0 <= DATA < (2 ^Int (DATA_LEN *Int 8))) - andBool notBool #ecrecEmpty( #bufStrict(32, HASH), #bufStrict(32, SIGV0), #bufStrict(32, SIGR0), #bufStrict(32, SIGS0) ) - andBool #ecrecEmpty( #bufStrict(32, HASH), #bufStrict(32, SIGV1), #bufStrict(32, SIGR1), #bufStrict(32, SIGS1) ) - -endmodule - diff --git a/tests/specs/benchmarks/ecrecoverloop02-sigs-valid-spec.k b/tests/specs/benchmarks/ecrecoverloop02-sigs-valid-spec.k deleted file mode 100644 index f73edf7c63..0000000000 --- a/tests/specs/benchmarks/ecrecoverloop02-sigs-valid-spec.k +++ /dev/null @@ -1,145 +0,0 @@ -requires "verification.k" - -module ECRECOVERLOOP02-SIGS-VALID-SPEC - imports VERIFICATION - - // fn-execute-sigs-valid - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => .Bytes - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633543d4b214610046575b600080fd5b34801561005257600080fd5b506101da600480360361010081101561006a57600080fd5b81019080803590602001909291908035906020019064010000000081111561009157600080fd5b8201836020820111156100a357600080fd5b803590602001918460018302840111640100000000831117156100c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f82011690508083019250505050505091929192905050506101dc565b005b60008090505b60028110156102d557600060018786846002811015156101fe57fe5b6020020151868560028110151561021157fe5b6020020151868660028110151561022457fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610280573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161115156102c757600080fd5b5080806001019150506101e2565b50505050505056fea165627a7a723058200e559ecf0b4ed3978069fd9e401adb4043ef711a33a5926f0e081d7bcdf08bb80029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633543d4b214610046575b600080fd5b34801561005257600080fd5b506101da600480360361010081101561006a57600080fd5b81019080803590602001909291908035906020019064010000000081111561009157600080fd5b8201836020820111156100a357600080fd5b803590602001918460018302840111640100000000831117156100c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f82011690508083019250505050505091929192905050506101dc565b005b60008090505b60028110156102d557600060018786846002811015156101fe57fe5b6020020151868560028110151561021157fe5b6020020151868660028110151561022457fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610280573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161115156102c757600080fd5b5080806001019150506101e2565b50505050505056fea165627a7a723058200e559ecf0b4ed3978069fd9e401adb4043ef711a33a5926f0e081d7bcdf08bb80029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData2("execute(bytes32,bytes,uint8[2],bytes32[2],bytes32[2])", -#bytes32(HASH), #bytes(#bufStrict(DATA_LEN,DATA)), -#uint8(SIGV0), #uint8(SIGV1), -#bytes32(SIGR0), #bytes32(SIGR1), -#bytes32(SIGS0), #bytes32(SIGS1)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633543d4b214610046575b600080fd5b34801561005257600080fd5b506101da600480360361010081101561006a57600080fd5b81019080803590602001909291908035906020019064010000000081111561009157600080fd5b8201836020820111156100a357600080fd5b803590602001918460018302840111640100000000831117156100c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f82011690508083019250505050505091929192905050506101dc565b005b60008090505b60028110156102d557600060018786846002811015156101fe57fe5b6020020151868560028110151561021157fe5b6020020151868660028110151561022457fe5b602002015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610280573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161115156102c757600080fd5b5080806001019150506101e2565b50505050505056fea165627a7a723058200e559ecf0b4ed3978069fd9e401adb4043ef711a33a5926f0e081d7bcdf08bb80029") - -_ - - -_ - - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - - // Account address normality - andBool CONTRACT_ID >Int 0 andBool (notBool #isPrecompiledAccount(CONTRACT_ID, BYZANTIUM)) - andBool CALLEE_ID >Int 0 andBool (notBool #isPrecompiledAccount(CALLEE_ID , BYZANTIUM)) - - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV0) - andBool #rangeUInt(8, SIGV1) - andBool #rangeBytes(32, SIGR0) - andBool #rangeBytes(32, SIGR1) - andBool #rangeBytes(32, SIGS0) - andBool #rangeBytes(32, SIGS1) - andBool #range(0 <= DATA_LEN < pow16) - andBool #range(0 <= DATA < (2 ^Int (DATA_LEN *Int 8))) - andBool notBool #ecrecEmpty(#bufStrict(32, HASH), #bufStrict(32, SIGV0), #bufStrict(32, SIGR0), #bufStrict(32, SIGS0)) - andBool notBool #ecrecEmpty(#bufStrict(32, HASH), #bufStrict(32, SIGV1), #bufStrict(32, SIGR1), #bufStrict(32, SIGS1)) - -endmodule - diff --git a/tests/specs/benchmarks/ecrecoverloop02.sol b/tests/specs/benchmarks/ecrecoverloop02.sol deleted file mode 100644 index 4ac5cb3639..0000000000 --- a/tests/specs/benchmarks/ecrecoverloop02.sol +++ /dev/null @@ -1,10 +0,0 @@ -pragma solidity 0.5.0; -contract ecrecoverloop02 { - function execute(bytes32 hash, bytes memory data, - uint8[2] memory sigV, bytes32[2] memory sigR, bytes32[2] memory sigS) pure public { - for (uint i = 0; i < 2; i++) { - address recovered = ecrecover(hash, sigV[i], sigR[i], sigS[i]); - require(recovered > address(0)); - } - } -} \ No newline at end of file diff --git a/tests/specs/benchmarks/encode-keccak00-spec.k b/tests/specs/benchmarks/encode-keccak00-spec.k deleted file mode 100644 index 03f297393c..0000000000 --- a/tests/specs/benchmarks/encode-keccak00-spec.k +++ /dev/null @@ -1,127 +0,0 @@ -requires "verification.k" - -module ENCODE-KECCAK00-SPEC - imports VERIFICATION - - // fn-execute - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => #encodeArgs(#bytes32(keccak(#encodeArgs(#bytes32(A0), #bytes32(A1))))) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063b94ccd6c14610046575b600080fd5b34801561005257600080fd5b50610083600480360381019080803560001916906020019092919080356000191690602001909291905050506100a1565b60405180826000191660001916815260200191505060405180910390f35b600082826040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561011057805182526020820191506020810190506020830392506100eb565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050929150505600a165627a7a723058204b66bf85bf879ad4b61d351300c14b3cdc5242a222464edc4d16b1d1cec329f60029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063b94ccd6c14610046575b600080fd5b34801561005257600080fd5b50610083600480360381019080803560001916906020019092919080356000191690602001909291905050506100a1565b60405180826000191660001916815260200191505060405180910390f35b600082826040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561011057805182526020820191506020810190506020830392506100eb565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050929150505600a165627a7a723058204b66bf85bf879ad4b61d351300c14b3cdc5242a222464edc4d16b1d1cec329f60029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", #bytes32(A0), #bytes32(A1)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063b94ccd6c14610046575b600080fd5b34801561005257600080fd5b50610083600480360381019080803560001916906020019092919080356000191690602001909291905050506100a1565b60405180826000191660001916815260200191505060405180910390f35b600082826040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561011057805182526020820191506020810190506020830392506100eb565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050929150505600a165627a7a723058204b66bf85bf879ad4b61d351300c14b3cdc5242a222464edc4d16b1d1cec329f60029") - -_ - - -_ - - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #rangeUInt(256, A0) - andBool #rangeUInt(256, A1) - -endmodule - diff --git a/tests/specs/benchmarks/encode-keccak00.sol b/tests/specs/benchmarks/encode-keccak00.sol deleted file mode 100644 index 18cf12d541..0000000000 --- a/tests/specs/benchmarks/encode-keccak00.sol +++ /dev/null @@ -1,6 +0,0 @@ -pragma solidity 0.4.24; -contract encode_keccak00 { - function execute(bytes32 a0, bytes32 a1) pure external returns(bytes32) { - return keccak256(abi.encode(a0, a1)); - } -} \ No newline at end of file diff --git a/tests/specs/benchmarks/encodepacked-keccak01-spec.k b/tests/specs/benchmarks/encodepacked-keccak01-spec.k deleted file mode 100644 index 32016f1fa1..0000000000 --- a/tests/specs/benchmarks/encodepacked-keccak01-spec.k +++ /dev/null @@ -1,126 +0,0 @@ -requires "verification.k" - -module ENCODEPACKED-KECCAK01-SPEC - imports VERIFICATION - - // fn-execute - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => #encodeArgs(#bytes32(keccak(1 : #encodeArgs(#uint256(A0))))) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063e751f27114610046575b600080fd5b34801561005257600080fd5b5061007f6004803603602081101561006957600080fd5b8101908080359060200190929190505050610095565b6040518082815260200191505060405180910390f35b600060017f0100000000000000000000000000000000000000000000000000000000000000028260405160200180837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018281526020019250505060405160208183030381529060405280519060200120905091905056fea165627a7a723058203520bb36206a4f2e5d339c6abf58e023923d22de47e6cc79455e9b349f2c3a2a0029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063e751f27114610046575b600080fd5b34801561005257600080fd5b5061007f6004803603602081101561006957600080fd5b8101908080359060200190929190505050610095565b6040518082815260200191505060405180910390f35b600060017f0100000000000000000000000000000000000000000000000000000000000000028260405160200180837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018281526020019250505060405160208183030381529060405280519060200120905091905056fea165627a7a723058203520bb36206a4f2e5d339c6abf58e023923d22de47e6cc79455e9b349f2c3a2a0029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", #bytes32(A0)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063e751f27114610046575b600080fd5b34801561005257600080fd5b5061007f6004803603602081101561006957600080fd5b8101908080359060200190929190505050610095565b6040518082815260200191505060405180910390f35b600060017f0100000000000000000000000000000000000000000000000000000000000000028260405160200180837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018281526020019250505060405160208183030381529060405280519060200120905091905056fea165627a7a723058203520bb36206a4f2e5d339c6abf58e023923d22de47e6cc79455e9b349f2c3a2a0029") - -_ - - -_ - - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #rangeUInt(256, A0) - -endmodule - diff --git a/tests/specs/benchmarks/encodepacked-keccak01.sol b/tests/specs/benchmarks/encodepacked-keccak01.sol deleted file mode 100644 index 8b90eacd60..0000000000 --- a/tests/specs/benchmarks/encodepacked-keccak01.sol +++ /dev/null @@ -1,6 +0,0 @@ -pragma solidity 0.5.0; -contract encodepacked_keccak01 { - function execute(bytes32 a0) pure external returns(bytes32) { - return keccak256(abi.encodePacked(byte(0x01), a0)); - } -} \ No newline at end of file diff --git a/tests/specs/benchmarks/functional-spec.k b/tests/specs/benchmarks/functional-spec.k deleted file mode 100644 index bfb4a179a3..0000000000 --- a/tests/specs/benchmarks/functional-spec.k +++ /dev/null @@ -1,120 +0,0 @@ -requires "verification.k" - -module FUNCTIONAL-SPEC-SYNTAX - imports VERIFICATION - - syntax KItem ::= runLemma ( Step ) | doneLemma ( Step ) - // ------------------------------------------------------- - rule runLemma(S) => doneLemma(S) ... - - syntax Step ::= Bytes | Int | Bool - // ---------------------------------- - -endmodule - -module FUNCTIONAL-SPEC - imports FUNCTIONAL-SPEC-SYNTAX - - claim runLemma (#range (_B [ 128 := #ecrec ( #buf ( 32 , HASH ) , #buf ( 32 , SIGV ) , #buf ( 32 , SIGR ) , #buf ( 32 , SIGS ) ) ] [ 160 := #buf ( 32 , HASH ) ] [ 192 := #buf ( 32 , SIGV ) ] [ 224 := #buf ( 32 , SIGR ) ] [ 256 := #buf ( 32 , SIGS ) ] [ 160 := #padToWidth ( 32 , #asByteStack ( #asWord ( #ecrec ( #buf ( 32 , HASH ) , #buf ( 32 , SIGV ) , #buf ( 32 , SIGR ) , #buf ( 32 , SIGS ) ) ) ) ) ] , 160 , 32 )) => doneLemma (#buf(32, RECOVERED)) ... - requires notBool #ecrecEmpty(#bufStrict(32, HASH), #bufStrict(32, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS)) - andBool RECOVERED ==Int #asWord(#ecrec(#bufStrict(32, HASH), #bufStrict(32, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS))) - andBool #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV) - andBool #rangeBytes(32, SIGR) - andBool #rangeBytes(32, SIGS) - - claim runLemma ( lengthBytes ( #ecrec ( #buf ( 32 , HASH ) , #buf ( 32 , 255 &Int SIGV ) , #buf ( 32 , SIGR ) , #buf ( 32 , SIGS ) ) ) ) => doneLemma ( 0 ) ... - requires #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV) - andBool #rangeBytes(32, SIGR) - andBool #rangeBytes(32, SIGS) - andBool #ecrecEmpty ( #buf ( 32 , HASH ) , #buf ( 32 , SIGV ) , #buf ( 32 , SIGR ) , #buf ( 32 , SIGS ) ) - - claim runLemma(#encodeArgs(#bytes32(keccak(1 : #encodeArgs(#uint256(A0)))))) => doneLemma(#buf(32, keccak(#buf(1,1) +Bytes #buf(32, A0)))) ... requires #rangeUInt(256, A0) - - claim runLemma(#buf(32, maxUInt256 &Int keccak(#buf(32, maxUInt256 &Int A0) +Bytes #buf(32, maxUInt256 &Int A1)))) - => doneLemma(#buf(32, keccak(#buf(32,A0) +Bytes #buf(32,A1)))) ... - requires #rangeUInt(256, A0) - andBool #rangeUInt(256, A1) - - claim runLemma( chop( #ceil32(DATA_LEN) +Int 64 ) ) => doneLemma ( #ceil32(DATA_LEN) +Int 64 ) ... requires #range(0 <= DATA_LEN < pow16) - claim runLemma( chop( chop( #ceil32(DATA_LEN) +Int 64 ) +Int 4 ) ) => doneLemma ( #ceil32(DATA_LEN) +Int 68 ) ... requires #range(0 <= DATA_LEN < pow16) - - claim runLemma(#ceil32(DATA_LEN) +Int 292 doneLemma(false) ... requires #range(0 <= DATA_LEN < pow16) - - claim runLemma(#buf(4, 0) +Bytes (#buf(32, 6) +Bytes BA:Bytes)) => doneLemma(#buf(36, 6) +Bytes BA:Bytes) ... - - claim runLemma(#range( (112 : 190 : 104 : 75 : (#buf(32, A0) +Bytes #buf(32, A1))), 0, 32)) => doneLemma(112 : 190 : 104 : 75 : (#range(#buf(32, A0), 0, 28))) ... requires #rangeUInt(256, A0) andBool #rangeUInt(256, A1) - claim runLemma(#range( (112 : 190 : 104 : 75 : (#buf(32, A0) +Bytes #buf(32, A1))), 0, 4)) => doneLemma(112 : 190 : 104 : 75 : .Bytes) ... requires #rangeUInt(256, A0) andBool #rangeUInt(256, A1) - - claim runLemma(#asWord(112 : 190 : 104 : 74 : #buf(28, A0)) /Int pow224) => doneLemma(1891526730) ... requires #rangeUInt(224, A0) - - claim runLemma( minInt(32, lengthBytes(#ecrec(#bufStrict(32, HASH), #bufStrict(1, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS))))) => doneLemma(32) ... - requires #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV) - andBool #rangeBytes(32, SIGR) - andBool #rangeBytes(32, SIGS) - andBool notBool #ecrecEmpty(#bufStrict(32, HASH), #bufStrict(1, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS)) - - claim runLemma( #range( _:Bytes [ 128 := #ecrec(#bufStrict(32, HASH), #bufStrict(1, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS)) ], 128, 32)) - => doneLemma(#ecrec(#buf(32, HASH), #buf(1, SIGV), #buf(32, SIGR), #buf(32, SIGS))) ... - requires #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV) - andBool #rangeBytes(32, SIGR) - andBool #rangeBytes(32, SIGS) - andBool notBool #ecrecEmpty(#bufStrict(32, HASH), #bufStrict(1, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS)) - - claim runLemma(lengthBytes(#ecrec(#bufStrict(32, HASH), #bufStrict(32, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS)))) => doneLemma(0) ... - requires #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV) - andBool #rangeBytes(32, SIGR) - andBool #rangeBytes(32, SIGS) - andBool #ecrecEmpty(#bufStrict(32, HASH), #bufStrict(32, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS)) - - claim runLemma(lengthBytes(#ecrec(#bufStrict(32, HASH), #bufStrict(32, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS)))) => doneLemma(32) ... - requires #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV) - andBool #rangeBytes(32, SIGR) - andBool #rangeBytes(32, SIGS) - andBool notBool #ecrecEmpty(#bufStrict(32, HASH), #bufStrict(32, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS)) - - - claim runLemma(0 doneLemma(true) ... - requires #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV) - andBool #rangeBytes(32, SIGR) - andBool #rangeBytes(32, SIGS) - andBool notBool #ecrecEmpty(#bufStrict(32, HASH), #bufStrict(32, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS)) - - claim runLemma(maxUInt160 &Int #asWord(#ecrec(#bufStrict(32, HASH), #bufStrict(32, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS)))) => doneLemma(#asWord(#ecrec(#bufStrict(32, HASH), #bufStrict(32, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS)))) ... - requires #rangeUInt(256, HASH) - andBool #rangeUInt(8, SIGV) - andBool #rangeBytes(32, SIGR) - andBool #rangeBytes(32, SIGS) - andBool notBool #ecrecEmpty(#bufStrict(32, HASH), #bufStrict(32, SIGV), #bufStrict(32, SIGR), #bufStrict(32, SIGS)) - - claim runLemma(#range( .Bytes [ 0 := #bufStrict(0, 0) ], 0, 1)) - => doneLemma(#buf(1, 0)) ... - - claim runLemma(#range( .Bytes [ 0 := #bufStrict(2, 0) ], 0, 1)) - => doneLemma(#buf(1, 0)) ... - - claim runLemma(#range( .Bytes [ 0 := #bufStrict(10, 0) ], 5, 1)) - => doneLemma(#buf(1, 0)) ... - - claim runLemma(#range( .Bytes [ 0 := #bufStrict(5, 0) ], 0, 3)) - => doneLemma(#buf(3, 0)) ... - - claim runLemma(#range( .Bytes [ 0 := #bufStrict(100, 0) ] [ 10 := #bufStrict(N, 0) ], 10, 5 )) => - doneLemma(#range(#bufStrict(N, 0), 10 -Int 10, minInt(5, lengthBytes(#bufStrict(N, 0)) -Int (10 -Int 10)) ) +Bytes #range( .Bytes [ 0 := #bufStrict(100, 0) ], 10 +Int lengthBytes(#bufStrict(N, 0)), 5 -Int minInt(5, lengthBytes(#bufStrict(N, 0)) -Int (10 -Int 10)))) - - requires N >=Int 0 - andBool N <=Int 5 - - claim runLemma(#range( .Bytes [0 := #bufStrict(100, 0) ] [ 10 := #bufStrict(N, 0) ], 13, 5 )) => - doneLemma(#range(#bufStrict(N, 0), 13 -Int 10, minInt(5, lengthBytes(#bufStrict(N, 0)) -Int (13 -Int 10)) ) +Bytes #range( .Bytes [ 0 := #bufStrict(100, 0) ], 10 +Int lengthBytes(#bufStrict(N, 0)), 5 -Int minInt(5, lengthBytes(#bufStrict(N, 0)) -Int (13 -Int 10)))) - - requires N >=Int 5 - andBool N <=Int 10 - -endmodule diff --git a/tests/specs/benchmarks/index.html b/tests/specs/benchmarks/index.html new file mode 100644 index 0000000000..b9c998f828 --- /dev/null +++ b/tests/specs/benchmarks/index.html @@ -0,0 +1,181 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Specs generated from https://github.com/denis-bogdanas/kevm-verify-benchmarks/tree/jenkins-support +, for all directories starting with 0-. Originally developed by Suhabe Bugrara.

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + diff --git a/tests/specs/benchmarks/keccak00-spec.k b/tests/specs/benchmarks/keccak00-spec.k deleted file mode 100644 index 9d8799ce1e..0000000000 --- a/tests/specs/benchmarks/keccak00-spec.k +++ /dev/null @@ -1,127 +0,0 @@ -requires "verification.k" - -module KECCAK00-SPEC - imports VERIFICATION - - // fn-execute - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => #encodeArgs(#bytes32(keccak(#buf(DATA_LEN, DATA)))) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806309c5eabe146044575b600080fd5b348015604f57600080fd5b50607a6004803603810190808035906020019082018035906020019190919293919293905050506098565b60405180826000191660001916815260200191505060405180910390f35b600082826040518083838082843782019150509250505060405180910390209050929150505600a165627a7a72305820bc7bb160225c771a020b10383aac22cc86e16ac58b8b938b40d658bde052ff6a0029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806309c5eabe146044575b600080fd5b348015604f57600080fd5b50607a6004803603810190808035906020019082018035906020019190919293919293905050506098565b60405180826000191660001916815260200191505060405180910390f35b600082826040518083838082843782019150509250505060405180910390209050929150505600a165627a7a72305820bc7bb160225c771a020b10383aac22cc86e16ac58b8b938b40d658bde052ff6a0029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", #bytes(#bufStrict(DATA_LEN,DATA))) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806309c5eabe146044575b600080fd5b348015604f57600080fd5b50607a6004803603810190808035906020019082018035906020019190919293919293905050506098565b60405180826000191660001916815260200191505060405180910390f35b600082826040518083838082843782019150509250505060405180910390209050929150505600a165627a7a72305820bc7bb160225c771a020b10383aac22cc86e16ac58b8b938b40d658bde052ff6a0029") - -_ - - -_ - - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #range(0 <= DATA_LEN < pow16) - andBool #range(0 <= DATA < (2 ^Int (DATA_LEN *Int 8))) - -endmodule - diff --git a/tests/specs/benchmarks/keccak00.sol b/tests/specs/benchmarks/keccak00.sol deleted file mode 100644 index 0c1cea3b78..0000000000 --- a/tests/specs/benchmarks/keccak00.sol +++ /dev/null @@ -1,6 +0,0 @@ -pragma solidity 0.4.24; -contract keccak00 { - function execute(bytes x) pure external returns(bytes32) { - return keccak256(x); - } -} \ No newline at end of file diff --git a/tests/specs/benchmarks/overflow00-nooverflow-spec.k b/tests/specs/benchmarks/overflow00-nooverflow-spec.k deleted file mode 100644 index 091ca7664c..0000000000 --- a/tests/specs/benchmarks/overflow00-nooverflow-spec.k +++ /dev/null @@ -1,126 +0,0 @@ -requires "verification.k" - -module OVERFLOW00-NOOVERFLOW-SPEC - imports VERIFICATION - - // fn-execute-nooverflow - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => #encodeArgs(#uint256(A0 +Int 1)) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fe0d94c1146044575b600080fd5b348015604f57600080fd5b50607960048036036020811015606457600080fd5b8101908080359060200190929190505050608f565b6040518082815260200191505060405180910390f35b6000806001830190508091505091905056fea165627a7a72305820fbb52294b87f58c290f1b4a624b5152e0dd074db32048a743b8ff993cc4cf6180029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fe0d94c1146044575b600080fd5b348015604f57600080fd5b50607960048036036020811015606457600080fd5b8101908080359060200190929190505050608f565b6040518082815260200191505060405180910390f35b6000806001830190508091505091905056fea165627a7a72305820fbb52294b87f58c290f1b4a624b5152e0dd074db32048a743b8ff993cc4cf6180029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", #uint256(A0)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fe0d94c1146044575b600080fd5b348015604f57600080fd5b50607960048036036020811015606457600080fd5b8101908080359060200190929190505050608f565b6040518082815260200191505060405180910390f35b6000806001830190508091505091905056fea165627a7a72305820fbb52294b87f58c290f1b4a624b5152e0dd074db32048a743b8ff993cc4cf6180029") - -_ - - -_ - - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #range(0 <= A0 < pow256 -Int 1) - -endmodule - diff --git a/tests/specs/benchmarks/overflow00-overflow-spec.k b/tests/specs/benchmarks/overflow00-overflow-spec.k deleted file mode 100644 index bc1f7d9837..0000000000 --- a/tests/specs/benchmarks/overflow00-overflow-spec.k +++ /dev/null @@ -1,126 +0,0 @@ -requires "verification.k" - -module OVERFLOW00-OVERFLOW-SPEC - imports VERIFICATION - - // fn-execute-overflow - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => #encodeArgs(#uint256(0)) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fe0d94c1146044575b600080fd5b348015604f57600080fd5b50607960048036036020811015606457600080fd5b8101908080359060200190929190505050608f565b6040518082815260200191505060405180910390f35b6000806001830190508091505091905056fea165627a7a72305820fbb52294b87f58c290f1b4a624b5152e0dd074db32048a743b8ff993cc4cf6180029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fe0d94c1146044575b600080fd5b348015604f57600080fd5b50607960048036036020811015606457600080fd5b8101908080359060200190929190505050608f565b6040518082815260200191505060405180910390f35b6000806001830190508091505091905056fea165627a7a72305820fbb52294b87f58c290f1b4a624b5152e0dd074db32048a743b8ff993cc4cf6180029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", #uint256(A0)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fe0d94c1146044575b600080fd5b348015604f57600080fd5b50607960048036036020811015606457600080fd5b8101908080359060200190929190505050608f565b6040518082815260200191505060405180910390f35b6000806001830190508091505091905056fea165627a7a72305820fbb52294b87f58c290f1b4a624b5152e0dd074db32048a743b8ff993cc4cf6180029") - -_ - - -_ - - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool A0 ==Int pow256 -Int 1 - -endmodule - diff --git a/tests/specs/benchmarks/overflow00.sol b/tests/specs/benchmarks/overflow00.sol deleted file mode 100644 index 302947ab6f..0000000000 --- a/tests/specs/benchmarks/overflow00.sol +++ /dev/null @@ -1,7 +0,0 @@ -pragma solidity 0.5.0; -contract overflow00 { - function execute(uint a0) public returns(uint) { - uint n = a0 + 1; - return n; - } -} \ No newline at end of file diff --git a/tests/specs/benchmarks/requires01-a0gt0-spec.k b/tests/specs/benchmarks/requires01-a0gt0-spec.k deleted file mode 100644 index e3bb1ec25c..0000000000 --- a/tests/specs/benchmarks/requires01-a0gt0-spec.k +++ /dev/null @@ -1,123 +0,0 @@ -requires "verification.k" - -module REQUIRES01-A0GT0-SPEC - imports VERIFICATION - - // fn-execute-a0gt0 - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => #encodeArgs(#uint256(5)) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fe0d94c1146044575b600080fd5b348015604f57600080fd5b50606c6004803603810190808035906020019092919050505060ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000808211151560bd57600080fd5b600590509190505600a165627a7a72305820885b6ddc678a06d1bd68f28d6a516e4fb72fb2d325ac780ffc7605ac95a408390029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fe0d94c1146044575b600080fd5b348015604f57600080fd5b50606c6004803603810190808035906020019092919050505060ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000808211151560bd57600080fd5b600590509190505600a165627a7a72305820885b6ddc678a06d1bd68f28d6a516e4fb72fb2d325ac780ffc7605ac95a408390029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", #uint256(A0)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fe0d94c1146044575b600080fd5b348015604f57600080fd5b50606c6004803603810190808035906020019092919050505060ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000808211151560bd57600080fd5b600590509190505600a165627a7a72305820885b6ddc678a06d1bd68f28d6a516e4fb72fb2d325ac780ffc7605ac95a408390029") - _S - _OS - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #rangeUInt(256, A0) - andBool A0 >Int 0 - -endmodule - diff --git a/tests/specs/benchmarks/requires01-a0le0-spec.k b/tests/specs/benchmarks/requires01-a0le0-spec.k deleted file mode 100644 index 1f944f7029..0000000000 --- a/tests/specs/benchmarks/requires01-a0le0-spec.k +++ /dev/null @@ -1,122 +0,0 @@ -requires "verification.k" - -module REQUIRES01-A0LE0-SPEC - imports VERIFICATION - - // fn-execute-a0le0 - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => ?_ - _ => EVMC_REVERT - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fe0d94c1146044575b600080fd5b348015604f57600080fd5b50606c6004803603810190808035906020019092919050505060ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000808211151560bd57600080fd5b600590509190505600a165627a7a72305820885b6ddc678a06d1bd68f28d6a516e4fb72fb2d325ac780ffc7605ac95a408390029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fe0d94c1146044575b600080fd5b348015604f57600080fd5b50606c6004803603810190808035906020019092919050505060ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000808211151560bd57600080fd5b600590509190505600a165627a7a72305820885b6ddc678a06d1bd68f28d6a516e4fb72fb2d325ac780ffc7605ac95a408390029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", #uint256(A0)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fe0d94c1146044575b600080fd5b348015604f57600080fd5b50606c6004803603810190808035906020019092919050505060ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000808211151560bd57600080fd5b600590509190505600a165627a7a72305820885b6ddc678a06d1bd68f28d6a516e4fb72fb2d325ac780ffc7605ac95a408390029") - _S - _OS - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #rangeUInt(256, A0) - andBool A0 <=Int 0 - -endmodule diff --git a/tests/specs/benchmarks/requires01.sol b/tests/specs/benchmarks/requires01.sol deleted file mode 100644 index bc5520c18d..0000000000 --- a/tests/specs/benchmarks/requires01.sol +++ /dev/null @@ -1,8 +0,0 @@ -pragma solidity 0.4.24; -contract requires01 { - function execute(uint256 a0) public returns (address) { - require(a0 > 0); - return 5; - } -} - diff --git a/tests/specs/benchmarks/staticarray00-spec.k b/tests/specs/benchmarks/staticarray00-spec.k deleted file mode 100644 index 3c48b0b329..0000000000 --- a/tests/specs/benchmarks/staticarray00-spec.k +++ /dev/null @@ -1,128 +0,0 @@ -requires "verification.k" - -module STATICARRAY00-SPEC - imports VERIFICATION - - // fn-execute - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => #encodeArgs(#uint256(A0)) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806370be684b146044575b600080fd5b348015604f57600080fd5b506091600480360381019080806060019060038060200260405190810160405280929190826003602002808284378201915050505050919291929050505060a7565b6040518082815260200191505060405180910390f35b600081600060038110151560b757fe5b602002015190509190505600a165627a7a72305820f933900bbad49f9329cff0a7f38c1eafbf37ee141efe28f6296e158e1fcb137a0029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806370be684b146044575b600080fd5b348015604f57600080fd5b506091600480360381019080806060019060038060200260405190810160405280929190826003602002808284378201915050505050919291929050505060a7565b6040518082815260200191505060405180910390f35b600081600060038110151560b757fe5b602002015190509190505600a165627a7a72305820f933900bbad49f9329cff0a7f38c1eafbf37ee141efe28f6296e158e1fcb137a0029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData2("execute(uint256[3])", #uint256(A0), #uint256(A1), #uint256(A2)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806370be684b146044575b600080fd5b348015604f57600080fd5b506091600480360381019080806060019060038060200260405190810160405280929190826003602002808284378201915050505050919291929050505060a7565b6040518082815260200191505060405180910390f35b600081600060038110151560b757fe5b602002015190509190505600a165627a7a72305820f933900bbad49f9329cff0a7f38c1eafbf37ee141efe28f6296e158e1fcb137a0029") - -_ - - -_ - - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #rangeUInt(256, A0) - andBool #rangeUInt(256, A1) - andBool #rangeUInt(256, A2) - -endmodule - diff --git a/tests/specs/benchmarks/staticarray00.sol b/tests/specs/benchmarks/staticarray00.sol deleted file mode 100644 index c2b8149a93..0000000000 --- a/tests/specs/benchmarks/staticarray00.sol +++ /dev/null @@ -1,7 +0,0 @@ -pragma solidity 0.4.24; -contract staticarray00 { - function execute(uint[3] a) public returns (uint) { - return a[0]; - } -} - diff --git a/tests/specs/benchmarks/staticloop00-a0lt10-spec.k b/tests/specs/benchmarks/staticloop00-a0lt10-spec.k deleted file mode 100644 index 595f75970c..0000000000 --- a/tests/specs/benchmarks/staticloop00-a0lt10-spec.k +++ /dev/null @@ -1,126 +0,0 @@ -requires "verification.k" - -module STATICLOOP00-A0LT10-SPEC - imports VERIFICATION - - // fn-execute-a0lt10 - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => #encodeArgs(#uint256(A0 +Int 3)) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fe0d94c1146044575b600080fd5b348015604f57600080fd5b50607960048036036020811015606457600080fd5b8101908080359060200190929190505050608f565b6040518082815260200191505060405180910390f35b600080829050600a8310151560a357600080fd5b60008090505b600381101560c2578082019150808060010191505060a9565b508091505091905056fea165627a7a72305820e9eae4d836605e8f28df860b8f590e6cd933ddcbf111d99767c764aa99f093900029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fe0d94c1146044575b600080fd5b348015604f57600080fd5b50607960048036036020811015606457600080fd5b8101908080359060200190929190505050608f565b6040518082815260200191505060405180910390f35b600080829050600a8310151560a357600080fd5b60008090505b600381101560c2578082019150808060010191505060a9565b508091505091905056fea165627a7a72305820e9eae4d836605e8f28df860b8f590e6cd933ddcbf111d99767c764aa99f093900029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", #uint256(A0)) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fe0d94c1146044575b600080fd5b348015604f57600080fd5b50607960048036036020811015606457600080fd5b8101908080359060200190929190505050608f565b6040518082815260200191505060405180910390f35b600080829050600a8310151560a357600080fd5b60008090505b600381101560c2578082019150808060010191505060a9565b508091505091905056fea165627a7a72305820e9eae4d836605e8f28df860b8f590e6cd933ddcbf111d99767c764aa99f093900029") - -_ - - -_ - - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #range(0 <= A0 < 10) - -endmodule - diff --git a/tests/specs/benchmarks/staticloop00.sol b/tests/specs/benchmarks/staticloop00.sol deleted file mode 100644 index 27163a9646..0000000000 --- a/tests/specs/benchmarks/staticloop00.sol +++ /dev/null @@ -1,11 +0,0 @@ -pragma solidity 0.5.0; -contract staticloop00 { - function execute(uint a0) pure external returns(uint256) { - uint sum = a0; - require (a0 < 10); - for (uint i = 0; i < 3; i++) { - sum += i; - } - return sum; - } -} diff --git a/tests/specs/benchmarks/storagevar00-spec.k b/tests/specs/benchmarks/storagevar00-spec.k deleted file mode 100644 index 991daab3ed..0000000000 --- a/tests/specs/benchmarks/storagevar00-spec.k +++ /dev/null @@ -1,119 +0,0 @@ -requires "verification.k" - -module STORAGEVAR00-SPEC - imports VERIFICATION - - // fn-execute - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => #encodeArgs(#uint256(N)) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806361461954146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b6000805490509056fea165627a7a7230582042a42ab720fca3a1db0ba7ac19c662cf1a6fb8fdb252593eb42de55a510e09470029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806361461954146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b6000805490509056fea165627a7a7230582042a42ab720fca3a1db0ba7ac19c662cf1a6fb8fdb252593eb42de55a510e09470029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", .TypedArgs) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806361461954146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b6000805490509056fea165627a7a7230582042a42ab720fca3a1db0ba7ac19c662cf1a6fb8fdb252593eb42de55a510e09470029") - S - S - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - _S - _OS - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #rangeUInt(256, N) - andBool #lookup(S, #hashedLocation("Solidity", 0, .IntList)) ==Int N - -endmodule - diff --git a/tests/specs/benchmarks/storagevar00.sol b/tests/specs/benchmarks/storagevar00.sol deleted file mode 100644 index c41eef75bf..0000000000 --- a/tests/specs/benchmarks/storagevar00.sol +++ /dev/null @@ -1,8 +0,0 @@ -pragma solidity 0.5.0; -contract storagevar00 { - uint private n; - - function execute() view public returns(uint) { - return n; - } -} \ No newline at end of file diff --git a/tests/specs/benchmarks/storagevar01-spec.k b/tests/specs/benchmarks/storagevar01-spec.k deleted file mode 100644 index 0718ac22e7..0000000000 --- a/tests/specs/benchmarks/storagevar01-spec.k +++ /dev/null @@ -1,121 +0,0 @@ -requires "verification.k" - -module STORAGEVAR01-SPEC - imports VERIFICATION - - // fn-execute - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => #encodeArgs(#uint256(5)) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806361461954146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b6000600560008190555060005490509056fea165627a7a723058208e118da62d2a0da493acb1e41710779922db5b5cf40e1413cbe69a7d2933c9a50029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806361461954146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b6000600560008190555060005490509056fea165627a7a723058208e118da62d2a0da493acb1e41710779922db5b5cf40e1413cbe69a7d2933c9a50029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", .TypedArgs) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ => ?_ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806361461954146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b6000600560008190555060005490509056fea165627a7a723058208e118da62d2a0da493acb1e41710779922db5b5cf40e1413cbe69a7d2933c9a50029") - S => S [ #hashedLocation("Solidity", 0, .IntList) <- 5 ] - _OS => ?_OS - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - -endmodule - diff --git a/tests/specs/benchmarks/storagevar01.sol b/tests/specs/benchmarks/storagevar01.sol deleted file mode 100644 index 0fdc8074d6..0000000000 --- a/tests/specs/benchmarks/storagevar01.sol +++ /dev/null @@ -1,9 +0,0 @@ -pragma solidity 0.5.0; -contract storagevar01 { - uint private n; - - function execute() public returns(uint) { - n = 5; - return n; - } -} \ No newline at end of file diff --git a/tests/specs/benchmarks/storagevar02-nooverflow-spec.k b/tests/specs/benchmarks/storagevar02-nooverflow-spec.k deleted file mode 100644 index 6b423b08b4..0000000000 --- a/tests/specs/benchmarks/storagevar02-nooverflow-spec.k +++ /dev/null @@ -1,124 +0,0 @@ -requires "verification.k" - -module STORAGEVAR02-NOOVERFLOW-SPEC - imports VERIFICATION - - // fn-execute-nooverflow - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => #encodeArgs(#uint256(N0 +Int 1)) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806361461954146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b600060016000540160008190555060005490509056fea165627a7a7230582084ad795d13123f60bc7fd2a18dba66eb8d320ddea8765847f2ae5982179470600029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806361461954146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b600060016000540160008190555060005490509056fea165627a7a7230582084ad795d13123f60bc7fd2a18dba66eb8d320ddea8765847f2ae5982179470600029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", .TypedArgs) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ => ?_ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806361461954146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b600060016000540160008190555060005490509056fea165627a7a7230582084ad795d13123f60bc7fd2a18dba66eb8d320ddea8765847f2ae5982179470600029") - S => S [ #hashedLocation("Solidity", 0, .IntList) <- N0 +Int 1 ] - _OS => ?_OS - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #range(0 <= N0 < pow256) - andBool #range(0 <= N0 +Int 1 < pow256) - andBool #lookup(S, #hashedLocation("Solidity", 0, .IntList)) ==Int N0 - -endmodule - diff --git a/tests/specs/benchmarks/storagevar02-overflow-spec.k b/tests/specs/benchmarks/storagevar02-overflow-spec.k deleted file mode 100644 index ff90f79cca..0000000000 --- a/tests/specs/benchmarks/storagevar02-overflow-spec.k +++ /dev/null @@ -1,122 +0,0 @@ -requires "verification.k" - -module STORAGEVAR02-OVERFLOW-SPEC - imports VERIFICATION - - // fn-execute-overflow - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => #encodeArgs(#uint256(0)) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806361461954146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b600060016000540160008190555060005490509056fea165627a7a7230582084ad795d13123f60bc7fd2a18dba66eb8d320ddea8765847f2ae5982179470600029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806361461954146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b600060016000540160008190555060005490509056fea165627a7a7230582084ad795d13123f60bc7fd2a18dba66eb8d320ddea8765847f2ae5982179470600029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", .TypedArgs) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ => ?_ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _BLOCK_HASHES // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806361461954146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b600060016000540160008190555060005490509056fea165627a7a7230582084ad795d13123f60bc7fd2a18dba66eb8d320ddea8765847f2ae5982179470600029") - S => S [ #hashedLocation("Solidity", 0, .IntList) <- 0 ] - _OS => ?_OS - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - andBool #lookup(S, #hashedLocation("Solidity", 0, .IntList)) ==Int pow256 -Int 1 - -endmodule - diff --git a/tests/specs/benchmarks/storagevar02.sol b/tests/specs/benchmarks/storagevar02.sol deleted file mode 100644 index 03c1daa7b0..0000000000 --- a/tests/specs/benchmarks/storagevar02.sol +++ /dev/null @@ -1,9 +0,0 @@ -pragma solidity 0.5.0; -contract storagevar02 { - uint private n; - - function execute() public returns(uint) { - n = n + 1; - return n; - } -} \ No newline at end of file diff --git a/tests/specs/benchmarks/storagevar03-spec.k b/tests/specs/benchmarks/storagevar03-spec.k deleted file mode 100644 index 5e02595192..0000000000 --- a/tests/specs/benchmarks/storagevar03-spec.k +++ /dev/null @@ -1,121 +0,0 @@ -requires "verification.k" - -module STORAGEVAR03-SPEC - imports VERIFICATION - - // fn-execute - claim - (#execute => #halt) ~> _ - 1 - NORMAL - ISTANBUL - - - _ => ?_ - _ => EVMC_REVERT - _ - _ - _ => ?_ - - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806361461954146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b6000600560008190555060001515608257600080fd5b9056fea165627a7a723058206c2e2e763fa3e914d5806ac22d4cf3bd0ff53cd57740965d5e5d05934668a9110029") - #computeValidJumpDests(#parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806361461954146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b6000600560008190555060001515608257600080fd5b9056fea165627a7a723058206c2e2e763fa3e914d5806ac22d4cf3bd0ff53cd57740965d5e5d05934668a9110029")) - CONTRACT_ID // this - MSG_SENDER // msg.sender - #abiCallData("execute", .TypedArgs) // msg.data - 0 // msg.value - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - false // NOTE: non-static call - CD - - - _ - _ - _ => ?_ - _ => ?_ - _ => ?_ - - _ - _ // tx.origin - _ // block.blockhash - - _ - _ - _ // block.coinbase - _ - _ - _ - _ - _ - BLOCK_NUM // block.number - _ - _ - NOW // now = block.timestamp - _ - _ - _ - _ - _ - - - - _ - - - - CONTRACT_ID - CONTRACT_BAL - #parseByteStack("0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806361461954146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b6000600560008190555060001515608257600080fd5b9056fea165627a7a723058206c2e2e763fa3e914d5806ac22d4cf3bd0ff53cd57740965d5e5d05934668a9110029") - _S => ?_S - _OS - CONTRACT_NONCE - - - - CALLEE_ID - CALLEE_BAL - _ - - _ - - - _ - - CALLEE_NONCE - - - - // precompiled account for ECCREC - 1 - 0 - .Bytes - .Map - .Map - 0 - - - - ... - - _ - _ - _ - - - requires #rangeAddress(CONTRACT_ID) - andBool #rangeAddress(CALLEE_ID) - andBool #rangeUInt(256, NOW) - andBool #rangeUInt(128, BLOCK_NUM) // Solidity - andBool #rangeUInt(256, CONTRACT_BAL) - andBool #rangeUInt(256, CALLEE_BAL) - andBool #rangeNonce(CONTRACT_NONCE) - andBool #rangeNonce(CALLEE_NONCE) - andBool #range(0 <= CD < 1024) - andBool #rangeAddress(MSG_SENDER) - -endmodule - diff --git a/tests/specs/benchmarks/storagevar03.sol b/tests/specs/benchmarks/storagevar03.sol deleted file mode 100644 index 9227455470..0000000000 --- a/tests/specs/benchmarks/storagevar03.sol +++ /dev/null @@ -1,10 +0,0 @@ -pragma solidity 0.5.0; -contract storagevar03 { - uint private n; - - function execute() public returns(uint) { - n = 5; - require(false); - } -} - diff --git a/tests/specs/benchmarks/verification.k b/tests/specs/benchmarks/verification.k deleted file mode 100644 index 97eb856046..0000000000 --- a/tests/specs/benchmarks/verification.k +++ /dev/null @@ -1,154 +0,0 @@ -requires "lemmas/lemmas.k" -requires "edsl.md" - -module VERIFICATION-COMMON - imports LEMMAS - imports EDSL - - // ######################## - // Ecrecover - // ######################## - - //Symbolic predicate representing whether output of #ecrec is empty. No implementation. - syntax Bool ::= #ecrecEmpty( Bytes , Bytes , Bytes , Bytes ) [function, no-evaluators, smtlib(ecrecEmpty)] - // ---------------------------------------------------------------------------------------------------------- - rule lengthBytes(#ecrec(HASH, SIGV, SIGR, SIGS)) => 32 requires notBool #ecrecEmpty(HASH, SIGV, SIGR, SIGS) [simplification] - rule lengthBytes(#ecrec(HASH, SIGV, SIGR, SIGS)) => 0 requires #ecrecEmpty(HASH, SIGV, SIGR, SIGS) [simplification] - - rule #asWord(#ecrec(HASH, SIGV, SIGR, SIGS)) => 0 requires #ecrecEmpty(HASH, SIGV, SIGR, SIGS) [simplification] - rule 0 true requires notBool #ecrecEmpty(HASH, SIGV, SIGR, SIGS) [simplification] - rule 0 <=Int #asWord(#ecrec(_ , _ , _ , _ )) => true [simplification] - rule #asWord(#ecrec(_ , _ , _ , _ )) <=Int maxUInt160 => true [simplification] - - rule #Ceil( #ecrec(HASH, SIGV, SIGR, SIGS) ) => #Top - requires #ecrecEmpty(HASH, SIGV, SIGR, SIGS) [simplification] - - rule #Ceil( #ecrec(HASH, SIGV, SIGR, SIGS) ) => #Top - requires notBool #ecrecEmpty(HASH, SIGV, SIGR, SIGS) [simplification] - -endmodule - -module VERIFICATION - imports VERIFICATION-COMMON - imports VERIFICATION-HASKELL - - // ######################## - // Map Reasoning - // ######################## - - rule M:Map [ K1 <- _ ] [ K2 <- V2 ] => M [ K1 <- V2 ] requires K1 ==Int K2 [simplification] - rule M:Map [ K1 <- V1 ] [ K2 <- V2 ] => M [ K2 <- V2 ] [ K1 <- V1 ] requires K2 0 requires NEW =/=Int 0 [simplification] - - // ######################## - // ABI Encoding - // ######################## - - syntax Bytes ::= #abiCallData2 ( String , TypedArgs ) [function] - - rule #abiCallData2(FSIG, ARGS) => #parseByteStack(substrString(Keccak256(FSIG), 0, 8)) +Bytes #encodeArgs(ARGS) - - rule chop(I) => 0 requires I ==Int pow256 [simplification] - - // ######################## - // Memory Usage - // ######################## - - rule #memoryUsageUpdate(#memoryUsageUpdate(MU, START0, WIDTH0), START1, WIDTH1) => #memoryUsageUpdate(MU, START0, WIDTH0) requires START1 +Int WIDTH1 <=Int START0 +Int WIDTH0 andBool 0 #memoryUsageUpdate(MU, START1, WIDTH1) requires START0 +Int WIDTH0 true [simplification] - - // ######################## - // Buffer Reasoning - // ######################## - - rule #sizeWordStack(WS, N) #sizeWordStack(WS, 0) +Int N SIZELIMIT SIZELIMIT #sizeWordStack(WS, 0) +Int N <=Int SIZE requires N =/=Int 0 [simplification] - - // ######################## - // Range - // ######################## - - rule 0 <=Int (_X modInt _Y) => true [simplification] - rule (_X modInt Y) true requires Y >Int 0 [simplification] - - rule 0 <=Int 2 ^Int _X => true [simplification] - rule 2 ^Int X true requires X true requires #rangeUInt(256, X) andBool #rangeUInt(256, Y) [simplification] - rule X &Int Y true requires #rangeUInt(256, X) andBool #rangeUInt(256, Y) [simplification] - - rule 0 <=Int X |Int Y => true requires #rangeUInt(256, X) andBool #rangeUInt(256, Y) [simplification] - rule X |Int Y true requires #rangeUInt(256, X) andBool #rangeUInt(256, Y) [simplification] - - rule 0 <=Int #blockhash(_, _, _, _) => true [simplification] - rule #blockhash(_, _, _, _) true [simplification] - - rule 0 <=Int X xorInt maxUInt256 => true requires #rangeUInt(256, X) [simplification] - rule X xorInt maxUInt256 true requires #rangeUInt(256, X) [simplification] - - // ######################## - // Simplification - // ######################## - - rule #range( _M [ N := #buf(WIDTH, DATA) ], N, WIDTH ) => #buf(WIDTH, DATA) [simplification] - - rule #asWord(WS) &Int maxUInt256 => #asWord(WS) [simplification] - - rule maxUInt256 &Int X => X requires #rangeUInt(256, X) [simplification] - - // 2^256 - 2^160 = 0xff..ff00..00 (96 1's followed by 160 0's) - rule notMaxUInt160 &Int ADDR => 0 - requires #rangeAddress(ADDR) - [simplification] - - rule chop((ADDR &Int maxUInt160) modInt pow160) => ADDR - requires #rangeAddress(ADDR) - [simplification] - - // ######################## - // Arithmetic - // ######################## - - rule 2 ^%Int X pow256 => 2 ^Int X requires 0 <=Int X andBool X (X /Int 32) *Int 32 requires 0 <=Int X [simplification] - - rule X +Int Y true requires X <=Int pow16 andBool Y true requires 0 <=Int X [simplification] - rule #ceil32(X) false requires 0 <=Int X [simplification] - rule #ceil32(X) <=Int pow16 => true requires 0 <=Int X andBool X <=Int pow16 [simplification] - -endmodule - -module VERIFICATION-HASKELL [symbolic, kore] - imports VERIFICATION-COMMON - - // ######################## - // Buffer Reasoning - // ######################## - - rule BA1 +Bytes (BA2 +Bytes BA3) => (BA1 +Bytes BA2) +Bytes BA3 [concrete(BA1, BA2), simplification] - - rule maxUInt160 &Int Y => Y requires 0 <=Int Y andBool Y <=Int maxUInt160 [simplification] - - rule ( lengthBytes(#ecrec( HASH, SIGV, SIGR, SIGS )) ==Int 0 ) => #ecrecEmpty ( HASH, SIGV, SIGR, SIGS ) [simplification] - rule ( lengthBytes(#ecrec( HASH, SIGV, SIGR, SIGS )) ==Int 32 ) => notBool ( #ecrecEmpty ( HASH, SIGV, SIGR, SIGS )) [simplification] - - rule ( lengthBytes(#ecrec( _, _, _, _ )) <=Int K ) => true requires 32 <=Int K [simplification] - - rule 0 notBool ( #ecrecEmpty ( HASH, SIGV, SIGR, SIGS ) ) [simplification] - -endmodule diff --git a/tests/specs/bihu/collectToken-spec.k b/tests/specs/bihu/collectToken-spec.k deleted file mode 100644 index 449f89d3aa..0000000000 --- a/tests/specs/bihu/collectToken-spec.k +++ /dev/null @@ -1,332 +0,0 @@ -requires "verification.k" - -module COLLECTTOKEN-SPEC - imports VERIFICATION - - // collectToken - claim - - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => #buf(32, 1) - _ => EVMC_SUCCESS - _ => ?_ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e4aed3f1461007257806340ba126b1461009b578063787e9137146100db578063b69ef8a814610104578063b93e2cdb1461012d575b600080fd5b341561007d57600080fd5b610085610171565b6040518082815260200191505060405180910390f35b34156100a657600080fd5b6100c56004808035906020019091908035906020019091905050610176565b6040518082815260200191505060405180910390f35b34156100e657600080fd5b6100ee6101a8565b6040518082815260200191505060405180910390f35b341561010f57600080fd5b6101176101ae565b6040518082815260200191505060405180910390f35b341561013857600080fd5b61015760048080359060200190919080359060200190919050506101b4565b604051808215151515815260200191505060405180910390f35b600a81565b600081831061019d576301e1338061018e84846102bc565b81151561019757fe5b046101a0565b60005b905092915050565b60005481565b60015481565b600080600080600080600080888a1115156101ce57600080fd5b6101dc6000546001546102d5565b96508695506101eb8a8a610176565b9450600093505b848410156102215761021261020b87600a6064036102ee565b606461031c565b955083806001019450506101f2565b61023661022f87600a6102ee565b606461031c565b9250610260610256846301e133808c8e0381151561025057fe5b066102ee565b6301e1338061031c565b915085870382019050610275816000546102bc565b90506001548111156102875760015490505b610293600054826102d5565b6000819055506102a5600154826102bc565b600181905550600197505050505050505092915050565b600082828403915081111515156102cf57fe5b92915050565b600082828401915081101515156102e857fe5b92915050565b60008183029050600083148061030e575081838281151561030b57fe5b04145b151561031657fe5b92915050565b6000818381151561032957fe5b049050929150505600a165627a7a72305820d8edeeb44c8346eca139385cfaecddeb8b02fcc380c3b54473746e8103ff62e70029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e4aed3f1461007257806340ba126b1461009b578063787e9137146100db578063b69ef8a814610104578063b93e2cdb1461012d575b600080fd5b341561007d57600080fd5b610085610171565b6040518082815260200191505060405180910390f35b34156100a657600080fd5b6100c56004808035906020019091908035906020019091905050610176565b6040518082815260200191505060405180910390f35b34156100e657600080fd5b6100ee6101a8565b6040518082815260200191505060405180910390f35b341561010f57600080fd5b6101176101ae565b6040518082815260200191505060405180910390f35b341561013857600080fd5b61015760048080359060200190919080359060200190919050506101b4565b604051808215151515815260200191505060405180910390f35b600a81565b600081831061019d576301e1338061018e84846102bc565b81151561019757fe5b046101a0565b60005b905092915050565b60005481565b60015481565b600080600080600080600080888a1115156101ce57600080fd5b6101dc6000546001546102d5565b96508695506101eb8a8a610176565b9450600093505b848410156102215761021261020b87600a6064036102ee565b606461031c565b955083806001019450506101f2565b61023661022f87600a6102ee565b606461031c565b9250610260610256846301e133808c8e0381151561025057fe5b066102ee565b6301e1338061031c565b915085870382019050610275816000546102bc565b90506001548111156102875760015490505b610293600054826102d5565b6000819055506102a5600154826102bc565b600181905550600197505050505050505092915050565b600082828403915081111515156102cf57fe5b92915050565b600082828401915081101515156102e857fe5b92915050565b60008183029050600083148061030e575081838281151561030b57fe5b04145b151561031657fe5b92915050565b6000818381151561032957fe5b049050929150505600a165627a7a72305820d8edeeb44c8346eca139385cfaecddeb8b02fcc380c3b54473746e8103ff62e70029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("collectToken", #uint256(NOW), #uint256(START)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - GASCAP => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - NOW // block.timestamp // now - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e4aed3f1461007257806340ba126b1461009b578063787e9137146100db578063b69ef8a814610104578063b93e2cdb1461012d575b600080fd5b341561007d57600080fd5b610085610171565b6040518082815260200191505060405180910390f35b34156100a657600080fd5b6100c56004808035906020019091908035906020019091905050610176565b6040518082815260200191505060405180910390f35b34156100e657600080fd5b6100ee6101a8565b6040518082815260200191505060405180910390f35b341561010f57600080fd5b6101176101ae565b6040518082815260200191505060405180910390f35b341561013857600080fd5b61015760048080359060200190919080359060200190919050506101b4565b604051808215151515815260200191505060405180910390f35b600a81565b600081831061019d576301e1338061018e84846102bc565b81151561019757fe5b046101a0565b60005b905092915050565b60005481565b60015481565b600080600080600080600080888a1115156101ce57600080fd5b6101dc6000546001546102d5565b96508695506101eb8a8a610176565b9450600093505b848410156102215761021261020b87600a6064036102ee565b606461031c565b955083806001019450506101f2565b61023661022f87600a6102ee565b606461031c565b9250610260610256846301e133808c8e0381151561025057fe5b066102ee565b6301e1338061031c565b915085870382019050610275816000546102bc565b90506001548111156102875760015490505b610293600054826102d5565b6000819055506102a5600154826102bc565b600181905550600197505050505050505092915050565b600082828403915081111515156102cf57fe5b92915050565b600082828401915081101515156102e857fe5b92915050565b60008183029050600083148061030e575081838281151561030b57fe5b04145b151561031657fe5b92915050565b6000818381151561032957fe5b049050929150505600a165627a7a72305820d8edeeb44c8346eca139385cfaecddeb8b02fcc380c3b54473746e8103ff62e70029") - -#hashedLocation("Solidity", 0, .IntList) |-> (COLLECTED => COLLECTED +Int ?VALUE) -#hashedLocation("Solidity", 1, .IntList) |-> (BAL => BAL -Int ?VALUE) -_:Map - - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID = 0 -andBool #accumulatedReleasedTokens(BAL, COLLECTED, START, NOW) >Int COLLECTED +Int 3 -// canExtract > balance -andBool #accumulatedReleasedTokens(BAL, COLLECTED, START, NOW) =Int (293 *Int ((NOW -Int START) /Int 31536000)) +Int 43000 -ensures ?VALUE ==Int @canExtractThisYear(COLLECTED +Int BAL, NOW, START) +Int BAL -Int @remainingTokens(COLLECTED +Int BAL, NOW, START) - - - // loop - claim - #execute => #execute - 1 - NORMAL - ISTANBUL - - - - _ - _ - _ => ?_ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e4aed3f1461007257806340ba126b1461009b578063787e9137146100db578063b69ef8a814610104578063b93e2cdb1461012d575b600080fd5b341561007d57600080fd5b610085610171565b6040518082815260200191505060405180910390f35b34156100a657600080fd5b6100c56004808035906020019091908035906020019091905050610176565b6040518082815260200191505060405180910390f35b34156100e657600080fd5b6100ee6101a8565b6040518082815260200191505060405180910390f35b341561010f57600080fd5b6101176101ae565b6040518082815260200191505060405180910390f35b341561013857600080fd5b61015760048080359060200190919080359060200190919050506101b4565b604051808215151515815260200191505060405180910390f35b600a81565b600081831061019d576301e1338061018e84846102bc565b81151561019757fe5b046101a0565b60005b905092915050565b60005481565b60015481565b600080600080600080600080888a1115156101ce57600080fd5b6101dc6000546001546102d5565b96508695506101eb8a8a610176565b9450600093505b848410156102215761021261020b87600a6064036102ee565b606461031c565b955083806001019450506101f2565b61023661022f87600a6102ee565b606461031c565b9250610260610256846301e133808c8e0381151561025057fe5b066102ee565b6301e1338061031c565b915085870382019050610275816000546102bc565b90506001548111156102875760015490505b610293600054826102d5565b6000819055506102a5600154826102bc565b600181905550600197505050505050505092915050565b600082828403915081111515156102cf57fe5b92915050565b600082828401915081101515156102e857fe5b92915050565b60008183029050600083148061030e575081838281151561030b57fe5b04145b151561031657fe5b92915050565b6000818381151561032957fe5b049050929150505600a165627a7a72305820d8edeeb44c8346eca139385cfaecddeb8b02fcc380c3b54473746e8103ff62e70029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e4aed3f1461007257806340ba126b1461009b578063787e9137146100db578063b69ef8a814610104578063b93e2cdb1461012d575b600080fd5b341561007d57600080fd5b610085610171565b6040518082815260200191505060405180910390f35b34156100a657600080fd5b6100c56004808035906020019091908035906020019091905050610176565b6040518082815260200191505060405180910390f35b34156100e657600080fd5b6100ee6101a8565b6040518082815260200191505060405180910390f35b341561010f57600080fd5b6101176101ae565b6040518082815260200191505060405180910390f35b341561013857600080fd5b61015760048080359060200190919080359060200190919050506101b4565b604051808215151515815260200191505060405180910390f35b600a81565b600081831061019d576301e1338061018e84846102bc565b81151561019757fe5b046101a0565b60005b905092915050565b60005481565b60015481565b600080600080600080600080888a1115156101ce57600080fd5b6101dc6000546001546102d5565b96508695506101eb8a8a610176565b9450600093505b848410156102215761021261020b87600a6064036102ee565b606461031c565b955083806001019450506101f2565b61023661022f87600a6102ee565b606461031c565b9250610260610256846301e133808c8e0381151561025057fe5b066102ee565b6301e1338061031c565b915085870382019050610275816000546102bc565b90506001548111156102875760015490505b610293600054826102d5565b6000819055506102a5600154826102bc565b600181905550600197505050505050505092915050565b600082828403915081111515156102cf57fe5b92915050565b600082828401915081101515156102e857fe5b92915050565b60008183029050600083148061030e575081838281151561030b57fe5b04145b151561031657fe5b92915050565b6000818381151561032957fe5b049050929150505600a165627a7a72305820d8edeeb44c8346eca139385cfaecddeb8b02fcc380c3b54473746e8103ff62e70029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - _ - - 0 - CANEXTRACT : CANEXTRACTTHISYEAR : TOTALREWARDTHISYEAR : INDEX : YEARCOUNT : REMAINING : TOTAL : RETURNVAL : START : NOW : RPC : FUNID : .WordStack -=> CANEXTRACT : CANEXTRACTTHISYEAR : TOTALREWARDTHISYEAR : YEARCOUNT : YEARCOUNT : #roundpower(REMAINING, 90, 100, YEARCOUNT -Int INDEX) : TOTAL : RETURNVAL : START : NOW : RPC : FUNID : .WordStack - _ - 498 => 545 - GASCAP => GASCAP -Int (293 *Int (YEARCOUNT -Int INDEX)) -Int 26 - MU - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - NOW // block.timestamp // now - _ - _ - _ - _ - - _ - _ - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e4aed3f1461007257806340ba126b1461009b578063787e9137146100db578063b69ef8a814610104578063b93e2cdb1461012d575b600080fd5b341561007d57600080fd5b610085610171565b6040518082815260200191505060405180910390f35b34156100a657600080fd5b6100c56004808035906020019091908035906020019091905050610176565b6040518082815260200191505060405180910390f35b34156100e657600080fd5b6100ee6101a8565b6040518082815260200191505060405180910390f35b341561010f57600080fd5b6101176101ae565b6040518082815260200191505060405180910390f35b341561013857600080fd5b61015760048080359060200190919080359060200190919050506101b4565b604051808215151515815260200191505060405180910390f35b600a81565b600081831061019d576301e1338061018e84846102bc565b81151561019757fe5b046101a0565b60005b905092915050565b60005481565b60015481565b600080600080600080600080888a1115156101ce57600080fd5b6101dc6000546001546102d5565b96508695506101eb8a8a610176565b9450600093505b848410156102215761021261020b87600a6064036102ee565b606461031c565b955083806001019450506101f2565b61023661022f87600a6102ee565b606461031c565b9250610260610256846301e133808c8e0381151561025057fe5b066102ee565b6301e1338061031c565b915085870382019050610275816000546102bc565b90506001548111156102875760015490505b610293600054826102d5565b6000819055506102a5600154826102bc565b600181905550600197505050505050505092915050565b600082828403915081111515156102cf57fe5b92915050565b600082828401915081101515156102e857fe5b92915050565b60008183029050600083148061030e575081838281151561030b57fe5b04145b151561031657fe5b92915050565b6000818381151561032957fe5b049050929150505600a165627a7a72305820d8edeeb44c8346eca139385cfaecddeb8b02fcc380c3b54473746e8103ff62e70029") - -_ - - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - requires 0 <=Int ACCT_ID andBool ACCT_ID =Int ((293 *Int (YEARCOUNT -Int INDEX)) +Int 26) - - - - // ds-math-mul - claim - #execute => #execute - 1 - NORMAL - ISTANBUL - - - - _ - _ - _ => ?_ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e4aed3f1461007257806340ba126b1461009b578063787e9137146100db578063b69ef8a814610104578063b93e2cdb1461012d575b600080fd5b341561007d57600080fd5b610085610171565b6040518082815260200191505060405180910390f35b34156100a657600080fd5b6100c56004808035906020019091908035906020019091905050610176565b6040518082815260200191505060405180910390f35b34156100e657600080fd5b6100ee6101a8565b6040518082815260200191505060405180910390f35b341561010f57600080fd5b6101176101ae565b6040518082815260200191505060405180910390f35b341561013857600080fd5b61015760048080359060200190919080359060200190919050506101b4565b604051808215151515815260200191505060405180910390f35b600a81565b600081831061019d576301e1338061018e84846102bc565b81151561019757fe5b046101a0565b60005b905092915050565b60005481565b60015481565b600080600080600080600080888a1115156101ce57600080fd5b6101dc6000546001546102d5565b96508695506101eb8a8a610176565b9450600093505b848410156102215761021261020b87600a6064036102ee565b606461031c565b955083806001019450506101f2565b61023661022f87600a6102ee565b606461031c565b9250610260610256846301e133808c8e0381151561025057fe5b066102ee565b6301e1338061031c565b915085870382019050610275816000546102bc565b90506001548111156102875760015490505b610293600054826102d5565b6000819055506102a5600154826102bc565b600181905550600197505050505050505092915050565b600082828403915081111515156102cf57fe5b92915050565b600082828401915081101515156102e857fe5b92915050565b60008183029050600083148061030e575081838281151561030b57fe5b04145b151561031657fe5b92915050565b6000818381151561032957fe5b049050929150505600a165627a7a72305820d8edeeb44c8346eca139385cfaecddeb8b02fcc380c3b54473746e8103ff62e70029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e4aed3f1461007257806340ba126b1461009b578063787e9137146100db578063b69ef8a814610104578063b93e2cdb1461012d575b600080fd5b341561007d57600080fd5b610085610171565b6040518082815260200191505060405180910390f35b34156100a657600080fd5b6100c56004808035906020019091908035906020019091905050610176565b6040518082815260200191505060405180910390f35b34156100e657600080fd5b6100ee6101a8565b6040518082815260200191505060405180910390f35b341561010f57600080fd5b6101176101ae565b6040518082815260200191505060405180910390f35b341561013857600080fd5b61015760048080359060200190919080359060200190919050506101b4565b604051808215151515815260200191505060405180910390f35b600a81565b600081831061019d576301e1338061018e84846102bc565b81151561019757fe5b046101a0565b60005b905092915050565b60005481565b60015481565b600080600080600080600080888a1115156101ce57600080fd5b6101dc6000546001546102d5565b96508695506101eb8a8a610176565b9450600093505b848410156102215761021261020b87600a6064036102ee565b606461031c565b955083806001019450506101f2565b61023661022f87600a6102ee565b606461031c565b9250610260610256846301e133808c8e0381151561025057fe5b066102ee565b6301e1338061031c565b915085870382019050610275816000546102bc565b90506001548111156102875760015490505b610293600054826102d5565b6000819055506102a5600154826102bc565b600181905550600197505050505050505092915050565b600082828403915081111515156102cf57fe5b92915050565b600082828401915081101515156102e857fe5b92915050565b60008183029050600083148061030e575081838281151561030b57fe5b04145b151561031657fe5b92915050565b6000818381151561032957fe5b049050929150505600a165627a7a72305820d8edeeb44c8346eca139385cfaecddeb8b02fcc380c3b54473746e8103ff62e70029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - _ - - 0 - Y : X : RET : WS => X : Y : RET : X *Int Y : WS - _ - 750 => 793 - GASCAP => GASCAP -Int 114 - MU - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - NOW // block.timestamp // now - _ - _ - _ - _ - - _ - _ - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e4aed3f1461007257806340ba126b1461009b578063787e9137146100db578063b69ef8a814610104578063b93e2cdb1461012d575b600080fd5b341561007d57600080fd5b610085610171565b6040518082815260200191505060405180910390f35b34156100a657600080fd5b6100c56004808035906020019091908035906020019091905050610176565b6040518082815260200191505060405180910390f35b34156100e657600080fd5b6100ee6101a8565b6040518082815260200191505060405180910390f35b341561010f57600080fd5b6101176101ae565b6040518082815260200191505060405180910390f35b341561013857600080fd5b61015760048080359060200190919080359060200190919050506101b4565b604051808215151515815260200191505060405180910390f35b600a81565b600081831061019d576301e1338061018e84846102bc565b81151561019757fe5b046101a0565b60005b905092915050565b60005481565b60015481565b600080600080600080600080888a1115156101ce57600080fd5b6101dc6000546001546102d5565b96508695506101eb8a8a610176565b9450600093505b848410156102215761021261020b87600a6064036102ee565b606461031c565b955083806001019450506101f2565b61023661022f87600a6102ee565b606461031c565b9250610260610256846301e133808c8e0381151561025057fe5b066102ee565b6301e1338061031c565b915085870382019050610275816000546102bc565b90506001548111156102875760015490505b610293600054826102d5565b6000819055506102a5600154826102bc565b600181905550600197505050505050505092915050565b600082828403915081111515156102cf57fe5b92915050565b600082828401915081101515156102e857fe5b92915050565b60008183029050600083148061030e575081838281151561030b57fe5b04145b151561031657fe5b92915050565b6000818381151561032957fe5b049050929150505600a165627a7a72305820d8edeeb44c8346eca139385cfaecddeb8b02fcc380c3b54473746e8103ff62e70029") - -_ - - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - requires 0 <=Int ACCT_ID andBool ACCT_ID =Int 114 // for the current spec - -[trusted] - - -endmodule - diff --git a/tests/specs/bihu/forwardToHotWallet-failure-1-spec.k b/tests/specs/bihu/forwardToHotWallet-failure-1-spec.k deleted file mode 100644 index 332403daa4..0000000000 --- a/tests/specs/bihu/forwardToHotWallet-failure-1-spec.k +++ /dev/null @@ -1,119 +0,0 @@ -requires "verification.k" - -module FORWARDTOHOTWALLET-FAILURE-1-SPEC - imports VERIFICATION - - // forwardToHotWallet-failure-1 - claim - - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_REVERT - _ => ?_ - _ - _ => ?_ - - - #parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029") - #computeValidJumpDests(#parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("forwardToHotWallet", #uint256(AMOUNT)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - 22000 => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - NOW // block.timestamp // now - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029") - -#hashedLocation("Solidity", 3, .IntList) |-> WITHDRAWER -#hashedLocation("Solidity", 4, .IntList) |-> WITHDRAWLIMIT -#hashedLocation("Solidity", 5, .IntList) |-> LASTWITHDRAWTIME -#hashedLocation("Solidity", 6, .IntList) |-> PAUSED -_:Map - - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_REVERT - _ => ?_ - _ - _ => ?_ - - - #parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029") - #computeValidJumpDests(#parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("forwardToHotWallet", #uint256(AMOUNT)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - 22000 => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - NOW // block.timestamp // now - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029") - -#hashedLocation("Solidity", 3, .IntList) |-> WITHDRAWER -#hashedLocation("Solidity", 4, .IntList) |-> WITHDRAWLIMIT -#hashedLocation("Solidity", 5, .IntList) |-> LASTWITHDRAWTIME -#hashedLocation("Solidity", 6, .IntList) |-> PAUSED -_:Map - - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_REVERT - _ => ?_ - _ - _ => ?_ - - - #parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029") - #computeValidJumpDests(#parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("forwardToHotWallet", #uint256(AMOUNT)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - 22000 => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - NOW // block.timestamp // now - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029") - -#hashedLocation("Solidity", 3, .IntList) |-> WITHDRAWER -#hashedLocation("Solidity", 4, .IntList) |-> WITHDRAWLIMIT -#hashedLocation("Solidity", 5, .IntList) |-> LASTWITHDRAWTIME -#hashedLocation("Solidity", 6, .IntList) |-> PAUSED -_:Map - - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID 0); - - - - -endmodule - diff --git a/tests/specs/bihu/forwardToHotWallet-failure-4-spec.k b/tests/specs/bihu/forwardToHotWallet-failure-4-spec.k deleted file mode 100644 index 6bafa4bab4..0000000000 --- a/tests/specs/bihu/forwardToHotWallet-failure-4-spec.k +++ /dev/null @@ -1,119 +0,0 @@ -requires "verification.k" - -module FORWARDTOHOTWALLET-FAILURE-4-SPEC - imports VERIFICATION - - // forwardToHotWallet-failure-4 - claim - - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_REVERT - _ => ?_ - _ - _ => ?_ - - - #parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029") - #computeValidJumpDests(#parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("forwardToHotWallet", #uint256(AMOUNT)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - 22000 => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - NOW // block.timestamp // now - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029") - -#hashedLocation("Solidity", 3, .IntList) |-> WITHDRAWER -#hashedLocation("Solidity", 4, .IntList) |-> WITHDRAWLIMIT -#hashedLocation("Solidity", 5, .IntList) |-> LASTWITHDRAWTIME -#hashedLocation("Solidity", 6, .IntList) |-> PAUSED -_:Map - - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID (lastWithdrawTime + 24 hours)); - - - - -endmodule - diff --git a/tests/specs/bihu/forwardToHotWallet-success-1-spec.k b/tests/specs/bihu/forwardToHotWallet-success-1-spec.k deleted file mode 100644 index 412a038b18..0000000000 --- a/tests/specs/bihu/forwardToHotWallet-success-1-spec.k +++ /dev/null @@ -1,125 +0,0 @@ -requires "verification.k" - -module FORWARDTOHOTWALLET-SUCCESS-1-SPEC - imports VERIFICATION - - // forwardToHotWallet-success-1 - claim - - #execute => #halt - 1 - NORMAL - BYZANTIUM - - - - _ => #buf(32, ?RET_VAL) - _ => EVMC_SUCCESS - _ => ?_ - _ - _ => ?_ - - - #parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029") - #computeValidJumpDests(#parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("forwardToHotWallet", #uint256(AMOUNT)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - 22000 => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - NOW // block.timestamp // now - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029") - -#hashedLocation("Solidity", 3, .IntList) |-> WITHDRAWER -#hashedLocation("Solidity", 4, .IntList) |-> WITHDRAWLIMIT -#hashedLocation("Solidity", 5, .IntList) |-> ( LASTWITHDRAWTIME => NOW ) -#hashedLocation("Solidity", 6, .IntList) |-> PAUSED -_:Map - - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int 0 // require(_amount > 0); -andBool NOW >Int LASTWITHDRAWTIME +Word (24 *Int 3600) // require(_time > (lastWithdrawTime + 24 hours)); -// NOTE: +Word instead of +Int -andBool AMOUNT <=Int WITHDRAWLIMIT // if (amount > withdrawLimit) { ... } -ensures ?RET_VAL ==Int AMOUNT - - - - -endmodule - diff --git a/tests/specs/bihu/forwardToHotWallet-success-2-spec.k b/tests/specs/bihu/forwardToHotWallet-success-2-spec.k deleted file mode 100644 index 4411a65d6a..0000000000 --- a/tests/specs/bihu/forwardToHotWallet-success-2-spec.k +++ /dev/null @@ -1,125 +0,0 @@ -requires "verification.k" - -module FORWARDTOHOTWALLET-SUCCESS-2-SPEC - imports VERIFICATION - - // forwardToHotWallet-success-2 - claim - - #execute => #halt - 1 - NORMAL - BYZANTIUM - - - - _ => #buf(32, ?RET_VAL) - _ => EVMC_SUCCESS - _ => ?_ - _ - _ => ?_ - - - #parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029") - #computeValidJumpDests(#parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("forwardToHotWallet", #uint256(AMOUNT)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - 22000 => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - NOW // block.timestamp // now - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x6060604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806257e8d4146100f55780630d174c241461012c57806313af40351461016557806316ada5471461019e57806329113bc8146101c75780633943380c1461021c5780634abdf2e0146102715780634af350eb146102945780635c975abb146102f55780636be13c92146103225780638da5cb5b146103775780639550276b146103cc578063ab231511146103e1578063bde27f4a1461040a578063cdc1842414610441578063d87522ae14610496578063f848d541146104ab575b600080fd5b341561010057600080fd5b61011660048080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b341561013757600080fd5b610163600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610549565b005b341561017057600080fd5b61019c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610668565b005b34156101a957600080fd5b6101b161074b565b6040518082815260200191505060405180910390f35b34156101d257600080fd5b6101da610753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022757600080fd5b61022f610779565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027c57600080fd5b610292600480803590602001909190505061079e565b005b341561029f57600080fd5b6102f3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610861565b005b341561030057600080fd5b6103086109f5565b604051808215151515815260200191505060405180910390f35b341561032d57600080fd5b610335610a08565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038257600080fd5b61038a610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d757600080fd5b6103df610a54565b005b34156103ec57600080fd5b6103f4610acd565b6040518082815260200191505060405180910390f35b341561041557600080fd5b61042b6004808035906020019091905050610ad3565b6040518082815260200191505060405180910390f35b341561044c57600080fd5b610454610ba2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104a157600080fd5b6104a9610bc8565b005b34156104b657600080fd5b6104be610c41565b6040518082815260200191505060405180910390f35b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561053257600080fd5b60008211151561054157600080fd5b819050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f91ea294e4187e15075dc6da5e9abb3161ca1a608c538e1a1c6528fc644b1b6f560405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600042905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107fa57600080fd5b60008111151561080957600080fd5b806004819055503373ffffffffffffffffffffffffffffffffffffffff167fd9f754a3457d492d875ed93adbb513556202c51d9d6e0f9de8d9d4e7cf232008826040518082815260200191505060405180910390a250565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bf57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561091b57600080fd5b60008311156109ef578190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156109d257600080fd5b6102c65a03f115156109e357600080fd5b50505060405180519050505b50505050565b600660149054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab057600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60055481565b6000806000600660149054906101000a900460ff16151515610af457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600084111515610b5f57600080fd5b610b6761074b565b9150620151806005540182111515610b7e57600080fd5b839050600454811115610b915760045490505b816005819055508092505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c2457600080fd5b6000600660146101000a81548160ff021916908315150217905550565b600454815600a165627a7a72305820f1e3e5a9cf1054e7c34a3f0f60ea3dc352ed9f0cd000953a1113bacc56ddb77e0029") - -#hashedLocation("Solidity", 3, .IntList) |-> WITHDRAWER -#hashedLocation("Solidity", 4, .IntList) |-> WITHDRAWLIMIT -#hashedLocation("Solidity", 5, .IntList) |-> ( LASTWITHDRAWTIME => NOW ) -#hashedLocation("Solidity", 6, .IntList) |-> PAUSED -_:Map - - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int 0 // require(_amount > 0); -andBool NOW >Int LASTWITHDRAWTIME +Word (24 *Int 3600) // require(_time > (lastWithdrawTime + 24 hours)); -// NOTE: +Word instead of +Int -andBool AMOUNT >Int WITHDRAWLIMIT // if (amount > withdrawLimit) { ... } -ensures ?RET_VAL ==Int WITHDRAWLIMIT - - - - -endmodule - diff --git a/tests/specs/bihu/functional-spec.k b/tests/specs/bihu/functional-spec.k deleted file mode 100644 index 445d8853bf..0000000000 --- a/tests/specs/bihu/functional-spec.k +++ /dev/null @@ -1,15 +0,0 @@ -requires "verification.k" - -module FUNCTIONAL-SPEC-SYNTAX - imports VERIFICATION - -endmodule - -module FUNCTIONAL-SPEC - imports FUNCTIONAL-SPEC-SYNTAX - - claim (#range( _MEM [ 96 := #padToWidth(32, #asByteStack(BS)) ], 96, 32)) - => (#buf(32, BS)) - requires #rangeUInt(256, BS) - -endmodule diff --git a/tests/specs/bihu/verification.k b/tests/specs/bihu/verification.k deleted file mode 100644 index 6e241f0fa3..0000000000 --- a/tests/specs/bihu/verification.k +++ /dev/null @@ -1,104 +0,0 @@ -requires "edsl.md" -requires "lemmas/lemmas.k" - -module VERIFICATION - imports EDSL - imports LEMMAS - imports VERIFICATION-HASKELL - - // ######################## - // Buffer Reasoning - // ######################## - - //semantics of #buf - rule #buf(LEN, BYTES) => #padToWidth(LEN, #asByteStack( BYTES )) [simplification, concrete] - - //Rules for #padToWidth with non-regular symbolic arguments. - rule #padToWidth(32, #asByteStack(V)) => #buf(32, V) - requires 0 <=Int V andBool V true requires 0 <=Int X andBool X true requires 0 <=Int X andBool X I1 -Int I2 requires #rangeUInt(256, I1) andBool #rangeUInt(256, I2) andBool I2 <=Int I1 [simplification] - - rule chop(I1 +Int (I2 -Int I3)) => I1 +Int (I2 -Int I3) - requires 0 <=Int I2 - andBool I2 =Int I3 - [simplification] - - // ######################## - // #roundpower - // ######################## - - syntax Int ::= "#roundpower" "(" Int "," Int "," Int "," Int ")" [function, smtlib(smt_roundpower)] - // ---------------------------------------------------------------------------------------------------- - rule #roundpower(0, BASEN, BASED, EXPONENT) => 0 requires BASEN >Int 0 andBool BASED >=Int BASEN andBool EXPONENT >=Int 0 - rule #roundpower(ACC, BASEN, BASED, 0 ) => ACC requires BASEN >Int 0 andBool BASED >=Int BASEN - rule #roundpower((ACC *Int BASEN) /Int BASED, BASEN, BASED, EXPONENT) => #roundpower(ACC, BASEN, BASED, EXPONENT +Int 1) requires BASEN >Int 0 andBool BASED >=Int BASEN andBool EXPONENT >=Int 0 [simplification] - - rule 0 <=Int #roundpower(ACC, BASEN, BASED, EXPONENT) => true requires ACC >=Int 0 andBool BASEN >Int 0 andBool BASED >=Int BASEN andBool EXPONENT >=Int 0 [simplification] - rule #roundpower(ACC, BASEN, BASED, EXPONENT) <=Int ACC => true requires ACC >=Int 0 andBool BASEN >Int 0 andBool BASED >=Int BASEN andBool EXPONENT >=Int 0 [simplification] - rule #roundpower(ACC, BASEN, BASED, EXPONENT) true requires ACC >=Int 0 andBool BASEN >Int 0 andBool BASED >=Int BASEN andBool EXPONENT >=Int 0 andBool ACC true requires ACC >=Int 0 andBool BASEN >Int 0 andBool BASED >=Int BASEN andBool EXPONENT >=Int 0 [simplification] - rule (#roundpower(ACC, BASEN, BASED, EXPONENT) *Int 10) true requires ACC >=Int 0 andBool BASEN >Int 0 andBool BASED >=Int BASEN andBool EXPONENT >=Int 0 andBool ACC *Int 10 true requires ACC >=Int 0 andBool BASEN >Int 0 andBool BASED >=Int BASEN andBool EXPONENT >=Int 0 andBool A >=Int 0 andBool B >Int 0 andBool C >=Int 0 [simplification] - rule #roundpower(ACC, BASEN, BASED, EXPONENT) *Int A /Int B *Int C true requires ACC >=Int 0 andBool BASEN >Int 0 andBool BASED >=Int BASEN andBool EXPONENT >=Int 0 andBool A >=Int 0 andBool B >Int 0 andBool C >=Int 0 andBool ACC *Int A /Int B *Int C #roundpower(TOTAL, 90, 100, (NOW -Int START) /Int 31536000) - rule @canExtractThisYear(TOTAL, NOW, START) => ((#roundpower(TOTAL, 90, 100, (NOW -Int START) /Int 31536000) *Int 10 /Int 100) *Int ((NOW -Int START) modInt 31536000)) /Int 31536000 - - // ############################### - // #accumulatedReleasedTokens - // ############################### - - syntax Int ::= "#accumulatedReleasedTokens" "(" Int "," Int "," Int "," Int ")" [function, no-evaluators] - // ---------------------------------------------------------------------------------------------------------- - // proved manually - rule COLLECTED <=Int @canExtractThisYear(COLLECTED +Int BAL, NOW, START) +Int ((COLLECTED +Int BAL) -Int @remainingTokens(COLLECTED +Int BAL, NOW, START)) => true requires #accumulatedReleasedTokens(BAL, COLLECTED, START, NOW) >Int COLLECTED +Int 3 [simplification] - rule 0 <=Int @canExtractThisYear(COLLECTED +Int BAL, NOW, START) +Int ((COLLECTED +Int BAL) -Int @remainingTokens(COLLECTED +Int BAL, NOW, START)) => true requires #accumulatedReleasedTokens(BAL, COLLECTED, START, NOW) >Int COLLECTED +Int 3 [simplification] - rule 0 <=Int @canExtractThisYear(COLLECTED +Int BAL, NOW, START) +Int ((COLLECTED +Int BAL) -Int @remainingTokens(COLLECTED +Int BAL, NOW, START)) -Int COLLECTED => true requires #accumulatedReleasedTokens(BAL, COLLECTED, START, NOW) >Int COLLECTED +Int 3 [simplification] - - // proved manually (canExtract > balance) --- if condition - rule BAL false requires #accumulatedReleasedTokens(BAL, COLLECTED, START, NOW) = canExtract) --- balance = sub(balance, canExtract) - rule @canExtractThisYear(COLLECTED +Int BAL, NOW, START) +Int ((COLLECTED +Int BAL) -Int @remainingTokens(COLLECTED +Int BAL, NOW, START)) -Int COLLECTED <=Int BAL => true requires #accumulatedReleasedTokens(BAL, COLLECTED, START, NOW) true requires #accumulatedReleasedTokens(BAL, COLLECTED, START, NOW) >Int COLLECTED +Int 3 [simplification] - rule @canExtractThisYear(COLLECTED +Int BAL, NOW, START) +Int ((COLLECTED +Int BAL) -Int @remainingTokens(COLLECTED +Int BAL, NOW, START)) true requires #accumulatedReleasedTokens(BAL, COLLECTED, START, NOW) >Int COLLECTED +Int 3 [simplification] - -endmodule - -module VERIFICATION-HASKELL [symbolic, kore] - imports EVM - - rule X false - requires Gsload < SCHED > <=Int X - andBool Gsstoreset < SCHED > <=Int X - andBool Gsstorereset < SCHED > <=Int X - [simplification] - - rule Csstore(SCHED, _, _, _) <=Int X => true - requires Gsload < SCHED > <=Int X - andBool Gsstoreset < SCHED > <=Int X - andBool Gsstorereset < SCHED > <=Int X - [simplification] - - rule X -Int Y X -Int Z Z <=Int Y -Int X [concrete(X, Y), symbolic(Z), simplification] - -endmodule diff --git a/tests/specs/erc20/ds/allowance-spec.k b/tests/specs/erc20/ds/allowance-spec.k deleted file mode 100644 index 2525035a2a..0000000000 --- a/tests/specs/erc20/ds/allowance-spec.k +++ /dev/null @@ -1,108 +0,0 @@ -requires "../verification.k" - -module ALLOWANCE-SPEC - imports VERIFICATION - - // allowance - claim - - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => #buf(32, ALLOWANCE) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("allowance", #address(OWNER), #address(SPENDER)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 2, OWNER SPENDER) |-> ALLOWANCE -_:Map - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_INVALID_INSTRUCTION - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("approve", #address(SPENDER), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -_:Map - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - CONSTANTINOPLE - - - - _ => #buf(32, 1) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("approve", #address(SPENDER), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 2, CALLER_ID SPENDER) |-> (ORIG_VAL => VALUE) -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 2, CALLER_ID SPENDER) |-> ORIG_VAL -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => #buf(32, BAL) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("balanceOf", #address(OWNER)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 1, OWNER) |-> BAL -_:Map - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => #buf(32, TOTAL) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("totalSupply", .TypedArgs) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 0, .IntList) |-> TOTAL -_:Map - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_INVALID_INSTRUCTION - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transfer", #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, CALLER_ID) |-> (BAL_FROM => ?_) -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, CALLER_ID) |-> BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int BAL_FROM - - -endmodule - diff --git a/tests/specs/erc20/ds/transfer-failure-1-b-spec.k b/tests/specs/erc20/ds/transfer-failure-1-b-spec.k deleted file mode 100644 index 45fb3e0d9b..0000000000 --- a/tests/specs/erc20/ds/transfer-failure-1-b-spec.k +++ /dev/null @@ -1,120 +0,0 @@ -requires "../verification.k" - -module TRANSFER-FAILURE-1-B-SPEC - imports VERIFICATION - - // transfer-failure-1-b - claim - - #execute => #halt - 1 - NORMAL - CONSTANTINOPLE - - - - _ => ?_ - _ => EVMC_INVALID_INSTRUCTION - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transfer", #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, CALLER_ID) |-> (BAL_FROM => ?_) -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, CALLER_ID) |-> BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID =Int (2 ^Int 256) - - -endmodule - diff --git a/tests/specs/erc20/ds/transfer-failure-1-c-spec.k b/tests/specs/erc20/ds/transfer-failure-1-c-spec.k deleted file mode 100644 index d572fcbcdf..0000000000 --- a/tests/specs/erc20/ds/transfer-failure-1-c-spec.k +++ /dev/null @@ -1,120 +0,0 @@ -requires "../verification.k" - -module TRANSFER-FAILURE-1-C-SPEC - imports VERIFICATION - - // transfer-failure-1-c - claim - - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_INVALID_INSTRUCTION - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transfer", #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, CALLER_ID) |-> (BAL_FROM => ?_) -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, CALLER_ID) |-> BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_INVALID_INSTRUCTION - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transfer", #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, CALLER_ID) |-> BAL_FROM -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, CALLER_ID) |-> BAL_FROM -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int BAL_FROM - - -endmodule - diff --git a/tests/specs/erc20/ds/transfer-failure-2-b-spec.k b/tests/specs/erc20/ds/transfer-failure-2-b-spec.k deleted file mode 100644 index abba55b1d4..0000000000 --- a/tests/specs/erc20/ds/transfer-failure-2-b-spec.k +++ /dev/null @@ -1,116 +0,0 @@ -requires "../verification.k" - -module TRANSFER-FAILURE-2-B-SPEC - imports VERIFICATION - - // transfer-failure-2-b - claim - - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_INVALID_INSTRUCTION - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transfer", #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, CALLER_ID) |-> BAL_FROM -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, CALLER_ID) |-> BAL_FROM -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - CONSTANTINOPLE - - - - _ => #buf(32, 1) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transfer", #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, CALLER_ID) |-> (BAL_FROM => BAL_FROM -Int VALUE) -#hashedLocation("Solidity", 1, TO_ID) |-> (BAL_TO => BAL_TO +Int VALUE) -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, CALLER_ID) |-> BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - CONSTANTINOPLE - - - - _ => #buf(32, 1) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transfer", #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, CALLER_ID) |-> BAL_FROM -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, CALLER_ID) |-> BAL_FROM -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_INVALID_INSTRUCTION - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transferFrom", #address(FROM_ID), #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> (BAL_FROM => ?_) // BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> (BAL_TO => ?_) // BAL_TO -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> (ALLOW => ?_) -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int BAL_FROM - - -endmodule - diff --git a/tests/specs/erc20/ds/transferFrom-failure-1-b-spec.k b/tests/specs/erc20/ds/transferFrom-failure-1-b-spec.k deleted file mode 100644 index 42bbceca96..0000000000 --- a/tests/specs/erc20/ds/transferFrom-failure-1-b-spec.k +++ /dev/null @@ -1,127 +0,0 @@ -requires "../verification.k" - -module TRANSFERFROM-FAILURE-1-B-SPEC - imports VERIFICATION - - // transferFrom-failure-1-b - claim - - #execute => #halt - 1 - NORMAL - CONSTANTINOPLE - - - - _ => ?_ - _ => EVMC_INVALID_INSTRUCTION - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transferFrom", #address(FROM_ID), #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> (BAL_FROM => ?_) // BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> (BAL_TO => ?_) // BAL_TO -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> (ALLOW => ?_) -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID =Int (2 ^Int 256) - - -endmodule - diff --git a/tests/specs/erc20/ds/transferFrom-failure-1-c-spec.k b/tests/specs/erc20/ds/transferFrom-failure-1-c-spec.k deleted file mode 100644 index 0c55b712e0..0000000000 --- a/tests/specs/erc20/ds/transferFrom-failure-1-c-spec.k +++ /dev/null @@ -1,127 +0,0 @@ -requires "../verification.k" - -module TRANSFERFROM-FAILURE-1-C-SPEC - imports VERIFICATION - - // transferFrom-failure-1-c - claim - - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_INVALID_INSTRUCTION - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transferFrom", #address(FROM_ID), #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> (BAL_FROM => ?_) // BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> (BAL_TO => ?_) // BAL_TO -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> (ALLOW => ?_) -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int ALLOW - - -endmodule - diff --git a/tests/specs/erc20/ds/transferFrom-failure-1-d-spec.k b/tests/specs/erc20/ds/transferFrom-failure-1-d-spec.k deleted file mode 100644 index 7c2074ba3a..0000000000 --- a/tests/specs/erc20/ds/transferFrom-failure-1-d-spec.k +++ /dev/null @@ -1,127 +0,0 @@ -requires "../verification.k" - -module TRANSFERFROM-FAILURE-1-D-SPEC - imports VERIFICATION - - // transferFrom-failure-1-d - claim - - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_INVALID_INSTRUCTION - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transferFrom", #address(FROM_ID), #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> (BAL_FROM => ?_) // BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> (BAL_TO => ?_) // BAL_TO -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> (ALLOW => ?_) -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_INVALID_INSTRUCTION - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transferFrom", #address(FROM_ID), #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int BAL_FROM - - -endmodule - diff --git a/tests/specs/erc20/ds/transferFrom-failure-2-b-spec.k b/tests/specs/erc20/ds/transferFrom-failure-2-b-spec.k deleted file mode 100644 index fe1c3cfc96..0000000000 --- a/tests/specs/erc20/ds/transferFrom-failure-2-b-spec.k +++ /dev/null @@ -1,122 +0,0 @@ -requires "../verification.k" - -module TRANSFERFROM-FAILURE-2-B-SPEC - imports VERIFICATION - - // transferFrom-failure-2-b - claim - - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_INVALID_INSTRUCTION - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transferFrom", #address(FROM_ID), #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int ALLOW - - -endmodule - diff --git a/tests/specs/erc20/ds/transferFrom-failure-2-c-spec.k b/tests/specs/erc20/ds/transferFrom-failure-2-c-spec.k deleted file mode 100644 index 105a8d96f0..0000000000 --- a/tests/specs/erc20/ds/transferFrom-failure-2-c-spec.k +++ /dev/null @@ -1,122 +0,0 @@ -requires "../verification.k" - -module TRANSFERFROM-FAILURE-2-C-SPEC - imports VERIFICATION - - // transferFrom-failure-2-c - claim - - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_INVALID_INSTRUCTION - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transferFrom", #address(FROM_ID), #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - CONSTANTINOPLE - - - - _ => #buf(32, 1) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transferFrom", #address(FROM_ID), #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> (BAL_FROM => BAL_FROM -Int VALUE) -#hashedLocation("Solidity", 1, TO_ID) |-> (BAL_TO => BAL_TO +Int VALUE) -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> (ALLOW => ALLOW -Int VALUE) -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - CONSTANTINOPLE - - - - _ => #buf(32, 1) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transferFrom", #address(FROM_ID), #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ => ?_ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012257806307da68f514610153578063095ea7b31461016857806313af4035146101c257806318160ddd146101fb57806323b872dd14610224578063313ce5671461029d5780633452f51d146102c65780635ac801fe1461033257806369d3e20e1461035957806370a082311461038e57806375f12b21146103db5780637a9e5e4b146104085780638402181f146104415780638da5cb5b146104ad57806390bc16931461050257806395d89b4114610537578063a9059cbb14610568578063be9a6555146105c2578063bf7e214f146105d7578063dd62ed3e1461062c575b600080fd5b341561012d57600080fd5b610135610698565b60405180826000191660001916815260200191505060405180910390f35b341561015e57600080fd5b61016661069e565b005b341561017357600080fd5b6101a8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061079e565b604051808215151515815260200191505060405180910390f35b34156101cd57600080fd5b6101f9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610878565b005b341561020657600080fd5b61020e610957565b6040518082815260200191505060405180910390f35b341561022f57600080fd5b610283600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610960565b604051808215151515815260200191505060405180910390f35b34156102a857600080fd5b6102b0610a3c565b6040518082815260200191505060405180910390f35b34156102d157600080fd5b610318600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610a42565b604051808215151515815260200191505060405180910390f35b341561033d57600080fd5b610357600480803560001916906020019091905050610a68565b005b341561036457600080fd5b61038c60048080356fffffffffffffffffffffffffffffffff16906020019091905050610aac565b005b341561039957600080fd5b6103c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c6d565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610cb6565b604051808215151515815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc9565b005b341561044c57600080fd5b610493600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050610da8565b604051808215151515815260200191505060405180910390f35b34156104b857600080fd5b6104c0610dcf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050d57600080fd5b61053560048080356fffffffffffffffffffffffffffffffff16906020019091905050610df5565b005b341561054257600080fd5b61054a610fb6565b60405180826000191660001916815260200191505060405180910390f35b341561057357600080fd5b6105a8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610fbc565b604051808215151515815260200191505060405180910390f35b34156105cd57600080fd5b6105d5611096565b005b34156105e257600080fd5b6105ea611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063757600080fd5b610682600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111bc565b6040518082815260200191505060405180910390f35b60075481565b6106cc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156106d457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46001600460146101000a81548160ff0219169083151502179055505050565b6000600460149054906101000a900460ff161515156107b957fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461086e85856114a4565b9250505092915050565b6108a6336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156108ae57fe5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615151561097b57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610a31868686611596565b925050509392505050565b60065481565b6000610a6083836fffffffffffffffffffffffffffffffff16610fbc565b905092915050565b610a96336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610a9e57fe5b806007816000191690555050565b610ada336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610ae257fe5b600460149054906101000a900460ff16151515610afb57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610c01600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff166118f9565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c62600054846fffffffffffffffffffffffffffffffff166118f9565b600081905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b610cf7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610cff57fe5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b6000610dc78333846fffffffffffffffffffffffffffffffff16610960565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b1515610e2b57fe5b600460149054906101000a900460ff16151515610e4457fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a4610f4a600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846fffffffffffffffffffffffffffffffff16611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fab600054846fffffffffffffffffffffffffffffffff16611912565b600081905550505050565b60055481565b6000600460149054906101000a900460ff16151515610fd757fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a461108c858561192b565b9250505092915050565b6110c4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611243565b15156110cc57fe5b60008060043591506024359050806000191682600019163373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19163460003660405180848152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a46000600460146101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576001905061149e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e1576001905061149e565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611341576000905061149e565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b151561148057600080fd5b6102c65a03f1151561149157600080fd5b5050506040518051905090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156115e357fe5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561166b57fe5b6116f1600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ba600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611846600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000828284019150811015151561190c57fe5b92915050565b6000828284039150811115151561192557fe5b92915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561197857fe5b6119c1600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611912565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a4d600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836118f9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fb55366ece8a4477c9397b20e007129a3014819c6fb99d9f51c9903e245fadbc0029") - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> (ALLOW => ALLOW -Int VALUE) -_:Map - #hashedLocation("Solidity", 4, .IntList) |-> STOPPED -#hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID true [simplification] - - //that's because the result in concrete semantics is trimmed to Address range. - rule #symEcrec(_) true [simplification] - - // Lemmas implied by the above, but still required to match side conditions of #padToWidth rule in lemmas.md - // General range conversion lemmas like below are not an option, dramatic performance decrease: - // rule A < pow256 => true requires A < pow160 - rule 0 <=Int #symEcrec(_) => true [simplification] - rule #symEcrec(_) true [simplification] - - // ######################## - // Symbolic Call - // ######################## - - // PC helps to differentiate different calls to the same account. - // TODO: include the calldata as the argument. - syntax Bool ::= #callSuccess ( Int , Int ) [function] // pc, accountTo - | #callFailure ( Int , Int ) [function] // pc, accountTo - // ------------------------------------------------------------------------ - - syntax Int ::= #callResult ( Int , Int ) [function] // pc, accountTo - // ---------------------------------------------------------------------- - - - syntax Int ::= #extCodeSize ( Int ) [function] - // ----------------------------------------------- - - // ERC20 transfer(address,uint256) - // pc, to addr - syntax Bool ::= #tokenTransferCallSuccess ( Int , Int ) [function] - | #tokenTransferCallFailure ( Int , Int ) [function] - // ------------------------------------------------------------------ - - // 3rd argument: NOW variable hack to force to generate Z3 query - syntax Int ::= #tokenTransferCallReturnSize ( Int , Int , Int ) [function] - | #tokenTransferCallReturnValue ( Int , Int , Int ) [function] - // --------------------------------------------------------------------------- - -endmodule diff --git a/tests/specs/erc20/functional-spec.k b/tests/specs/erc20/functional-spec.k deleted file mode 100644 index 8818de815c..0000000000 --- a/tests/specs/erc20/functional-spec.k +++ /dev/null @@ -1,14 +0,0 @@ -requires "verification.k" - -module FUNCTIONAL-SPEC-SYNTAX - imports VERIFICATION - -endmodule - -module FUNCTIONAL-SPEC - imports FUNCTIONAL-SPEC-SYNTAX - - claim (#hashedLocation("Solidity", 2, OWNER SPENDER .IntList)) - => (keccak(#bufStrict(32, SPENDER) +Bytes #bufStrict(32, keccak(#bufStrict(32, OWNER) +Bytes #bufStrict(32, 2))))) - requires #rangeUInt(256, SPENDER) andBool #rangeUInt(256, OWNER) -endmodule diff --git a/tests/specs/erc20/hkg/allowance-spec.k b/tests/specs/erc20/hkg/allowance-spec.k deleted file mode 100644 index e7feb9b84d..0000000000 --- a/tests/specs/erc20/hkg/allowance-spec.k +++ /dev/null @@ -1,108 +0,0 @@ -requires "../verification.k" - -module ALLOWANCE-SPEC - imports VERIFICATION - - // allowance - claim - - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => #buf(32, ALLOWANCE) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("allowance", #address(OWNER), #address(SPENDER)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #hashedLocation("Solidity", 2, OWNER SPENDER) |-> ALLOWANCE -_:Map - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - CONSTANTINOPLE - - - - _ => #buf(32, 1) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("approve", #address(SPENDER), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _:List ( .List => ListItem(#abiEventLog(ACCT_ID, "Approval", #indexed(#address(CALLER_ID)), #indexed(#address(SPENDER)), #uint256(VALUE))) ) - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #hashedLocation("Solidity", 2, CALLER_ID SPENDER) |-> (INIT_VALUE => VALUE) -_:Map - #hashedLocation("Solidity", 2, CALLER_ID SPENDER) |-> INIT_VALUE -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => #buf(32, BAL) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("balanceOf", #address(OWNER)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #hashedLocation("Solidity", 1, OWNER) |-> BAL -_:Map - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => ?_ - _ => EVMC_REVERT - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("totalSupply", .TypedArgs) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - 100000 => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - _:Map - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => #buf(32, 0) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transfer", #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #hashedLocation("Solidity", 1, CALLER_ID) |-> (BAL_FROM => ?_) -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -_:Map - #hashedLocation("Solidity", 1, CALLER_ID) |-> BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int BAL_FROM -orBool VALUE <=Int 0 ) - - -endmodule - diff --git a/tests/specs/erc20/hkg/transfer-failure-2-spec.k b/tests/specs/erc20/hkg/transfer-failure-2-spec.k deleted file mode 100644 index b43b311c78..0000000000 --- a/tests/specs/erc20/hkg/transfer-failure-2-spec.k +++ /dev/null @@ -1,112 +0,0 @@ -requires "../verification.k" - -module TRANSFER-FAILURE-2-SPEC - imports VERIFICATION - - // transfer-failure-2 - claim - - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => #buf(32, 0) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transfer", #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #hashedLocation("Solidity", 1, CALLER_ID) |-> BAL_FROM -_:Map - _ - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int BAL_FROM -orBool VALUE <=Int 0 ) - - -endmodule - diff --git a/tests/specs/erc20/hkg/transfer-success-1-spec.k b/tests/specs/erc20/hkg/transfer-success-1-spec.k deleted file mode 100644 index 9aa35f93ea..0000000000 --- a/tests/specs/erc20/hkg/transfer-success-1-spec.k +++ /dev/null @@ -1,116 +0,0 @@ -requires "../verification.k" - -module TRANSFER-SUCCESS-1-SPEC - imports VERIFICATION - - // transfer-success-1 - claim - - #execute => #halt - 1 - NORMAL - CONSTANTINOPLE - - - - _ => #buf(32, 1) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transfer", #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _:List ( .List => ListItem(#abiEventLog(ACCT_ID, "Transfer", #indexed(#address(CALLER_ID)), #indexed(#address(TO_ID)), #uint256(VALUE))) ) - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #hashedLocation("Solidity", 1, CALLER_ID) |-> (BAL_FROM => BAL_FROM -Int VALUE) -#hashedLocation("Solidity", 1, TO_ID) |-> (BAL_TO => BAL_TO +Word VALUE) -_:Map - #hashedLocation("Solidity", 1, CALLER_ID) |-> BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int 0 -andBool #hashedLocation("Solidity", 1, CALLER_ID) =/=Int #hashedLocation("Solidity", 1, TO_ID) - - -endmodule - diff --git a/tests/specs/erc20/hkg/transfer-success-2-spec.k b/tests/specs/erc20/hkg/transfer-success-2-spec.k deleted file mode 100644 index 5c11533a25..0000000000 --- a/tests/specs/erc20/hkg/transfer-success-2-spec.k +++ /dev/null @@ -1,113 +0,0 @@ -requires "../verification.k" - -module TRANSFER-SUCCESS-2-SPEC - imports VERIFICATION - - // transfer-success-2 - claim - - #execute => #halt - 1 - NORMAL - CONSTANTINOPLE - - - - _ => #buf(32, 1) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transfer", #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _:List ( .List => ListItem(#abiEventLog(ACCT_ID, "Transfer", #indexed(#address(CALLER_ID)), #indexed(#address(TO_ID)), #uint256(VALUE))) ) - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #hashedLocation("Solidity", 1, CALLER_ID) |-> BAL_FROM -_:Map - #hashedLocation("Solidity", 1, CALLER_ID) |-> BAL_FROM -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int 0 - - -endmodule - diff --git a/tests/specs/erc20/hkg/transferFrom-failure-1-spec.k b/tests/specs/erc20/hkg/transferFrom-failure-1-spec.k deleted file mode 100644 index 6c28c1dcfd..0000000000 --- a/tests/specs/erc20/hkg/transferFrom-failure-1-spec.k +++ /dev/null @@ -1,121 +0,0 @@ -requires "../verification.k" - -module TRANSFERFROM-FAILURE-1-SPEC - imports VERIFICATION - - // transferFrom-failure-1 - claim - - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => #buf(32, 0) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transferFrom", #address(FROM_ID), #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #hashedLocation("Solidity", 1, FROM_ID) |-> (BAL_FROM => ?_) // BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> (BAL_TO => ?_) // BAL_TO -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - #hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int BAL_FROM orBool VALUE >Int ALLOW orBool VALUE <=Int 0 ) -andBool #hashedLocation("Solidity", 2, FROM_ID CALLER_ID) =/=Int #hashedLocation("Solidity", 1, TO_ID) -andBool #hashedLocation("Solidity", 2, FROM_ID CALLER_ID) =/=Int #hashedLocation("Solidity", 1, FROM_ID) -andBool #hashedLocation("Solidity", 1, FROM_ID) =/=Int #hashedLocation("Solidity", 1, TO_ID) - - -endmodule - diff --git a/tests/specs/erc20/hkg/transferFrom-failure-2-spec.k b/tests/specs/erc20/hkg/transferFrom-failure-2-spec.k deleted file mode 100644 index 3e48a8ba79..0000000000 --- a/tests/specs/erc20/hkg/transferFrom-failure-2-spec.k +++ /dev/null @@ -1,116 +0,0 @@ -requires "../verification.k" - -module TRANSFERFROM-FAILURE-2-SPEC - imports VERIFICATION - - // transferFrom-failure-2 - claim - - #execute => #halt - 1 - NORMAL - ISTANBUL - - - - _ => #buf(32, 0) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transferFrom", #address(FROM_ID), #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _ - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - _ -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int BAL_FROM orBool VALUE >Int ALLOW orBool VALUE <=Int 0 ) -andBool #hashedLocation("Solidity", 2, FROM_ID CALLER_ID) =/=Int #hashedLocation("Solidity", 1, FROM_ID) - - -endmodule - diff --git a/tests/specs/erc20/hkg/transferFrom-success-1-spec.k b/tests/specs/erc20/hkg/transferFrom-success-1-spec.k deleted file mode 100644 index c4517573a8..0000000000 --- a/tests/specs/erc20/hkg/transferFrom-success-1-spec.k +++ /dev/null @@ -1,123 +0,0 @@ -requires "../verification.k" - -module TRANSFERFROM-SUCCESS-1-SPEC - imports VERIFICATION - - // transferFrom-success-1 - claim - - #execute => #halt - 1 - NORMAL - CONSTANTINOPLE - - - - _ => #buf(32, 1) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transferFrom", #address(FROM_ID), #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _:List ( .List => ListItem(#abiEventLog(ACCT_ID, "Transfer", #indexed(#address(FROM_ID)), #indexed(#address(TO_ID)), #uint256(VALUE))) ) - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #hashedLocation("Solidity", 1, FROM_ID) |-> (BAL_FROM => BAL_FROM -Int VALUE) -#hashedLocation("Solidity", 1, TO_ID) |-> (BAL_TO => BAL_TO +Word VALUE) -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> (ALLOW => ALLOW -Int VALUE) -_:Map - #hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 1, TO_ID) |-> BAL_TO -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int 0 -andBool #hashedLocation("Solidity", 2, FROM_ID CALLER_ID) =/=Int #hashedLocation("Solidity", 1, TO_ID) -andBool #hashedLocation("Solidity", 2, FROM_ID CALLER_ID) =/=Int #hashedLocation("Solidity", 1, FROM_ID) -andBool #hashedLocation("Solidity", 1, FROM_ID) =/=Int #hashedLocation("Solidity", 1, TO_ID) - - -endmodule - diff --git a/tests/specs/erc20/hkg/transferFrom-success-2-spec.k b/tests/specs/erc20/hkg/transferFrom-success-2-spec.k deleted file mode 100644 index a39219b227..0000000000 --- a/tests/specs/erc20/hkg/transferFrom-success-2-spec.k +++ /dev/null @@ -1,119 +0,0 @@ -requires "../verification.k" - -module TRANSFERFROM-SUCCESS-2-SPEC - imports VERIFICATION - - // transferFrom-success-2 - claim - - #execute => #halt - 1 - NORMAL - CONSTANTINOPLE - - - - _ => #buf(32, 1) - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #computeValidJumpDests(#parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029")) - - ACCT_ID // contract owner - CALLER_ID // who called this contract; in the begining, origin // msg.sender - - #abiCallData("transferFrom", #address(FROM_ID), #address(TO_ID), #uint256(VALUE)) - - 0 - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - false // NOTE: non-static call - CALL_DEPTH - - - - _ - _:List ( .List => ListItem(#abiEventLog(ACCT_ID, "Transfer", #indexed(#address(FROM_ID)), #indexed(#address(TO_ID)), #uint256(VALUE))) ) - _ => ?_ // TODO: more detail - _ => ?_ - _ => ?_ - - - _ - ORIGIN_ID // who fires tx - - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - - - - - _ - - - - ACCT_ID - _ - #parseByteStack("0x60606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007257806323b872dd146100cc57806370a0823114610145578063a9059cbb14610192578063dd62ed3e146101ec575b600080fd5b341561007d57600080fd5b6100b2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610258565b604051808215151515815260200191505060405180910390f35b34156100d757600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061034a565b604051808215151515815260200191505060405180910390f35b341561015057600080fd5b61017c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105c6565b6040518082815260200191505060405180910390f35b341561019d57600080fd5b6101d2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061060f565b604051808215151515815260200191505060405180910390f35b34156101f757600080fd5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610778565b6040518082815260200191505060405180910390f35b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610417575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104235750600082115b156105ba5781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506105bf565b600090505b9392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106605750600082115b1561076d5781600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610772565b600090505b92915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058206cb5284e8795f7d1c570318732bc1cb8add2222946156c0ba28c946531c4a2f50029") - #hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> (ALLOW => ALLOW -Int VALUE) -_:Map - #hashedLocation("Solidity", 1, FROM_ID) |-> BAL_FROM -#hashedLocation("Solidity", 2, FROM_ID CALLER_ID) |-> ALLOW -_:Map - _ - - // ... // TODO: fix - - - _ - _ - _ - - - - requires 0 <=Int ACCT_ID andBool ACCT_ID Int 0 -andBool #hashedLocation("Solidity", 2, FROM_ID CALLER_ID) =/=Int #hashedLocation("Solidity", 1, FROM_ID) - - -endmodule - diff --git a/tests/specs/erc20/verification.k b/tests/specs/erc20/verification.k deleted file mode 100644 index 7afe6285fc..0000000000 --- a/tests/specs/erc20/verification.k +++ /dev/null @@ -1,13 +0,0 @@ -requires "edsl.md" -requires "evm-symbolic.k" -requires "lemmas/lemmas.k" - -module VERIFICATION - imports VERIFICATION-HASKELL - imports LEMMAS - -endmodule - -module VERIFICATION-HASKELL [symbolic, kore] - imports EDSL -endmodule diff --git a/tests/specs/examples/ERC20.sol b/tests/specs/examples/ERC20.sol deleted file mode 100644 index f62add45a8..0000000000 --- a/tests/specs/examples/ERC20.sol +++ /dev/null @@ -1,94 +0,0 @@ -// THIS IS A BUGGY ERC20 -// DO NOT USE FOR ANYTHING - -pragma solidity >=0.6.0; - -contract ERC20 { - - mapping(address => uint256) private _balances; - mapping(address => mapping(address => uint256)) private _allowances; - - uint256 private _totalSupply; - uint8 private _decimals; - string private _name; - string private _symbol; - - constructor ( - string memory name - , string memory symbol - , address initAccount - , uint256 initSupply - , uint8 decimals - ) public { - _name = name; - _symbol = symbol; - _decimals = decimals; - _mint(initAccount, initSupply); - } - - function name() public view returns (string memory) { return _name; } - function symbol() public view returns (string memory) { return _symbol; } - function decimals() public view returns (uint256) { return _decimals; } - function totalSupply() public view returns (uint256) { return _totalSupply; } - - function balanceOf(address account) external view returns (uint256) { - return _balances[account]; - } - - function transfer(address to, uint256 amount) external returns (bool) { - _transfer(msg.sender, to, amount); - return true; - } - - function allowance(address owner, address spender) external view returns (uint256) { - return _allowances[owner][spender]; - } - - function approve(address spender, uint256 amount) external returns (bool) { - _approve(msg.sender, spender, amount); - return true; - } - - function transferFrom(address from, address to, uint256 amount) external returns (bool) { - _transfer(from, to, amount); - - uint256 currentAllowance = _allowances[from][msg.sender]; - require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); - _approve(from, msg.sender, currentAllowance - amount); - - return true; - } - - function _transfer(address from, address to, uint256 amount) internal { - require(from != address(0), "ERC20: transfer from the zero address"); - require(to != address(0), "ERC20: transfer to the zero address"); - uint256 toBalance = _balances[to]; - uint256 fromBalance = _balances[from]; - require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); - uint256 fromBalanceUpdated = fromBalance - amount; - uint256 toBalanceUpdated = toBalance + amount; - _balances[from] = fromBalanceUpdated; - _balances[to] = toBalanceUpdated; - } - - function _approve(address owner, address spender, uint256 amount) internal { - require(owner != address(0), "ERC20: approve from the zero address"); - require(spender != address(0), "ERC20: approve to the zero address"); - - _allowances[owner][spender] = amount; - } - - function _mint(address account, uint256 amount) internal { - require(account != address(0), "ERC20: mint to the zero address"); - require(_totalSupply <= _totalSupply + amount);//check overflow on totalSupply - _totalSupply = _totalSupply + amount; - _balances[account] = _balances[account] + amount; - } - - function _burn(address account, uint256 amount) internal { - require(account != address(0), "ERC20: burn from the zero address"); - require(_balances[account] >= _balances[account] - amount);//check underflow on balances - _totalSupply = _totalSupply - amount; - _balances[account] = _balances[account] - amount; - } -} diff --git a/tests/specs/examples/ERC721.sol b/tests/specs/examples/ERC721.sol deleted file mode 100644 index d3ec55f9d1..0000000000 --- a/tests/specs/examples/ERC721.sol +++ /dev/null @@ -1,982 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -// OpenZeppelin Contracts v4.4.1 (utils/Address.sol) - -/** - * @dev Collection of functions related to the address type - */ -library Address { - /** - * @dev Returns true if `account` is a contract. - * - * [IMPORTANT] - * ==== - * It is unsafe to assume that an address for which this function returns - * false is an externally-owned account (EOA) and not a contract. - * - * Among others, `isContract` will return false for the following - * types of addresses: - * - * - an externally-owned account - * - a contract in construction - * - an address where a contract will be created - * - an address where a contract lived, but was destroyed - * ==== - * - * [IMPORTANT] - * ==== - * You shouldn't rely on `isContract` to protect against flash loan attacks! - * - * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets - * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract - * constructor. - * ==== - */ - function isContract(address account) internal view returns (bool) { - // This method relies on extcodesize/address.code.length, which returns 0 - // for contracts in construction, since the code is only stored at the end - // of the constructor execution. - - return account.code.length > 0; - } - - /** - * @dev Replacement for Solidity's `transfer`: sends `amount` wei to - * `recipient`, forwarding all available gas and reverting on errors. - * - * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost - * of certain opcodes, possibly making contracts go over the 2300 gas limit - * imposed by `transfer`, making them unable to receive funds via - * `transfer`. {sendValue} removes this limitation. - * - * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. - * - * IMPORTANT: because control is transferred to `recipient`, care must be - * taken to not create reentrancy vulnerabilities. Consider using - * {ReentrancyGuard} or the - * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. - */ - function sendValue(address payable recipient, uint256 amount) internal { - require(address(this).balance >= amount, "Address: insufficient balance"); - - (bool success, ) = recipient.call{value: amount}(""); - require(success, "Address: unable to send value, recipient may have reverted"); - } - - /** - * @dev Performs a Solidity function call using a low level `call`. A - * plain `call` is an unsafe replacement for a function call: use this - * function instead. - * - * If `target` reverts with a revert reason, it is bubbled up by this - * function (like regular Solidity function calls). - * - * Returns the raw returned data. To convert to the expected return value, - * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. - * - * Requirements: - * - * - `target` must be a contract. - * - calling `target` with `data` must not revert. - * - * _Available since v3.1._ - */ - function functionCall(address target, bytes memory data) internal returns (bytes memory) { - return functionCall(target, data, "Address: low-level call failed"); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with - * `errorMessage` as a fallback revert reason when `target` reverts. - * - * _Available since v3.1._ - */ - function functionCall( - address target, - bytes memory data, - string memory errorMessage - ) internal returns (bytes memory) { - return functionCallWithValue(target, data, 0, errorMessage); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], - * but also transferring `value` wei to `target`. - * - * Requirements: - * - * - the calling contract must have an ETH balance of at least `value`. - * - the called Solidity function must be `payable`. - * - * _Available since v3.1._ - */ - function functionCallWithValue( - address target, - bytes memory data, - uint256 value - ) internal returns (bytes memory) { - return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); - } - - /** - * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but - * with `errorMessage` as a fallback revert reason when `target` reverts. - * - * _Available since v3.1._ - */ - function functionCallWithValue( - address target, - bytes memory data, - uint256 value, - string memory errorMessage - ) internal returns (bytes memory) { - require(address(this).balance >= value, "Address: insufficient balance for call"); - require(isContract(target), "Address: call to non-contract"); - - (bool success, bytes memory returndata) = target.call{value: value}(data); - return verifyCallResult(success, returndata, errorMessage); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], - * but performing a static call. - * - * _Available since v3.3._ - */ - function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { - return functionStaticCall(target, data, "Address: low-level static call failed"); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], - * but performing a static call. - * - * _Available since v3.3._ - */ - function functionStaticCall( - address target, - bytes memory data, - string memory errorMessage - ) internal view returns (bytes memory) { - require(isContract(target), "Address: static call to non-contract"); - - (bool success, bytes memory returndata) = target.staticcall(data); - return verifyCallResult(success, returndata, errorMessage); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], - * but performing a delegate call. - * - * _Available since v3.4._ - */ - function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { - return functionDelegateCall(target, data, "Address: low-level delegate call failed"); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], - * but performing a delegate call. - * - * _Available since v3.4._ - */ - function functionDelegateCall( - address target, - bytes memory data, - string memory errorMessage - ) internal returns (bytes memory) { - require(isContract(target), "Address: delegate call to non-contract"); - - (bool success, bytes memory returndata) = target.delegatecall(data); - return verifyCallResult(success, returndata, errorMessage); - } - - /** - * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the - * revert reason using the provided one. - * - * _Available since v4.3._ - */ - function verifyCallResult( - bool success, - bytes memory returndata, - string memory errorMessage - ) internal pure returns (bytes memory) { - if (success) { - return returndata; - } else { - // Look for revert reason and bubble it up if present - if (returndata.length > 0) { - // The easiest way to bubble the revert reason is using memory via assembly - - assembly { - let returndata_size := mload(returndata) - revert(add(32, returndata), returndata_size) - } - } else { - revert(errorMessage); - } - } - } -} - -// OpenZeppelin Contracts v4.4.1 (utils/Context.sol) - -/** - * @dev Provides information about the current execution context, including the - * sender of the transaction and its data. While these are generally available - * via msg.sender and msg.data, they should not be accessed in such a direct - * manner, since when dealing with meta-transactions the account sending and - * paying for execution may not be the actual sender (as far as an application - * is concerned). - * - * This contract is only required for intermediate, library-like contracts. - */ -abstract contract Context { - function _msgSender() internal view virtual returns (address) { - return msg.sender; - } - - function _msgData() internal view virtual returns (bytes calldata) { - return msg.data; - } -} - -// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) - -/** - * @dev String operations. - */ -library Strings { - bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; - - /** - * @dev Converts a `uint256` to its ASCII `string` decimal representation. - */ - function toString(uint256 value) internal pure returns (string memory) { - // Inspired by OraclizeAPI's implementation - MIT licence - // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol - - if (value == 0) { - return "0"; - } - uint256 temp = value; - uint256 digits; - while (temp != 0) { - digits++; - temp /= 10; - } - bytes memory buffer = new bytes(digits); - while (value != 0) { - digits -= 1; - buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); - value /= 10; - } - return string(buffer); - } - - /** - * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. - */ - function toHexString(uint256 value) internal pure returns (string memory) { - if (value == 0) { - return "0x00"; - } - uint256 temp = value; - uint256 length = 0; - while (temp != 0) { - length++; - temp >>= 8; - } - return toHexString(value, length); - } - - /** - * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. - */ - function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { - bytes memory buffer = new bytes(2 * length + 2); - buffer[0] = "0"; - buffer[1] = "x"; - for (uint256 i = 2 * length + 1; i > 1; --i) { - buffer[i] = _HEX_SYMBOLS[value & 0xf]; - value >>= 4; - } - require(value == 0, "Strings: hex length insufficient"); - return string(buffer); - } -} - -// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) - -/** - * @dev Interface of the ERC165 standard, as defined in the - * https://eips.ethereum.org/EIPS/eip-165[EIP]. - * - * Implementers can declare support of contract interfaces, which can then be - * queried by others ({ERC165Checker}). - * - * For an implementation, see {ERC165}. - */ -interface IERC165 { - /** - * @dev Returns true if this contract implements the interface defined by - * `interfaceId`. See the corresponding - * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] - * to learn more about how these ids are created. - * - * This function call must use less than 30 000 gas. - */ - function supportsInterface(bytes4 interfaceId) external view returns (bool); -} - -// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) - -/** - * @dev Implementation of the {IERC165} interface. - * - * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check - * for the additional interface id that will be supported. For example: - * - * ```solidity - * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { - * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); - * } - * ``` - * - * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. - */ -abstract contract ERC165 is IERC165 { - /** - * @dev See {IERC165-supportsInterface}. - */ - function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { - return interfaceId == type(IERC165).interfaceId; - } -} - -// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) - -/** - * @dev Required interface of an ERC721 compliant contract. - */ -interface IERC721 is IERC165 { - /** - * @dev Emitted when `tokenId` token is transferred from `from` to `to`. - */ - event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); - - /** - * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. - */ - event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); - - /** - * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. - */ - event ApprovalForAll(address indexed owner, address indexed operator, bool approved); - - /** - * @dev Returns the number of tokens in ``owner``'s account. - */ - function balanceOf(address owner) external view returns (uint256 balance); - - /** - * @dev Returns the owner of the `tokenId` token. - * - * Requirements: - * - * - `tokenId` must exist. - */ - function ownerOf(uint256 tokenId) external view returns (address owner); - - /** - * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients - * are aware of the ERC721 protocol to prevent tokens from being forever locked. - * - * Requirements: - * - * - `from` cannot be the zero address. - * - `to` cannot be the zero address. - * - `tokenId` token must exist and be owned by `from`. - * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. - * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. - * - * Emits a {Transfer} event. - */ - function safeTransferFrom( - address from, - address to, - uint256 tokenId - ) external; - - /** - * @dev Transfers `tokenId` token from `from` to `to`. - * - * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. - * - * Requirements: - * - * - `from` cannot be the zero address. - * - `to` cannot be the zero address. - * - `tokenId` token must be owned by `from`. - * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - * - * Emits a {Transfer} event. - */ - function transferFrom( - address from, - address to, - uint256 tokenId - ) external; - - /** - * @dev Gives permission to `to` to transfer `tokenId` token to another account. - * The approval is cleared when the token is transferred. - * - * Only a single account can be approved at a time, so approving the zero address clears previous approvals. - * - * Requirements: - * - * - The caller must own the token or be an approved operator. - * - `tokenId` must exist. - * - * Emits an {Approval} event. - */ - function approve(address to, uint256 tokenId) external; - - /** - * @dev Returns the account approved for `tokenId` token. - * - * Requirements: - * - * - `tokenId` must exist. - */ - function getApproved(uint256 tokenId) external view returns (address operator); - - /** - * @dev Approve or remove `operator` as an operator for the caller. - * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. - * - * Requirements: - * - * - The `operator` cannot be the caller. - * - * Emits an {ApprovalForAll} event. - */ - function setApprovalForAll(address operator, bool _approved) external; - - /** - * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. - * - * See {setApprovalForAll} - */ - function isApprovedForAll(address owner, address operator) external view returns (bool); - - /** - * @dev Safely transfers `tokenId` token from `from` to `to`. - * - * Requirements: - * - * - `from` cannot be the zero address. - * - `to` cannot be the zero address. - * - `tokenId` token must exist and be owned by `from`. - * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. - * - * Emits a {Transfer} event. - */ - function safeTransferFrom( - address from, - address to, - uint256 tokenId, - bytes calldata data - ) external; -} - -// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) - -/** - * @title ERC721 token receiver interface - * @dev Interface for any contract that wants to support safeTransfers - * from ERC721 asset contracts. - */ -interface IERC721Receiver { - /** - * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} - * by `operator` from `from`, this function is called. - * - * It must return its Solidity selector to confirm the token transfer. - * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. - * - * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. - */ - function onERC721Received( - address operator, - address from, - uint256 tokenId, - bytes calldata data - ) external returns (bytes4); -} - -// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) - -/** - * @title ERC-721 Non-Fungible Token Standard, optional metadata extension - * @dev See https://eips.ethereum.org/EIPS/eip-721 - */ -interface IERC721Metadata is IERC721 { - /** - * @dev Returns the token collection name. - */ - function name() external view returns (string memory); - - /** - * @dev Returns the token collection symbol. - */ - function symbol() external view returns (string memory); - - /** - * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. - */ - function tokenURI(uint256 tokenId) external view returns (string memory); -} - -// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) - -/** - * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including - * the Metadata extension, but not including the Enumerable extension, which is available separately as - * {ERC721Enumerable}. - */ -contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { - using Address for address; - using Strings for uint256; - - // Token name - string private _name; - - // Token symbol - string private _symbol; - - // Mapping from token ID to owner address - mapping(uint256 => address) private _owners; - - // Mapping owner address to token count - mapping(address => uint256) private _balances; - - // Mapping from token ID to approved address - mapping(uint256 => address) private _tokenApprovals; - - // Mapping from owner to operator approvals - mapping(address => mapping(address => bool)) private _operatorApprovals; - - /** - * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. - */ - constructor(string memory name_, string memory symbol_) { - _name = name_; - _symbol = symbol_; - } - - /** - * @dev See {IERC165-supportsInterface}. - */ - function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { - return - interfaceId == type(IERC721).interfaceId || - interfaceId == type(IERC721Metadata).interfaceId || - super.supportsInterface(interfaceId); - } - - /** - * @dev See {IERC721-balanceOf}. - */ - function balanceOf(address owner) public view virtual override returns (uint256) { - require(owner != address(0), "ERC721: balance query for the zero address"); - return _balances[owner]; - } - - /** - * @dev See {IERC721-ownerOf}. - */ - function ownerOf(uint256 tokenId) public view virtual override returns (address) { - address owner = _owners[tokenId]; - require(owner != address(0), "ERC721: owner query for nonexistent token"); - return owner; - } - - /** - * @dev See {IERC721Metadata-name}. - */ - function name() public view virtual override returns (string memory) { - return _name; - } - - /** - * @dev See {IERC721Metadata-symbol}. - */ - function symbol() public view virtual override returns (string memory) { - return _symbol; - } - - /** - * @dev See {IERC721Metadata-tokenURI}. - */ - function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { - require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); - - string memory baseURI = _baseURI(); - return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; - } - - /** - * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each - * token will be the concatenation of the `baseURI` and the `tokenId`. Empty - * by default, can be overriden in child contracts. - */ - function _baseURI() internal view virtual returns (string memory) { - return ""; - } - - /** - * @dev See {IERC721-approve}. - */ - function approve(address to, uint256 tokenId) public virtual override { - address owner = ERC721.ownerOf(tokenId); - require(to != owner, "ERC721: approval to current owner"); - - require( - _msgSender() == owner || isApprovedForAll(owner, _msgSender()), - "ERC721: approve caller is not owner nor approved for all" - ); - - _approve(to, tokenId); - } - - /** - * @dev See {IERC721-getApproved}. - */ - function getApproved(uint256 tokenId) public view virtual override returns (address) { - require(_exists(tokenId), "ERC721: approved query for nonexistent token"); - - return _tokenApprovals[tokenId]; - } - - /** - * @dev See {IERC721-setApprovalForAll}. - */ - function setApprovalForAll(address operator, bool approved) public virtual override { - _setApprovalForAll(_msgSender(), operator, approved); - } - - /** - * @dev See {IERC721-isApprovedForAll}. - */ - function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { - return _operatorApprovals[owner][operator]; - } - - /** - * @dev See {IERC721-transferFrom}. - */ - function transferFrom( - address from, - address to, - uint256 tokenId - ) public virtual override { - //solhint-disable-next-line max-line-length - require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); - - _transfer(from, to, tokenId); - } - - /** - * @dev See {IERC721-safeTransferFrom}. - */ - function safeTransferFrom( - address from, - address to, - uint256 tokenId - ) public virtual override { - safeTransferFrom(from, to, tokenId, ""); - } - - /** - * @dev See {IERC721-safeTransferFrom}. - */ - function safeTransferFrom( - address from, - address to, - uint256 tokenId, - bytes memory _data - ) public virtual override { - require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); - _safeTransfer(from, to, tokenId, _data); - } - - /** - * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients - * are aware of the ERC721 protocol to prevent tokens from being forever locked. - * - * `_data` is additional data, it has no specified format and it is sent in call to `to`. - * - * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. - * implement alternative mechanisms to perform token transfer, such as signature-based. - * - * Requirements: - * - * - `from` cannot be the zero address. - * - `to` cannot be the zero address. - * - `tokenId` token must exist and be owned by `from`. - * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. - * - * Emits a {Transfer} event. - */ - function _safeTransfer( - address from, - address to, - uint256 tokenId, - bytes memory _data - ) internal virtual { - _transfer(from, to, tokenId); - require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); - } - - /** - * @dev Returns whether `tokenId` exists. - * - * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. - * - * Tokens start existing when they are minted (`_mint`), - * and stop existing when they are burned (`_burn`). - */ - function _exists(uint256 tokenId) internal view virtual returns (bool) { - return _owners[tokenId] != address(0); - } - - /** - * @dev Returns whether `spender` is allowed to manage `tokenId`. - * - * Requirements: - * - * - `tokenId` must exist. - */ - function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { - require(_exists(tokenId), "ERC721: operator query for nonexistent token"); - address owner = ERC721.ownerOf(tokenId); - return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); - } - - /** - * @dev Safely mints `tokenId` and transfers it to `to`. - * - * Requirements: - * - * - `tokenId` must not exist. - * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. - * - * Emits a {Transfer} event. - */ - function _safeMint(address to, uint256 tokenId) internal virtual { - _safeMint(to, tokenId, ""); - } - - /** - * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is - * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. - */ - function _safeMint( - address to, - uint256 tokenId, - bytes memory _data - ) internal virtual { - _mint(to, tokenId); - require( - _checkOnERC721Received(address(0), to, tokenId, _data), - "ERC721: transfer to non ERC721Receiver implementer" - ); - } - - /** - * @dev Mints `tokenId` and transfers it to `to`. - * - * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible - * - * Requirements: - * - * - `tokenId` must not exist. - * - `to` cannot be the zero address. - * - * Emits a {Transfer} event. - */ - function _mint(address to, uint256 tokenId) internal virtual { - require(to != address(0), "ERC721: mint to the zero address"); - require(!_exists(tokenId), "ERC721: token already minted"); - - _beforeTokenTransfer(address(0), to, tokenId); - - _balances[to] += 1; - _owners[tokenId] = to; - - emit Transfer(address(0), to, tokenId); - - _afterTokenTransfer(address(0), to, tokenId); - } - - /** - * @dev Destroys `tokenId`. - * The approval is cleared when the token is burned. - * - * Requirements: - * - * - `tokenId` must exist. - * - * Emits a {Transfer} event. - */ - function _burn(uint256 tokenId) internal virtual { - address owner = ERC721.ownerOf(tokenId); - - _beforeTokenTransfer(owner, address(0), tokenId); - - // Clear approvals - _approve(address(0), tokenId); - - _balances[owner] -= 1; - delete _owners[tokenId]; - - emit Transfer(owner, address(0), tokenId); - - _afterTokenTransfer(owner, address(0), tokenId); - } - - /** - * @dev Transfers `tokenId` from `from` to `to`. - * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. - * - * Requirements: - * - * - `to` cannot be the zero address. - * - `tokenId` token must be owned by `from`. - * - * Emits a {Transfer} event. - */ - function _transfer( - address from, - address to, - uint256 tokenId - ) internal virtual { - require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); - require(to != address(0), "ERC721: transfer to the zero address"); - - _beforeTokenTransfer(from, to, tokenId); - - // Clear approvals from the previous owner - _approve(address(0), tokenId); - - _balances[from] -= 1; - _balances[to] += 1; - _owners[tokenId] = to; - - emit Transfer(from, to, tokenId); - - _afterTokenTransfer(from, to, tokenId); - } - - /** - * @dev Approve `to` to operate on `tokenId` - * - * Emits a {Approval} event. - */ - function _approve(address to, uint256 tokenId) internal virtual { - _tokenApprovals[tokenId] = to; - emit Approval(ERC721.ownerOf(tokenId), to, tokenId); - } - - /** - * @dev Approve `operator` to operate on all of `owner` tokens - * - * Emits a {ApprovalForAll} event. - */ - function _setApprovalForAll( - address owner, - address operator, - bool approved - ) internal virtual { - require(owner != operator, "ERC721: approve to caller"); - _operatorApprovals[owner][operator] = approved; - emit ApprovalForAll(owner, operator, approved); - } - - /** - * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. - * The call is not executed if the target address is not a contract. - * - * @param from address representing the previous owner of the given token ID - * @param to target address that will receive the tokens - * @param tokenId uint256 ID of the token to be transferred - * @param _data bytes optional data to send along with the call - * @return bool whether the call correctly returned the expected magic value - */ - function _checkOnERC721Received( - address from, - address to, - uint256 tokenId, - bytes memory _data - ) private returns (bool) { - if (to.isContract()) { - try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { - return retval == IERC721Receiver.onERC721Received.selector; - } catch (bytes memory reason) { - if (reason.length == 0) { - revert("ERC721: transfer to non ERC721Receiver implementer"); - } else { - assembly { - revert(add(32, reason), mload(reason)) - } - } - } - } else { - return true; - } - } - - /** - * @dev Hook that is called before any token transfer. This includes minting - * and burning. - * - * Calling conditions: - * - * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be - * transferred to `to`. - * - When `from` is zero, `tokenId` will be minted for `to`. - * - When `to` is zero, ``from``'s `tokenId` will be burned. - * - `from` and `to` are never both zero. - * - * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. - */ - function _beforeTokenTransfer( - address from, - address to, - uint256 tokenId - ) internal virtual {} - - /** - * @dev Hook that is called after any transfer of tokens. This includes - * minting and burning. - * - * Calling conditions: - * - * - when `from` and `to` are both non-zero. - * - `from` and `to` are never both zero. - * - * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. - */ - function _afterTokenTransfer( - address from, - address to, - uint256 tokenId - ) internal virtual {} -} diff --git a/tests/specs/examples/Empty.sol b/tests/specs/examples/Empty.sol deleted file mode 100644 index 21a7692229..0000000000 --- a/tests/specs/examples/Empty.sol +++ /dev/null @@ -1,4 +0,0 @@ -pragma solidity >=0.6.0; - -contract Empty { -} diff --git a/tests/specs/examples/Storage.sol b/tests/specs/examples/Storage.sol deleted file mode 100644 index 5a795bb182..0000000000 --- a/tests/specs/examples/Storage.sol +++ /dev/null @@ -1,98 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -contract Storage { - bool public myBool; - - uint8 public myUint8; - uint16 public myUint16; - uint24 public myUint24; - uint32 public myUint32; - uint40 public myUint40; - uint48 public myUint48; - uint56 public myUint56; - uint64 public myUint64; - uint72 public myUint72; - uint80 public myUint80; - uint88 public myUint88; - uint96 public myUint96; - uint104 public myUint104; - uint112 public myUint112; - uint120 public myUint120; - uint128 public myUint128; - uint136 public myUint136; - uint144 public myUint144; - uint152 public myUint152; - uint160 public myUint160; - uint168 public myUint168; - uint176 public myUint176; - uint184 public myUint184; - uint192 public myUint192; - uint200 public myUint200; - uint208 public myUint208; - uint216 public myUint216; - uint224 public myUint224; - uint232 public myUint232; - uint240 public myUint240; - uint248 public myUint248; - uint256 public myUint256; - - int8 public myInt8; - int16 public myInt16; - int24 public myInt24; - int32 public myInt32; - int40 public myInt40; - int48 public myInt48; - int56 public myInt56; - int64 public myInt64; - int72 public myInt72; - int80 public myInt80; - int88 public myInt88; - int96 public myInt96; - int104 public myInt104; - int112 public myInt112; - int120 public myInt120; - int128 public myInt128; - int136 public myInt136; - int144 public myInt144; - int152 public myInt152; - int160 public myInt160; - int168 public myInt168; - int176 public myInt176; - int184 public myInt184; - int192 public myInt192; - int200 public myInt200; - int208 public myInt208; - int216 public myInt216; - int224 public myInt224; - int232 public myInt232; - int240 public myInt240; - int248 public myInt248; - int256 public myInt256; - - string public myString; - bytes public myBytes; - - uint128[] myUint128s; - uint64[5] myUint64s; - - struct Foo { - uint128 myUint128; - uint8[] myUint8Array; - } - - Foo myFoo; - Foo[] myFoos; - - constructor () { - myBool = true; - myUint128 = 100; - myUint256 = 200; - myString = "foo"; - } - - function setMyBool(bool newBool) public { - myBool = newBool; - } - -} diff --git a/tests/specs/examples/erc20-spec.md b/tests/specs/examples/erc20-spec.md deleted file mode 100644 index 6b71db1931..0000000000 --- a/tests/specs/examples/erc20-spec.md +++ /dev/null @@ -1,225 +0,0 @@ -ERC20-ish Verification -====================== - -```k -requires "edsl.md" -requires "optimizations.md" -requires "lemmas/lemmas.k" -``` - -Solidity Code -------------- - -File [`ERC20.sol`](ERC20.sol) contains some code snippets we want to verify the functional correctness of. -Call `kevm solc-to-k ERC20.sol ERC20 --main-module ERC20-VERIFICATION > erc20-bin-runtime.k `, to generate the helper K files. - -Verification Module -------------------- - -Helper module for verification tasks. - -- Add any lemmas needed for our proofs. -- Import a large body of existing lemmas from KEVM. - -```k -requires "erc20-bin-runtime.k" - -module VERIFICATION - imports EDSL - imports LEMMAS - imports EVM-OPTIMIZATIONS - imports ERC20-VERIFICATION - - // decimals lemmas - // --------------- - - rule 255 &Int X true requires 0 <=Int X [simplification, smt-lemma] - rule 0 <=Int 255 &Int X => true requires 0 <=Int X [simplification, smt-lemma] - -endmodule -``` - -K Specifications ----------------- - -Formal specifications (using KEVM) of the correctness properties for our Solidity code. - -```k -module ERC20-SPEC - imports VERIFICATION -``` - -### Functional Claims - -```k - claim (#bufStrict(32, #loc(S2KERC20._allowances[OWNER]))) => (#buf(32, keccak(#buf(32, OWNER) +Bytes #buf(32, 1)))) - requires #rangeAddress(OWNER) -``` - -### Calling decimals() works - -- Everything from `` to `` is boilerplate. -- We are setting `` to `decimals()`. -- We ask the prover to show that in all cases, we will end in `EVMC_SUCCESS` (rollback) when this happens. -- The `` cell specifies that we correctly lookup the `DECIMALS` value from the account storage. - -```k - claim [decimals]: - NORMAL - ISTANBUL - - .List - #binRuntime(S2KERC20) - #computeValidJumpDests(#binRuntime(S2KERC20)) - - ACCTID => ?_ - .Bytes => ?_ - 0 => ?_ - .WordStack => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - - S2KERC20.S2Kdecimals() - #execute => #halt ... - .Bytes => #buf(32, DECIMALS) - _ => EVMC_SUCCESS - - - ACCTID - ACCT_STORAGE - ... - - - requires DECIMALS_KEY ==Int #loc(S2KERC20._decimals) - andBool DECIMALS ==Int 255 &Int #lookup(ACCT_STORAGE, DECIMALS_KEY) -``` - -### Calling totalSupply() works - -- Everything from `` to `` is boilerplate. -- We are setting `` to `totalSupply()`. -- We ask the prover to show that in all cases, we will end in `EVMC_SUCCESS` (rollback) when this happens. -- The `` cell specifies that we correctly lookup the `TS` value from the account storage. - - -```k - claim [totalSupply]: - NORMAL - ISTANBUL - - .List - #binRuntime(S2KERC20) - #computeValidJumpDests(#binRuntime(S2KERC20)) - - ACCTID => ?_ - .Bytes => ?_ - 0 => ?_ - .WordStack => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - - S2KERC20.S2KtotalSupply() - #execute => #halt ... - .Bytes => #buf(32, TOTALSUPPLY) - _ => EVMC_SUCCESS - - - ACCTID - ACCT_STORAGE - ... - - - requires TOTALSUPPLY_KEY ==Int #loc(S2KERC20._totalSupply) - andBool TOTALSUPPLY ==Int #lookup(ACCT_STORAGE, TOTALSUPPLY_KEY) -``` - -### Calling Approve works - -- Everything from `` to `` is boilerplate. -- We are setting `` to `approve(SPENDER : address, AMOUNT : uint256)`. -- We ask the prover to show that in all cases, we will end in `EVMC_SUCCESS` when `SENDER` or `OWNER` is not `address(0)`, and that we will end in `EVMC_REVERT` (rollback) when either one of them is. -- We take the OWNER from the `` cell, which is the `msg.sender`. -- The `` should be `#buf(32, bool2Word(True))` if the function does not revert. -- The storage locations for Allowance should be updated accordingly. - -```k - claim [approve.success]: - NORMAL - ISTANBUL - - .List - #binRuntime(S2KERC20) - #computeValidJumpDests(#binRuntime(S2KERC20)) - false - - ACCTID => ?_ - OWNER => ?_ - .Bytes => ?_ - 0 => ?_ - .WordStack => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - S2KERC20.S2Kapprove(SPENDER : address, AMOUNT : uint256) - #execute => #halt ... - .Bytes => #buf(32, 1) - _ => EVMC_SUCCESS - - - ACCTID - ACCT_STORAGE => ACCT_STORAGE [ ALLOWANCE_KEY <- AMOUNT ] - ... - - - requires ALLOWANCE_KEY ==Int #loc(S2KERC20._allowances[OWNER][SPENDER]) - andBool #rangeAddress(OWNER) - andBool #rangeAddress(SPENDER) - andBool #rangeUInt(256, AMOUNT) - andBool OWNER =/=Int 0 - andBool SPENDER =/=Int 0 -``` - -```k - claim [approve.revert]: - NORMAL - ISTANBUL - - .List - #binRuntime(S2KERC20) - #computeValidJumpDests(#binRuntime(S2KERC20)) - false - - ACCTID => ?_ - OWNER => ?_ - .Bytes => ?_ - 0 => ?_ - .WordStack => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - _ => ?_ - - S2KERC20.S2Kapprove(SPENDER : address, AMOUNT : uint256) - #execute => #halt ... - _ => ?_ - _ => EVMC_REVERT - - - ACCTID - _ACCT_STORAGE - ... - - - requires #rangeAddress(OWNER) - andBool #rangeAddress(SPENDER) - andBool #rangeUInt(256, AMOUNT) - andBool (OWNER ==Int 0 orBool SPENDER ==Int 0) -``` - -```k -endmodule -``` diff --git a/tests/specs/examples/erc20-spec/index.html b/tests/specs/examples/erc20-spec/index.html new file mode 100644 index 0000000000..230714290c --- /dev/null +++ b/tests/specs/examples/erc20-spec/index.html @@ -0,0 +1,437 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

ERC20-ish Verification

+
requires "edsl.md"
+requires "optimizations.md"
+requires "lemmas/lemmas.k"
+
+

Solidity Code

+

File ERC20.sol contains some code snippets we want to verify the functional correctness of. +Call kevm solc-to-k ERC20.sol ERC20 --main-module ERC20-VERIFICATION > erc20-bin-runtime.k , to generate the helper K files.

+

Verification Module

+

Helper module for verification tasks.

+
    +
  • Add any lemmas needed for our proofs.
  • +
  • Import a large body of existing lemmas from KEVM.
  • +
+
requires "erc20-bin-runtime.k"
+
+module VERIFICATION
+    imports EDSL
+    imports LEMMAS
+    imports EVM-OPTIMIZATIONS
+    imports ERC20-VERIFICATION
+
+ // decimals lemmas
+ // ---------------
+
+    rule         255 &Int X <Int 256 => true requires 0 <=Int X [simplification, smt-lemma]
+    rule 0 <=Int 255 &Int X          => true requires 0 <=Int X [simplification, smt-lemma]
+
+endmodule
+
+

K Specifications

+

Formal specifications (using KEVM) of the correctness properties for our Solidity code.

+
module ERC20-SPEC
+    imports VERIFICATION
+
+

Functional Claims

+
    claim (#bufStrict(32, #loc(S2KERC20._allowances[OWNER]))) => (#buf(32, keccak(#buf(32, OWNER) +Bytes #buf(32, 1))))
+      requires #rangeAddress(OWNER)
+
+

Calling decimals() works

+
    +
  • Everything from <mode> to <callValue> is boilerplate.
  • +
  • We are setting <callData> to decimals().
  • +
  • We ask the prover to show that in all cases, we will end in EVMC_SUCCESS (rollback) when this happens.
  • +
  • The <output> cell specifies that we correctly lookup the DECIMALS value from the account storage.
  • +
+
    claim [decimals]:
+          <mode>     NORMAL   </mode>
+          <schedule> ISTANBUL </schedule>
+
+          <callStack> .List                                      </callStack>
+          <program>   #binRuntime(S2KERC20)                         </program>
+          <jumpDests> #computeValidJumpDests(#binRuntime(S2KERC20)) </jumpDests>
+
+          <id>         ACCTID      => ?_ </id>
+          <localMem>   .Bytes     => ?_ </localMem>
+          <memoryUsed> 0           => ?_ </memoryUsed>
+          <wordStack>  .WordStack  => ?_ </wordStack>
+          <pc>         0           => ?_ </pc>
+          <gas>        #gas(_VGAS) => ?_ </gas>
+          <callValue>  0           => ?_ </callValue>
+
+          <callData>   S2KERC20.S2Kdecimals()               </callData>
+          <k>          #execute => #halt ...          </k>
+          <output>     .Bytes   => #buf(32, DECIMALS) </output>
+          <statusCode> _        => EVMC_SUCCESS       </statusCode>
+
+          <account>
+            <acctID> ACCTID </acctID>
+            <storage> ACCT_STORAGE </storage>
+            ...
+          </account>
+
+       requires DECIMALS_KEY ==Int #loc(S2KERC20._decimals)
+        andBool DECIMALS     ==Int 255 &Int #lookup(ACCT_STORAGE, DECIMALS_KEY)
+
+

Calling totalSupply() works

+
    +
  • Everything from <mode> to <callValue> is boilerplate.
  • +
  • We are setting <callData> to totalSupply().
  • +
  • We ask the prover to show that in all cases, we will end in EVMC_SUCCESS (rollback) when this happens.
  • +
  • The <output> cell specifies that we correctly lookup the TS value from the account storage.
  • +
+
    claim [totalSupply]:
+          <mode>     NORMAL   </mode>
+          <schedule> ISTANBUL </schedule>
+
+          <callStack> .List                                      </callStack>
+          <program>   #binRuntime(S2KERC20)                         </program>
+          <jumpDests> #computeValidJumpDests(#binRuntime(S2KERC20)) </jumpDests>
+
+          <id>         ACCTID      => ?_ </id>
+          <localMem>   .Bytes     => ?_ </localMem>
+          <memoryUsed> 0           => ?_ </memoryUsed>
+          <wordStack>  .WordStack  => ?_ </wordStack>
+          <pc>         0           => ?_ </pc>
+          <gas>        #gas(_VGAS) => ?_ </gas>
+          <callValue>  0           => ?_ </callValue>
+
+          <callData>   S2KERC20.S2KtotalSupply()               </callData>
+          <k>          #execute => #halt ...             </k>
+          <output>     .Bytes   => #buf(32, TOTALSUPPLY) </output>
+          <statusCode> _        => EVMC_SUCCESS          </statusCode>
+
+          <account>
+            <acctID> ACCTID </acctID>
+            <storage> ACCT_STORAGE </storage>
+            ...
+          </account>
+
+       requires TOTALSUPPLY_KEY ==Int #loc(S2KERC20._totalSupply)
+        andBool TOTALSUPPLY     ==Int #lookup(ACCT_STORAGE,  TOTALSUPPLY_KEY)
+
+

Calling Approve works

+
    +
  • Everything from <mode> to <substate> is boilerplate.
  • +
  • We are setting <callData> to approve(SPENDER : address, AMOUNT : uint256).
  • +
  • We ask the prover to show that in all cases, we will end in EVMC_SUCCESS when SENDER or OWNER is not address(0), and that we will end in EVMC_REVERT (rollback) when either one of them is.
  • +
  • We take the OWNER from the <caller> cell, which is the msg.sender.
  • +
  • The <output> should be #buf(32, bool2Word(True)) if the function does not revert.
  • +
  • The storage locations for Allowance should be updated accordingly.
  • +
+
    claim [approve.success]:
+          <mode>     NORMAL   </mode>
+          <schedule> ISTANBUL </schedule>
+
+          <callStack> .List                                      </callStack>
+          <program>   #binRuntime(S2KERC20)                         </program>
+          <jumpDests> #computeValidJumpDests(#binRuntime(S2KERC20)) </jumpDests>
+          <static>    false                                      </static>
+
+          <id>         ACCTID      => ?_ </id>
+          <caller>     OWNER       => ?_ </caller>
+          <localMem>   .Bytes     => ?_ </localMem>
+          <memoryUsed> 0           => ?_ </memoryUsed>
+          <wordStack>  .WordStack  => ?_ </wordStack>
+          <pc>         0           => ?_ </pc>
+          <gas>        #gas(_VGAS) => ?_ </gas>
+          <callValue>  0           => ?_ </callValue>
+          <substate> _             => ?_ </substate>
+
+          <callData>   S2KERC20.S2Kapprove(SPENDER : address, AMOUNT : uint256) </callData>
+          <k>          #execute => #halt ...        </k>
+          <output>     .Bytes   => #buf(32, 1)      </output>
+          <statusCode> _        => EVMC_SUCCESS     </statusCode>
+
+          <account>
+            <acctID> ACCTID </acctID>
+            <storage> ACCT_STORAGE => ACCT_STORAGE [ ALLOWANCE_KEY <- AMOUNT ] </storage>
+            ...
+          </account>
+
+       requires ALLOWANCE_KEY ==Int #loc(S2KERC20._allowances[OWNER][SPENDER])
+        andBool #rangeAddress(OWNER)
+        andBool #rangeAddress(SPENDER)
+        andBool #rangeUInt(256, AMOUNT)
+        andBool OWNER =/=Int 0
+        andBool SPENDER =/=Int 0
+
+
    claim [approve.revert]:
+          <mode>     NORMAL   </mode>
+          <schedule> ISTANBUL </schedule>
+
+          <callStack> .List                                      </callStack>
+          <program>   #binRuntime(S2KERC20)                         </program>
+          <jumpDests> #computeValidJumpDests(#binRuntime(S2KERC20)) </jumpDests>
+          <static>    false                                      </static>
+
+          <id>         ACCTID      => ?_ </id>
+          <caller>     OWNER       => ?_ </caller>
+          <localMem>   .Bytes     => ?_ </localMem>
+          <memoryUsed> 0           => ?_ </memoryUsed>
+          <wordStack>  .WordStack  => ?_ </wordStack>
+          <pc>         0           => ?_ </pc>
+          <gas>        #gas(_VGAS) => ?_ </gas>
+          <callValue>  0           => ?_ </callValue>
+          <substate> _             => ?_ </substate>
+
+          <callData>   S2KERC20.S2Kapprove(SPENDER : address, AMOUNT : uint256) </callData>
+          <k>          #execute   => #halt ...        </k>
+          <output>     _          => ?_               </output>
+          <statusCode> _          => EVMC_REVERT      </statusCode>
+
+          <account>
+            <acctID> ACCTID </acctID>
+            <storage> _ACCT_STORAGE </storage>
+            ...
+          </account>
+
+       requires #rangeAddress(OWNER)
+        andBool #rangeAddress(SPENDER)
+        andBool #rangeUInt(256, AMOUNT)
+        andBool (OWNER ==Int 0 orBool SPENDER ==Int 0)
+
+
endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/tests/specs/examples/erc721-spec.md b/tests/specs/examples/erc721-spec.md deleted file mode 100644 index 21067be299..0000000000 --- a/tests/specs/examples/erc721-spec.md +++ /dev/null @@ -1,143 +0,0 @@ -ERC721-ish Verification -======================= - -```k -requires "edsl.md" -requires "optimizations.md" -requires "lemmas/lemmas.k" -``` - -Solidity Code -------------- - -File [`ERC721.sol`](ERC721.sol) contains some code snippets we want to verify the functional correctness of. -Call `kevm solc-to-k ERC721.sol ERC721 > erc721-bin-runtime.k`, to generate the helper K files. - -Verification Module -------------------- - -Helper module for verification tasks. - -- Add any lemmas needed for our proofs. -- Import a large body of existing lemmas from KEVM. - -```k -requires "erc721-bin-runtime.k" - -module VERIFICATION - imports EDSL - imports LEMMAS - imports EVM-OPTIMIZATIONS - imports ERC721-VERIFICATION - - // Lemmas - // --------------- - - rule X &Int 127 true requires 0 <=Int X [simplification, smt-lemma] - rule 0 <=Int X &Int 127 => true requires 0 <=Int X [simplification, smt-lemma] - // rule X &Int 127 <=Int X => true requires 0 <=Int X [simplification, smt-lemma] - rule X &Int 127 true requires 0 <=Int X andBool X (((#lookup(ACCT_STORAGE, 0) /Int 2 &Int 127) +Int 31) /Int 32 *Int 32 +Int 224) -``` - -```k -claim (#lookup(ACCT_STORAGE, 0) /Int 2 (false) - requires 32 <=Int #lookup(ACCT_STORAGE, 0) /Int 2 &Int 127 -``` - -### Calling name() works - -- Everything from `` to `` is boilerplate. -- We are setting `` to `name()`. -- We claim that if NAME is a short string, we will end in `EVMC_SUCCESS` if it is well-formed, and in `EVMC_REVERT` otherwise. -- TODO: Add claims for long strings. -- TODO: The `` cell specifies that we correctly lookup the `NAME` value from the account storage. - -```k - claim [name.short.success]: - NORMAL - ISTANBUL - - .List - #binRuntime(S2KERC721) - #computeValidJumpDests(#binRuntime(S2KERC721)) - - ACCTID => ?_ - .Bytes => ?_ - 0 => ?_ - .WordStack => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - - S2KERC721.name() - #execute => #halt ... - .Bytes => ?_ - _ => EVMC_SUCCESS - - - ACCTID - ACCT_STORAGE - ... - - - requires NAME_KEY ==Int #loc(S2KERC721._name) - andBool NAME ==Int #lookup(ACCT_STORAGE, NAME_KEY) - andBool NAME &Int 1 ==Int 0 - andBool NAME /Int 2 &Int 127 NORMAL - ISTANBUL - - .List - #binRuntime(S2KERC721) - #computeValidJumpDests(#binRuntime(S2KERC721)) - - ACCTID => ?_ - .Bytes => ?_ - 0 => ?_ - .WordStack => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - - S2KERC721.name() - #execute => #halt ... - .Bytes => ?_ - _ => EVMC_REVERT - - - ACCTID - ACCT_STORAGE - ... - - - requires NAME_KEY ==Int #loc(S2KERC721._name) - andBool NAME ==Int #lookup(ACCT_STORAGE, NAME_KEY) - andBool NAME &Int 1 ==Int 0 - andBool 32 <=Int NAME /Int 2 &Int 127 -``` - -```k -endmodule -``` diff --git a/tests/specs/examples/erc721-spec/index.html b/tests/specs/examples/erc721-spec/index.html new file mode 100644 index 0000000000..a9ef8a8682 --- /dev/null +++ b/tests/specs/examples/erc721-spec/index.html @@ -0,0 +1,338 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

ERC721-ish Verification

+
requires "edsl.md"
+requires "optimizations.md"
+requires "lemmas/lemmas.k"
+
+

Solidity Code

+

File ERC721.sol contains some code snippets we want to verify the functional correctness of. +Call kevm solc-to-k ERC721.sol ERC721 > erc721-bin-runtime.k, to generate the helper K files.

+

Verification Module

+

Helper module for verification tasks.

+
    +
  • Add any lemmas needed for our proofs.
  • +
  • Import a large body of existing lemmas from KEVM.
  • +
+
requires "erc721-bin-runtime.k"
+
+module VERIFICATION
+    imports EDSL
+    imports LEMMAS
+    imports EVM-OPTIMIZATIONS
+    imports ERC721-VERIFICATION
+
+ // Lemmas
+ // ---------------
+
+    rule         X &Int 127 <Int 128 => true requires 0 <=Int X                   [simplification, smt-lemma]
+    rule 0 <=Int X &Int 127          => true requires 0 <=Int X                   [simplification, smt-lemma]
+ // rule         X &Int 127 <=Int X  => true requires 0 <=Int X                   [simplification, smt-lemma]
+    rule         X &Int 127  <Int 32 => true requires 0 <=Int X andBool X <Int 32 [simplification, smt-lemma]
+
+endmodule
+
+

K Specifications

+

Formal specifications (using KEVM) of the correctness properties for our Solidity code.

+
module ERC721-SPEC
+    imports VERIFICATION
+
+
claim (chop(chop(chop(chop(chop(chop((#lookup(ACCT_STORAGE, 0) /Int 2 &Int 127) +Int 31) /Int 32 *Int 32) +Int 32) +Int 128) +Int 32) +Int 32))
+       => (((#lookup(ACCT_STORAGE, 0) /Int 2 &Int 127) +Int 31) /Int 32 *Int 32 +Int 224)
+
+
claim (#lookup(ACCT_STORAGE, 0) /Int 2 <Int 32)
+       => (false)
+ requires 32 <=Int #lookup(ACCT_STORAGE, 0) /Int 2 &Int 127
+
+

Calling name() works

+
    +
  • Everything from <mode> to <callValue> is boilerplate.
  • +
  • We are setting <callData> to name().
  • +
  • We claim that if NAME is a short string, we will end in EVMC_SUCCESS if it is well-formed, and in EVMC_REVERT otherwise.
  • +
  • TODO: Add claims for long strings.
  • +
  • TODO: The <output> cell specifies that we correctly lookup the NAME value from the account storage.
  • +
+
    claim [name.short.success]:
+          <mode>     NORMAL   </mode>
+          <schedule> ISTANBUL </schedule>
+
+          <callStack> .List                                       </callStack>
+          <program>   #binRuntime(S2KERC721)                         </program>
+          <jumpDests> #computeValidJumpDests(#binRuntime(S2KERC721)) </jumpDests>
+
+          <id>         ACCTID      => ?_ </id>
+          <localMem>   .Bytes     => ?_ </localMem>
+          <memoryUsed> 0           => ?_ </memoryUsed>
+          <wordStack>  .WordStack  => ?_ </wordStack>
+          <pc>         0           => ?_ </pc>
+          <gas>        #gas(_VGAS) => ?_ </gas>
+          <callValue>  0           => ?_ </callValue>
+
+          <callData>   S2KERC721.name()            </callData>
+          <k>          #execute => #halt ...    </k>
+          <output>     .Bytes   => ?_           </output>
+          <statusCode> _        => EVMC_SUCCESS </statusCode>
+
+          <account>
+            <acctID>  ACCTID       </acctID>
+            <storage> ACCT_STORAGE </storage>
+            ...
+          </account>
+
+       requires NAME_KEY             ==Int #loc(S2KERC721._name)
+        andBool NAME                 ==Int #lookup(ACCT_STORAGE, NAME_KEY)
+        andBool NAME &Int 1          ==Int 0
+        andBool NAME /Int 2 &Int 127  <Int 32
+
+
    claim [name.short.revert]:
+          <mode>     NORMAL   </mode>
+          <schedule> ISTANBUL </schedule>
+
+          <callStack> .List                                       </callStack>
+          <program>   #binRuntime(S2KERC721)                         </program>
+          <jumpDests> #computeValidJumpDests(#binRuntime(S2KERC721)) </jumpDests>
+
+          <id>         ACCTID      => ?_ </id>
+          <localMem>   .Bytes     => ?_ </localMem>
+          <memoryUsed> 0           => ?_ </memoryUsed>
+          <wordStack>  .WordStack  => ?_ </wordStack>
+          <pc>         0           => ?_ </pc>
+          <gas>        #gas(_VGAS) => ?_ </gas>
+          <callValue>  0           => ?_ </callValue>
+
+          <callData>   S2KERC721.name()           </callData>
+          <k>          #execute => #halt ...   </k>
+          <output>     .Bytes   => ?_          </output>
+          <statusCode> _        => EVMC_REVERT </statusCode>
+
+          <account>
+            <acctID>  ACCTID       </acctID>
+            <storage> ACCT_STORAGE </storage>
+            ...
+          </account>
+
+       requires NAME_KEY    ==Int #loc(S2KERC721._name)
+        andBool NAME        ==Int #lookup(ACCT_STORAGE, NAME_KEY)
+        andBool NAME &Int 1 ==Int 0
+        andBool 32          <=Int NAME /Int 2 &Int 127
+
+
endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/tests/specs/examples/solidity-code-spec.md b/tests/specs/examples/solidity-code-spec.md deleted file mode 100644 index 933b952c6a..0000000000 --- a/tests/specs/examples/solidity-code-spec.md +++ /dev/null @@ -1,251 +0,0 @@ -Solidity Verification Example -============================= - -```k -requires "edsl.md" -requires "optimizations.md" -requires "lemmas/lemmas.k" -``` - -Solidity Code -------------- - -File `test.sol` contains some code snippets we want to verify the functional correctness of: - -```sol -pragma solidity =0.6.7; - -contract Test { - function add(uint256 a, uint256 b) external pure returns (uint256) { - uint256 c = a + b; - require(c >= a); - return c; - } - - function badAdd(uint256 a, uint256 b) external pure returns (uint256) { - uint256 c = a + b; - return c; - } - - function max(uint256 a, uint256 b) external pure returns (uint256) { - if (a < b) { - return b; - } - return a; - } -} -``` - -Run `solc test.sol --bin-runtime`: - -```evm -======= tests/specs/examples/test.sol:Test ======= -Binary of the runtime part: -608060405234801561001057600080fd5b50600436106100415760003560e01c80636d5433e614610046578063771602f7146100925780638b9732a9146100de575b600080fd5b61007c6004803603604081101561005c57600080fd5b81019080803590602001909291908035906020019092919050505061012a565b6040518082815260200191505060405180910390f35b6100c8600480360360408110156100a857600080fd5b810190808035906020019092919080359060200190929190505050610146565b6040518082815260200191505060405180910390f35b610114600480360360408110156100f457600080fd5b810190808035906020019092919080359060200190929190505050610165565b6040518082815260200191505060405180910390f35b60008183101561013c57819050610140565b8290505b92915050565b60008082840190508381101561015b57600080fd5b8091505092915050565b6000808284019050809150509291505056fea26469706673582212209559057d4829a2bd8b086d1af32f7f49152dfbebda288916bb69b51644a37bbe64736f6c63430006070033 -``` - -Verification Module -------------------- - -Helper module for verification tasks. - -- Define `#binRuntime()` as the compiled bytecode. -- Add any lemmas needed for our proofs. -- Import a large body of existing lemmas from KEVM. - -```k -module VERIFICATION - imports EDSL - imports LEMMAS - imports EVM-OPTIMIZATIONS - - rule #getValue(#uint256(X)) => X requires #rangeUInt(256, X) [simplification] - - rule X <=Int chop(X +Int Y) => false - requires #rangeUInt(256, X) - andBool #rangeUInt(256, Y) - andBool notBool #rangeUInt(256, X +Int Y) - [simplification] - - syntax Bytes ::= #binRuntime() [macro] - // -------------------------------------- - rule #binRuntime() => #parseByteStack("0x608060405234801561001057600080fd5b50600436106100415760003560e01c80636d5433e614610046578063771602f7146100925780638b9732a9146100de575b600080fd5b61007c6004803603604081101561005c57600080fd5b81019080803590602001909291908035906020019092919050505061012a565b6040518082815260200191505060405180910390f35b6100c8600480360360408110156100a857600080fd5b810190808035906020019092919080359060200190929190505050610146565b6040518082815260200191505060405180910390f35b610114600480360360408110156100f457600080fd5b810190808035906020019092919080359060200190929190505050610165565b6040518082815260200191505060405180910390f35b60008183101561013c57819050610140565b8290505b92915050565b60008082840190508381101561015b57600080fd5b8091505092915050565b6000808284019050809150509291505056fea26469706673582212209559057d4829a2bd8b086d1af32f7f49152dfbebda288916bb69b51644a37bbe64736f6c63430006070033") - -endmodule -``` - -K Specifications ----------------- - -Formal specifications (using KEVM) of the correctness properties for our Solidity code. - -```k -module SOLIDITY-CODE-SPEC - imports VERIFICATION -``` - -### Call with wrong call-data - -- Everything from `` to `` is boilerplate. -- We are setting `` to `add()`, which is not a signature that exists in the Solidity code. -- We ask the prover to show that in all cases, we will end in `EVMC_REVERT` (rollback) when this happens. -- This type of proof can be used to prevent some fallback function exploits. - -```k - claim [bad-call-data]: - NORMAL - ISTANBUL - - .List - #binRuntime() - #computeValidJumpDests(#binRuntime()) - - .Bytes => ?_ - 0 => ?_ - .WordStack => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - _CALL_VALUE => ?_ - - #abiCallData("add", .TypedArgs) - #execute => #halt ... - .Bytes => ?_ - _ => EVMC_REVERT -``` - -### Add Positive Case - -- `` says we are calling `add(X, Y)`. -- `` says we expect the function to return `X +Int Y` (addition did not overflow). -- `` says we expect the function to exit normally. -- `requires` says that we only expect this to happen if `0 <=Int X +Int Y NORMAL - ISTANBUL - - .List - #binRuntime() - #computeValidJumpDests(#binRuntime()) - - .Bytes => ?_ - 0 => ?_ - .WordStack => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - - #abiCallData("add", #uint256(X), #uint256(Y)) - #execute => #halt ... - .Bytes => #buf(32, X +Int Y) - _ => EVMC_SUCCESS - - requires #rangeUInt(256, X) - andBool #rangeUInt(256, Y) - andBool #rangeUInt(256, X +Int Y) -``` - -### Add Negative Case - -- `` says we are calling `add(X, Y)`. -- `` says we don't care what the function outputs. -- `` says we expect the function to exit in `REVERT` (state rollback). -- `requires` says that we only expect this to happen if `notBool (0 <=Int X +Int Y NORMAL
- ISTANBUL - - .List - #binRuntime() - #computeValidJumpDests(#binRuntime()) - - .Bytes => ?_ - 0 => ?_ - .WordStack => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - - #abiCallData("add", #uint256(X), #uint256(Y)) - #execute => #halt ... - .Bytes => ?_ - _ => EVMC_REVERT - - requires #rangeUInt(256, X) - andBool #rangeUInt(256, Y) - andBool notBool #rangeUInt(256, X +Int Y) -``` - -### Bad Add Failing Negative Case - -- `` says we are calling `badAdd(X, Y)`. -- `` says we don't care what the function returns. -- `` says we expect the function to exit in `REVERT` (state rollback). -- `requires` says that we only expect this to happen if `notBool (0 <=Int X +Int Y NORMAL
- ISTANBUL - - .List - #binRuntime() - #computeValidJumpDests(#binRuntime()) - - .Bytes => ?_ - 0 => ?_ - .WordStack => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - - #abiCallData("badAdd", #uint256(X), #uint256(Y)) - #execute => #halt ... - .Bytes => ?_ - _ => EVMC_REVERT - - requires #rangeUInt(256, X) - andBool #rangeUInt(256, Y) - andBool notBool #rangeUInt(256, X +Int Y) -``` - -### Max Positive Case - -- `` says we are calling `max(X, Y)`. -- `` says we want the function to return the maximum of `X` and `Y`. -- `` says we expect the function to exit normally (no `REVERT`). -- Note that here the prover must consider two branches (for the `if ...` statement in the Solidity code). - -```k - claim [max-positive]: - NORMAL - ISTANBUL - - .List - #binRuntime() - #computeValidJumpDests(#binRuntime()) - - .Bytes => ?_ - 0 => ?_ - .WordStack => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - - #abiCallData("max", #uint256(X), #uint256(Y)) - #execute => #halt ... - .Bytes => #buf(32, maxInt(X, Y)) - _ => EVMC_SUCCESS - - requires #rangeUInt(256, X) - andBool #rangeUInt(256, Y) -``` - -```k -endmodule -``` diff --git a/tests/specs/examples/solidity-code-spec/index.html b/tests/specs/examples/solidity-code-spec/index.html new file mode 100644 index 0000000000..927e8ec438 --- /dev/null +++ b/tests/specs/examples/solidity-code-spec/index.html @@ -0,0 +1,467 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Solidity Verification Example

+
requires "edsl.md"
+requires "optimizations.md"
+requires "lemmas/lemmas.k"
+
+

Solidity Code

+

File test.sol contains some code snippets we want to verify the functional correctness of:

+
pragma solidity =0.6.7;
+
+contract Test {
+    function add(uint256 a, uint256 b) external pure returns (uint256) {
+        uint256 c = a + b;
+        require(c >= a);
+        return c;
+    }
+
+    function badAdd(uint256 a, uint256 b) external pure returns (uint256) {
+        uint256 c = a + b;
+        return c;
+    }
+
+    function max(uint256 a, uint256 b) external pure returns (uint256) {
+        if (a < b) {
+            return b;
+        }
+        return a;
+    }
+}
+
+

Run solc test.sol --bin-runtime:

+
======= tests/specs/examples/test.sol:Test =======
+Binary of the runtime part:
+608060405234801561001057600080fd5b50600436106100415760003560e01c80636d5433e614610046578063771602f7146100925780638b9732a9146100de575b600080fd5b61007c6004803603604081101561005c57600080fd5b81019080803590602001909291908035906020019092919050505061012a565b6040518082815260200191505060405180910390f35b6100c8600480360360408110156100a857600080fd5b810190808035906020019092919080359060200190929190505050610146565b6040518082815260200191505060405180910390f35b610114600480360360408110156100f457600080fd5b810190808035906020019092919080359060200190929190505050610165565b6040518082815260200191505060405180910390f35b60008183101561013c57819050610140565b8290505b92915050565b60008082840190508381101561015b57600080fd5b8091505092915050565b6000808284019050809150509291505056fea26469706673582212209559057d4829a2bd8b086d1af32f7f49152dfbebda288916bb69b51644a37bbe64736f6c63430006070033
+
+

Verification Module

+

Helper module for verification tasks.

+
    +
  • Define #binRuntime() as the compiled bytecode.
  • +
  • Add any lemmas needed for our proofs.
  • +
  • Import a large body of existing lemmas from KEVM.
  • +
+
module VERIFICATION
+    imports EDSL
+    imports LEMMAS
+    imports EVM-OPTIMIZATIONS
+
+    rule #getValue(#uint256(X)) => X requires #rangeUInt(256, X) [simplification]
+
+    rule X <=Int chop(X +Int Y) => false
+      requires #rangeUInt(256, X)
+       andBool #rangeUInt(256, Y)
+       andBool notBool #rangeUInt(256, X +Int Y)
+      [simplification]
+
+    syntax Bytes ::= #binRuntime() [macro]
+ // --------------------------------------
+    rule #binRuntime() => #parseByteStack("0x608060405234801561001057600080fd5b50600436106100415760003560e01c80636d5433e614610046578063771602f7146100925780638b9732a9146100de575b600080fd5b61007c6004803603604081101561005c57600080fd5b81019080803590602001909291908035906020019092919050505061012a565b6040518082815260200191505060405180910390f35b6100c8600480360360408110156100a857600080fd5b810190808035906020019092919080359060200190929190505050610146565b6040518082815260200191505060405180910390f35b610114600480360360408110156100f457600080fd5b810190808035906020019092919080359060200190929190505050610165565b6040518082815260200191505060405180910390f35b60008183101561013c57819050610140565b8290505b92915050565b60008082840190508381101561015b57600080fd5b8091505092915050565b6000808284019050809150509291505056fea26469706673582212209559057d4829a2bd8b086d1af32f7f49152dfbebda288916bb69b51644a37bbe64736f6c63430006070033")
+
+endmodule
+
+

K Specifications

+

Formal specifications (using KEVM) of the correctness properties for our Solidity code.

+
module SOLIDITY-CODE-SPEC
+    imports VERIFICATION
+
+

Call with wrong call-data

+
    +
  • Everything from <mode> to <callValue> is boilerplate.
  • +
  • We are setting <callData> to add(), which is not a signature that exists in the Solidity code.
  • +
  • We ask the prover to show that in all cases, we will end in EVMC_REVERT (rollback) when this happens.
  • +
  • This type of proof can be used to prevent some fallback function exploits.
  • +
+
    claim [bad-call-data]:
+          <mode>     NORMAL   </mode>
+          <schedule> ISTANBUL </schedule>
+
+          <callStack> .List                                 </callStack>
+          <program>   #binRuntime()                         </program>
+          <jumpDests> #computeValidJumpDests(#binRuntime()) </jumpDests>
+
+          <localMem>   .Bytes     => ?_ </localMem>
+          <memoryUsed> 0           => ?_ </memoryUsed>
+          <wordStack>  .WordStack  => ?_ </wordStack>
+          <pc>         0           => ?_ </pc>
+          <gas>        #gas(_VGAS) => ?_ </gas>
+          <callValue>  _CALL_VALUE => ?_ </callValue>
+
+          <callData> #abiCallData("add", .TypedArgs) </callData>
+          <k>          #execute => #halt ...   </k>
+          <output>     .Bytes   => ?_          </output>
+          <statusCode> _        => EVMC_REVERT </statusCode>
+
+

Add Positive Case

+
    +
  • <callData> says we are calling add(X, Y).
  • +
  • <output> says we expect the function to return X +Int Y (addition did not overflow).
  • +
  • <statusCode> says we expect the function to exit normally.
  • +
  • requires says that we only expect this to happen if 0 <=Int X +Int Y <Int 2 ^Int 256 (no overflow).
  • +
+
    claim [add-positive]:
+          <mode>     NORMAL   </mode>
+          <schedule> ISTANBUL </schedule>
+
+          <callStack> .List                                 </callStack>
+          <program>   #binRuntime()                         </program>
+          <jumpDests> #computeValidJumpDests(#binRuntime()) </jumpDests>
+
+          <localMem>   .Bytes     => ?_ </localMem>
+          <memoryUsed> 0           => ?_ </memoryUsed>
+          <wordStack>  .WordStack  => ?_ </wordStack>
+          <pc>         0           => ?_ </pc>
+          <gas>        #gas(_VGAS) => ?_ </gas>
+          <callValue>  0           => ?_ </callValue>
+
+          <callData> #abiCallData("add", #uint256(X), #uint256(Y)) </callData>
+          <k>          #execute => #halt ...          </k>
+          <output>     .Bytes   => #buf(32, X +Int Y) </output>
+          <statusCode> _        => EVMC_SUCCESS       </statusCode>
+
+     requires #rangeUInt(256, X)
+      andBool #rangeUInt(256, Y)
+      andBool #rangeUInt(256, X +Int Y)
+
+

Add Negative Case

+
    +
  • <callData> says we are calling add(X, Y).
  • +
  • <output> says we don't care what the function outputs.
  • +
  • <statusCode> says we expect the function to exit in REVERT (state rollback).
  • +
  • requires says that we only expect this to happen if notBool (0 <=Int X +Int Y <Int 2 ^Int 256) (overflow occurs).
  • +
  • Note that add-positive and add-negative should cover all cases for add(X, Y).
  • +
+
    claim [add-negative]:
+          <mode>     NORMAL   </mode>
+          <schedule> ISTANBUL </schedule>
+
+          <callStack> .List                                 </callStack>
+          <program>   #binRuntime()                         </program>
+          <jumpDests> #computeValidJumpDests(#binRuntime()) </jumpDests>
+
+          <localMem>   .Bytes     => ?_ </localMem>
+          <memoryUsed> 0           => ?_ </memoryUsed>
+          <wordStack>  .WordStack  => ?_ </wordStack>
+          <pc>         0           => ?_ </pc>
+          <gas>        #gas(_VGAS) => ?_ </gas>
+          <callValue>  0           => ?_ </callValue>
+
+          <callData> #abiCallData("add", #uint256(X), #uint256(Y)) </callData>
+          <k>          #execute => #halt ...   </k>
+          <output>     .Bytes   => ?_          </output>
+          <statusCode> _        => EVMC_REVERT </statusCode>
+
+     requires #rangeUInt(256, X)
+      andBool #rangeUInt(256, Y)
+      andBool notBool #rangeUInt(256, X +Int Y)
+
+

Bad Add Failing Negative Case

+
    +
  • <callData> says we are calling badAdd(X, Y).
  • +
  • <output> says we don't care what the function returns.
  • +
  • <statusCode> says we expect the function to exit in REVERT (state rollback).
  • +
  • requires says that we only expect this to happen if notBool (0 <=Int X +Int Y <Int 2 ^Int 256) (overflow occurs).
  • +
  • This proof fails, because the function badAdd fails to call REVERT on overflow.
  • +
+
    claim [badAdd-negative]:
+          <mode>     NORMAL   </mode>
+          <schedule> ISTANBUL </schedule>
+
+          <callStack> .List                                 </callStack>
+          <program>   #binRuntime()                         </program>
+          <jumpDests> #computeValidJumpDests(#binRuntime()) </jumpDests>
+
+          <localMem>   .Bytes     => ?_ </localMem>
+          <memoryUsed> 0           => ?_ </memoryUsed>
+          <wordStack>  .WordStack  => ?_ </wordStack>
+          <pc>         0           => ?_ </pc>
+          <gas>        #gas(_VGAS) => ?_ </gas>
+          <callValue>  0           => ?_ </callValue>
+
+          <callData> #abiCallData("badAdd", #uint256(X), #uint256(Y)) </callData>
+          <k>          #execute => #halt ...          </k>
+          <output>     .Bytes   => ?_                 </output>
+          <statusCode> _        => EVMC_REVERT        </statusCode>
+
+     requires #rangeUInt(256, X)
+      andBool #rangeUInt(256, Y)
+      andBool notBool #rangeUInt(256, X +Int Y)
+
+

Max Positive Case

+
    +
  • <callData> says we are calling max(X, Y).
  • +
  • <output> says we want the function to return the maximum of X and Y.
  • +
  • <statusCode> says we expect the function to exit normally (no REVERT).
  • +
  • Note that here the prover must consider two branches (for the if ... statement in the Solidity code).
  • +
+
    claim [max-positive]:
+          <mode>     NORMAL   </mode>
+          <schedule> ISTANBUL </schedule>
+
+          <callStack> .List                                 </callStack>
+          <program>   #binRuntime()                         </program>
+          <jumpDests> #computeValidJumpDests(#binRuntime()) </jumpDests>
+
+          <localMem>   .Bytes     => ?_ </localMem>
+          <memoryUsed> 0           => ?_ </memoryUsed>
+          <wordStack>  .WordStack  => ?_ </wordStack>
+          <pc>         0           => ?_ </pc>
+          <gas>        #gas(_VGAS) => ?_ </gas>
+          <callValue>  0           => ?_ </callValue>
+
+          <callData> #abiCallData("max", #uint256(X), #uint256(Y)) </callData>
+          <k>          #execute => #halt ...              </k>
+          <output>     .Bytes   => #buf(32, maxInt(X, Y)) </output>
+          <statusCode> _        => EVMC_SUCCESS           </statusCode>
+
+     requires #rangeUInt(256, X)
+      andBool #rangeUInt(256, Y)
+
+
endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/tests/specs/examples/storage-spec.md b/tests/specs/examples/storage-spec.md deleted file mode 100644 index e9c19df6ec..0000000000 --- a/tests/specs/examples/storage-spec.md +++ /dev/null @@ -1,140 +0,0 @@ -Storage Verification -==================== - -```k -requires "edsl.md" -requires "optimizations.md" -requires "lemmas/lemmas.k" -``` - -Solidity Code -------------- - -File [`Storage.sol`](Storage.sol) contains some code snippets we want to verify the functional correctness of. -Call `kevm solc-to-k Storage.sol Storage > storage-bin-runtime.k`, to generate the helper K files. - -Verification Module -------------------- - -Helper module for verification tasks. - -- Add any lemmas needed for our proofs. -- Import a large body of existing lemmas from KEVM. - -```k -requires "storage-bin-runtime.k" - -module VERIFICATION - imports EDSL - imports LEMMAS - imports EVM-OPTIMIZATIONS - imports STORAGE-VERIFICATION - - // decimals lemmas - // --------------- - - rule 255 &Int X true requires 0 <=Int X [simplification, smt-lemma] - rule 0 <=Int 255 &Int X => true requires 0 <=Int X [simplification, smt-lemma] - - rule bool2Word ( notBool WORD ==Int 0 ) => WORD [simplification] - -endmodule -``` - -K Specifications ----------------- - -Formal specifications (using KEVM) of the correctness properties for our Solidity code. - -```k -module STORAGE-SPEC - imports VERIFICATION -``` - -### Functional Claims - -```k - claim (#bufStrict(32, #loc(S2KStorage . myBool))) => (#buf(32,0)) -``` - -### Calling myBool() works - -- Everything from `` to `` is boilerplate. -- We are setting `` to `myBool()`. -- We ask the prover to show that in all cases, we will end in `EVMC_SUCCESS` (rollback) when this happens. -- The `` cell specifies that we correctly lookup the `myBool` value from the account storage. - -```k - claim [myBool]: - NORMAL - ISTANBUL - - .List - #binRuntime(S2KStorage) - #computeValidJumpDests(#binRuntime(S2KStorage)) - - ACCTID => ?_ - .Bytes => ?_ - 0 => ?_ - .WordStack => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - - S2KStorage.S2KmyBool() - #execute => #halt ... - .Bytes => #buf(32, MYBOOL) - _ => EVMC_SUCCESS - - - ACCTID - ACCT_STORAGE - ... - - - requires MYBOOL_KEY ==Int #loc(S2KStorage . myBool) - andBool MYBOOL ==Int 255 &Int #lookup(ACCT_STORAGE, MYBOOL_KEY) -``` - - -```k - claim [setMyBool]: - NORMAL - ISTANBUL - - .List - #binRuntime(S2KStorage) - #computeValidJumpDests(#binRuntime(S2KStorage)) - false - - ACCTID => ?_ - .Bytes => ?_ - 0 => ?_ - .WordStack => ?_ - 0 => ?_ - #gas(_VGAS) => ?_ - 0 => ?_ - - S2KStorage.S2KsetMyBool(NEW_VAL : bool) - #execute => #halt ... - .Bytes - _ => EVMC_SUCCESS - - - ACCTID - ACCT_STORAGE => ACCT_STORAGE [ MYBOOL_KEY <- NEW_STORAGE_CONTENT ] - ... - - - _ => ?_ - - requires #rangeBool(NEW_VAL) - andBool MYBOOL_KEY ==Int #loc(S2KStorage . myBool) - andBool OLD_STORAGE_CONTENT ==Int #lookup ( ACCT_STORAGE , MYBOOL_KEY ) - andBool NEW_STORAGE_CONTENT ==Int NEW_VAL |Int ((~Word 255) &Int OLD_STORAGE_CONTENT) - -``` - -```k -endmodule -``` diff --git a/tests/specs/examples/storage-spec/index.html b/tests/specs/examples/storage-spec/index.html new file mode 100644 index 0000000000..0d59fcc67a --- /dev/null +++ b/tests/specs/examples/storage-spec/index.html @@ -0,0 +1,342 @@ + + + + + + + + + + + + + +KEVM: Semantics of EVM in K | Runtime Verification, Inc. + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Storage Verification

+
requires "edsl.md"
+requires "optimizations.md"
+requires "lemmas/lemmas.k"
+
+

Solidity Code

+

File Storage.sol contains some code snippets we want to verify the functional correctness of. +Call kevm solc-to-k Storage.sol Storage > storage-bin-runtime.k, to generate the helper K files.

+

Verification Module

+

Helper module for verification tasks.

+
    +
  • Add any lemmas needed for our proofs.
  • +
  • Import a large body of existing lemmas from KEVM.
  • +
+
requires "storage-bin-runtime.k"
+
+module VERIFICATION
+    imports EDSL
+    imports LEMMAS
+    imports EVM-OPTIMIZATIONS
+    imports STORAGE-VERIFICATION
+
+ // decimals lemmas
+ // ---------------
+
+    rule         255 &Int X <Int 256 => true requires 0 <=Int X [simplification, smt-lemma]
+    rule 0 <=Int 255 &Int X          => true requires 0 <=Int X [simplification, smt-lemma]
+
+    rule bool2Word ( notBool WORD ==Int 0 ) => WORD           [simplification]
+
+endmodule
+
+

K Specifications

+

Formal specifications (using KEVM) of the correctness properties for our Solidity code.

+
module STORAGE-SPEC
+    imports VERIFICATION
+
+

Functional Claims

+
    claim (#bufStrict(32, #loc(S2KStorage . myBool))) => (#buf(32,0))
+
+

Calling myBool() works

+
    +
  • Everything from <mode> to <callValue> is boilerplate.
  • +
  • We are setting <callData> to myBool().
  • +
  • We ask the prover to show that in all cases, we will end in EVMC_SUCCESS (rollback) when this happens.
  • +
  • The <output> cell specifies that we correctly lookup the myBool value from the account storage.
  • +
+
    claim [myBool]:
+          <mode>     NORMAL   </mode>
+          <schedule> ISTANBUL </schedule>
+
+          <callStack> .List                                        </callStack>
+          <program>   #binRuntime(S2KStorage)                         </program>
+          <jumpDests> #computeValidJumpDests(#binRuntime(S2KStorage)) </jumpDests>
+
+          <id>         ACCTID      => ?_ </id>
+          <localMem>   .Bytes     => ?_ </localMem>
+          <memoryUsed> 0           => ?_ </memoryUsed>
+          <wordStack>  .WordStack  => ?_ </wordStack>
+          <pc>         0           => ?_ </pc>
+          <gas>        #gas(_VGAS) => ?_ </gas>
+          <callValue>  0           => ?_ </callValue>
+
+          <callData>   S2KStorage.S2KmyBool()               </callData>
+          <k>          #execute => #halt ...          </k>
+          <output>     .Bytes   => #buf(32, MYBOOL)   </output>
+          <statusCode> _        => EVMC_SUCCESS       </statusCode>
+
+          <account>
+            <acctID> ACCTID </acctID>
+            <storage> ACCT_STORAGE </storage>
+            ...
+          </account>
+
+       requires MYBOOL_KEY ==Int #loc(S2KStorage . myBool)
+        andBool MYBOOL     ==Int 255 &Int #lookup(ACCT_STORAGE, MYBOOL_KEY)
+
+
    claim [setMyBool]:
+          <mode>     NORMAL   </mode>
+          <schedule> ISTANBUL </schedule>
+
+          <callStack> .List                                        </callStack>
+          <program>   #binRuntime(S2KStorage)                         </program>
+          <jumpDests> #computeValidJumpDests(#binRuntime(S2KStorage)) </jumpDests>
+          <static>    false                                        </static>
+
+          <id>         ACCTID      => ?_ </id>
+          <localMem>   .Bytes     => ?_ </localMem>
+          <memoryUsed> 0           => ?_ </memoryUsed>
+          <wordStack>  .WordStack  => ?_ </wordStack>
+          <pc>         0           => ?_ </pc>
+          <gas>        #gas(_VGAS) => ?_ </gas>
+          <callValue>  0           => ?_ </callValue>
+
+          <callData>   S2KStorage.S2KsetMyBool(NEW_VAL : bool) </callData>
+          <k>          #execute   => #halt ...           </k>
+          <output>     .Bytes                            </output>
+          <statusCode> _          => EVMC_SUCCESS        </statusCode>
+
+          <account>
+            <acctID> ACCTID </acctID>
+            <storage> ACCT_STORAGE => ACCT_STORAGE [ MYBOOL_KEY <- NEW_STORAGE_CONTENT ] </storage>
+            ...
+          </account>
+
+          <refund> _ => ?_ </refund>
+
+       requires #rangeBool(NEW_VAL)
+        andBool MYBOOL_KEY          ==Int #loc(S2KStorage . myBool)
+        andBool OLD_STORAGE_CONTENT ==Int #lookup ( ACCT_STORAGE , MYBOOL_KEY )
+        andBool NEW_STORAGE_CONTENT ==Int NEW_VAL |Int ((~Word 255) &Int OLD_STORAGE_CONTENT) 
+
+
+
endmodule
+
+
+
+ + + +
+ +
+
+ + + + + + + + + + + diff --git a/tests/specs/examples/sum-to-n-foundry-spec.k b/tests/specs/examples/sum-to-n-foundry-spec.k deleted file mode 100644 index c730aa5203..0000000000 --- a/tests/specs/examples/sum-to-n-foundry-spec.k +++ /dev/null @@ -1,70 +0,0 @@ -requires "lemmas/lemmas.k" -requires "gas.md" - -module VERIFICATION - imports LEMMAS - imports INFINITE-GAS - - rule N xorInt maxUInt256 => maxUInt256 -Int N - requires #rangeUInt(256, N) - [simplification] - -endmodule - -module SUM-TO-N-FOUNDRY-SPEC - imports VERIFICATION - -claim [foundry-sum-to-n-loop-invariant]: - - - ((JUMPI 1569 bool2Word ( N:Int ==Int 0 )) => JUMP 1569) - ~> #pc [ JUMPI ] - ~> #execute - ... - - - NORMAL - - - LONDON - - - - - - b"`\x80`@R4\x80\x15a\x00\x10W`\x00\x80\xfd[P`\x046\x10a\x01,W`\x005`\xe0\x1c\x80c]\xe2/\x07\x11a\x00\xadW\x80c\xa1\x18\xe1\x02\x11a\x00qW\x80c\xa1\x18\xe1\x02\x14a\x02bW\x80c\xbaAO\xa6\x14a\x02uW\x80c\xd3\x13\x94\r\x14a\x02\x8dW\x80c\xf8\xcc\xbfG\x14a\x02\xa0W\x80c\xfav&\xd4\x14a\x02\xb3W`\x00\x80\xfd[\x80c]\xe2/\x07\x14a\x02\x03W\x80cm]9\xdf\x14a\x02\x16W\x80c~\x8e#\xd0\x14a\x02)W\x80c\x88~O\xdb\x14a\x02=`\x00\xfd[PPPP`\x00`\x02\x82`\x01a\x04\x8f\x91\x90a\x13eV[a\x04\x99\x90\x84a\x13}V[a\x04\xa3\x91\x90a\x138V[\x90P`\x00a\x04\xb0\x83a\f`V[\x90Pa\x03\x14\x82\x82a\f\x92V[`\x00a\x04\xc7\x82a\rqV[\x90P`\x01`\x00[\x83Q\x81\x10\x80\x15a\x04\xdbWP\x81[\x15a\x05\x12W\x83\x81\x81Q\x81\x10a\x04\xf2Wa\x04\xf2a\x13\x9cV[` \x02` \x01\x01Q\x83\x10\x15\x91P\x80\x80a\x05\n\x90a\x13LV[\x91PPa\x04\xceV[Pa\x03\x14\x81a\t\x9bV[`\x00a\x03&`da\x05\x89V[`\x00a\x053\x82a\r\xd0V[\x90P`\x01`\x00[\x83Q\x81\x10\x80\x15a\x05GWP\x81[\x15a\x05\x12W\x83\x81\x81Q\x81\x10a\x05^Wa\x05^a\x13\x9cV[` \x02` \x01\x01Q\x83\x10\x15\x91P\x80\x80a\x05v\x90a\x13LV[\x91PPa\x05:V[`\x00a\x02\xcb\x83a\x0e.V[`@Qc&1\xf2\xb1`\xe1\x1b\x81Rf\xb8\x17\x02\xe0\\\x0bo\x82\x11\x15`\x04\x82\x01R`\x00\x90sq\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-\x90cLc\xe5b\x90`$\x01`\x00`@Q\x80\x83\x03\x81`\x00\x87\x80;\x15\x80\x15a\x05\xe2W`\x00\x80\xfd[PZ\xf1\x15\x80\x15a\x05\xf6W=`\x00\x80>=`\x00\xfd[PPPP`\x00[\x82\x15a\x06!Wa\x06\r\x83\x82a\x13eV[\x90Pa\x06\x1a`\x01\x84a\x13!V[\x92Pa\x05\xfdV[\x92\x91PPV[`@Qc&1\xf2\xb1`\xe1\x1b\x81R`d\x82\x11\x15`\x04\x82\x01Rsq\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-\x90cLc\xe5b\x90`$\x01`\x00`@Q\x80\x83\x03\x81`\x00\x87\x80;\x15\x80\x15a\x06wW`\x00\x80\xfd[PZ\xf1\x15\x80\x15a\x06\x8bW=`\x00\x80>=`\x00\xfd[PPPP`\x00`\x02\x82`\x01a\x06\xa0\x91\x90a\x13eV[a\x06\xaa\x90\x84a\x13}V[a\x06\xb4\x91\x90a\x138V[\x90P`\x00a\x04\xb0\x83a\x0eeV[`\x00a\x06\xcc\x82a\x0e\x8fV[\x90P`\x01\x80[\x82Q\x81\x10\x80\x15a\x06\xdfWP\x81[\x15a\x05\x12W\x83\x81\x81Q\x81\x10a\x06\xf6Wa\x06\xf6a\x13\x9cV[` \x02` \x01\x01Q\x84`\x01\x83a\x07\f\x91\x90a\x13!V[\x81Q\x81\x10a\x07\x1cWa\x07\x1ca\x13\x9cV[` \x02` \x01\x01Q\x11\x15\x91P\x80\x80a\x073\x90a\x13LV[\x91PPa\x06\xd2V[`\x00a\x07F\x83a\x0e\xbbV[\x90P\x82`\x00\x03a\x07[Wa\x03\x14\x81`\x00a\f\x92V[a\x07ga\x02\xdd\x82a\tJV[`\x00a\x07|a\x07w`\x01\x86a\x13!V[a\x0e\xbbV[\x90Pa\x03\x83\x81\x84\x11\x15\x80a\x07\x90WP\x82\x84\x10\x15[\x80a\x02\xddWPa\x07\x9f\x84a\tJV[\x15a\t\x9bV[`\x00\x80Ta\x01\x00\x90\x04`\xff\x16\x15a\x07\xc5WP`\x00Ta\x01\x00\x90\x04`\xff\x16\x90V[`\x00sq\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-;\x15a\x08\xcbW`@\x80Qsq\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-` \x82\x01\x81\x90Re\x19\x98Z[\x19Y`\xd2\x1b\x82\x84\x01R\x82Q\x80\x83\x03\x84\x01\x81R``\x83\x01\x90\x93R`\x00\x92\x90\x91a\x08S\x91\x7ff\x7f\x9dp\xcaA\x1dp\xea\xd5\r\x8d\\\"\x07\r\xaf\xc3j\xd7_=\xcf^r7\xb2*\xde\x9a\xec\xc4\x91`\x80\x01a\x13\xdeV[`@\x80Q`\x1f\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x08m\x91a\x14\x0fV[`\x00`@Q\x80\x83\x03\x81`\x00\x86Z\xf1\x91PP=\x80`\x00\x81\x14a\x08\xaaW`@Q\x91P`\x1f\x19`?=\x01\x16\x82\x01`@R=\x82R=`\x00` \x84\x01>a\x08\xafV[``\x91P[P\x91PP\x80\x80` \x01\x90Q\x81\x01\x90a\x08\xc7\x91\x90a\x14+V[\x91PP[\x91\x90PV[`\x00a\x08\xdb\x82a\x0e\xf5V[\x90P`\x01\x80[\x82Q\x81\x10\x80\x15a\x08\xeeWP\x81[\x15a\x05\x12W\x83\x81\x81Q\x81\x10a\t\x05Wa\t\x05a\x13\x9cV[` \x02` \x01\x01Q\x84`\x01\x83a\t\x1b\x91\x90a\x13!V[\x81Q\x81\x10a\t+Wa\t+a\x13\x9cV[` \x02` \x01\x01Q\x11\x15\x91P\x80\x80a\tB\x90a\x13LV[\x91PPa\x08\xe1V[`\x00`\x02\x82\x10\x15a\t]WP`\x00\x91\x90PV[`\x02[\x82\x81\x10\x15a\t\x92Wa\tr\x81\x84a\x12\xf7V[\x15a\t\x80WP`\x00\x92\x91PPV[\x80a\t\x8a\x81a\x13LV[\x91PPa\t`V[P`\x01\x92\x91PPV[\x80a\x03\xa3W\x7fA0O\xac\xd92=u\xb1\x1b\xcd\xd6\t\xcb8\xef\xff\xfd\xb0W\x10\xf7\xca\xf0\xe9\xb1lm\x9dp\x9fP`@Qa\t\xff\x90` \x80\x82R`\x17\x90\x82\x01R\x7fError: Assertion Failed\x00\x00\x00\x00\x00\x00\x00\x00\x00`@\x82\x01R``\x01\x90V[`@Q\x80\x91\x03\x90\xa1a\x03\xa3a\x0f\x17V[`\x00\x81`\x00\x03a\n!WP`\x00\x91\x90PV[\x81[\x80\x91P`\x02\x81a\n3\x85\x84a\x10#V[a\n=\x91\x90a\x13eV[a\nG\x91\x90a\x138V[\x90P\x81\x81\x03a\n#W[P\x91\x90PV[`\x00g\r\xe0\xb6\xb3\xa7d\x00\x00a\nm`\x02\x82a\x138V[a\nw\x84\x86a\x13}V[a\n\x81\x91\x90a\x13eV[a\n\x8b\x91\x90a\x138V[\x93\x92PPPV[`\x00`\x02\x82\x10\x15a\n\xa5WP`\x00\x91\x90PV[`\x02[a\n\xb3`\x02\x84a\x138V[\x81\x11a\t\x92Wa\n\xc3\x81\x84a\x12\xf7V[\x15a\n\xd1WP`\x00\x92\x91PPV[\x80a\n\xdb\x81a\x13LV[\x91PPa\n\xa8V[\x80\x15\x15\x82\x15\x15\x14a\x04\x06W\x7fA0O\xac\xd92=u\xb1\x1b\xcd\xd6\t\xcb8\xef\xff\xfd\xb0W\x10\xf7\xca\xf0\xe9\xb1lm\x9dp\x9fP`@Qa\x0bX\x90` \x80\x82R`\"\x90\x82\x01R\x7fError: a == b not satisfied [boo`@\x82\x01Ral]`\xf0\x1b``\x82\x01R`\x80\x01\x90V[`@Q\x80\x91\x03\x90\xa1\x7f(\x0fDF\xb2\x8a\x13rA}\xdae\x8d0\xb9[)\x92\xb1*\xc9\xc7\xf3xS_)\xa9z\xcf5\x83\x81a\x0b\xa9W`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01dfalse`\xd8\x1b\x81RPa\x0b\xc7V[`@Q\x80`@\x01`@R\x80`\x04\x81R` \x01ctrue`\xe0\x1b\x81RP[`@Qa\x0b\xd4\x91\x90a\x14yV[`@Q\x80\x91\x03\x90\xa1\x7f(\x0fDF\xb2\x8a\x13rA}\xdae\x8d0\xb9[)\x92\xb1*\xc9\xc7\xf3xS_)\xa9z\xcf5\x83\x82a\f%W`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01dfalse`\xd8\x1b\x81RPa\fCV[`@Q\x80`@\x01`@R\x80`\x04\x81R` \x01ctrue`\xe0\x1b\x81RP[`@Qa\fP\x91\x90a\x14\xbdV[`@Q\x80\x91\x03\x90\xa1a\x04\x06a\x0f\x17V[`\x00\x80\x80[\x83\x81\x10\x15a\f\x8bWa\fw\x81\x83a\x13eV[\x91P\x80a\f\x83\x81a\x13LV[\x91PPa\feV[P\x92\x91PPV[\x80\x82\x14a\x04\x06W\x7fA0O\xac\xd92=u\xb1\x1b\xcd\xd6\t\xcb8\xef\xff\xfd\xb0W\x10\xf7\xca\xf0\xe9\xb1lm\x9dp\x9fP`@Qa\r\x03\x90` \x80\x82R`\"\x90\x82\x01R\x7fError: a == b not satisfied [uin`@\x82\x01Rat]`\xf0\x1b``\x82\x01R`\x80\x01\x90V[`@Q\x80\x91\x03\x90\xa1\x7f\xb2\xde/\xbe\x80\x1a\r\xf6\xc0\xcb\xdd\xfdD\x8b\xa3\xc4\x1dH\xa0@\xca5\xc5l\x81\x96\xef\x0f\xca\xe7!\xa8\x81`@Qa\r:\x91\x90a\x14\xe7V[`@Q\x80\x91\x03\x90\xa1\x7f\xb2\xde/\xbe\x80\x1a\r\xf6\xc0\xcb\xdd\xfdD\x8b\xa3\xc4\x1dH\xa0@\xca5\xc5l\x81\x96\xef\x0f\xca\xe7!\xa8\x82`@Qa\fP\x91\x90a\x15\x1fV[`\x00\x80`\x01[\x83Q\x81\x10\x15a\f\x8bW\x81\x84\x82\x81Q\x81\x10a\r\x93Wa\r\x93a\x13\x9cV[` \x02` \x01\x01Q\x11\x15a\r\xbeW\x83\x81\x81Q\x81\x10a\r\xb3Wa\r\xb3a\x13\x9cV[` \x02` \x01\x01Q\x91P[\x80a\r\xc8\x81a\x13LV[\x91PPa\rwV[`\x00\x80\x80[\x83Q\x81\x10\x15a\f\x8bW\x81\x84\x82\x81Q\x81\x10a\r\xf1Wa\r\xf1a\x13\x9cV[` \x02` \x01\x01Q\x11\x15a\x0e\x1cW\x83\x81\x81Q\x81\x10a\x0e\x11Wa\x0e\x11a\x13\x9cV[` \x02` \x01\x01Q\x91P[\x80a\x0e&\x81a\x13LV[\x91PPa\r\xd5V[`\x00`\x02[\x82\x81\x10\x15a\t\x92Wa\x0eE\x81\x84a\x12\xf7V[\x15a\x0eSWP`\x00\x92\x91PPV[\x80a\x0e]\x81a\x13LV[\x91PPa\x0e3V[`\x00\x80\x80[\x83\x81\x11a\f\x8bWa\x0e{\x81\x83a\x13eV[\x91P\x80a\x0e\x87\x81a\x13LV[\x91PPa\x0ejV[```\x01\x82Q\x11a\x0e\x9eWP\x90V[a\x0e\xb7\x82`\x00`\x01\x85Qa\x0e\xb2\x91\x90a\x13!V[a\x10CV[P\x90V[`\x00\x80[\x82\x81\x10\x15a\nQW\x81a\x0e\xd1\x81a\x13LV[\x92PPa\x0e\xdd\x82a\tJV[\x15a\x0e\xf0W\x80a\x0e\xec\x81a\x13LV[\x91PP[a\x0e\xbfV[```\x01\x82Q\x11a\x0f\x04WP\x90V[a\x0e\xb7\x82`\x01\x80\x85Qa\x0e\xb2\x91\x90a\x13!V[sq\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-;\x15a\x10\x12W`@\x80Qsq\tp\x9e\xcf\xa9\x1a\x80bo\xf3\x98\x9dh\xf6\x7f[\x1d\xd1-` \x82\x01\x81\x90Re\x19\x98Z[\x19Y`\xd2\x1b\x92\x82\x01\x92\x90\x92R`\x01``\x82\x01R`\x00\x91\x90\x7fp\xca\x10\xbb\xd0\xdb\xfd\x90 \xa9\xf4\xb14\x02\xc1l\xb1 p^\r\x1c\n\xea\xb1\x0f\xa3S\xaeXo\xc4\x90`\x80\x01`@\x80Q`\x1f\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x0f\xb1\x92\x91` \x01a\x13\xdeV[`@\x80Q`\x1f\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x0f\xcb\x91a\x14\x0fV[`\x00`@Q\x80\x83\x03\x81`\x00\x86Z\xf1\x91PP=\x80`\x00\x81\x14a\x10\x08W`@Q\x91P`\x1f\x19`?=\x01\x16\x82\x01`@R=\x82R=`\x00` \x84\x01>a\x10\rV[``\x91P[PPPP[`\x00\x80Ta\xff\x00\x19\x16a\x01\x00\x17\x90UV[`\x00\x81a\x101`\x02\x82a\x138V[a\nwg\r\xe0\xb6\xb3\xa7d\x00\x00\x86a\x13}V[\x80\x82\x10a\x10OWPPPV[\x81\x81`\x00\x85`\x02a\x10`\x85\x85a\x13!V[a\x10j\x91\x90a\x138V[a\x10t\x90\x87a\x13eV[\x81Q\x81\x10a\x10\x84Wa\x10\x84a\x13\x9cV[` \x02` \x01\x01Q\x90P[\x81\x83\x11a\x11\xa4W[\x80\x86\x84\x81Q\x81\x10a\x10\xaaWa\x10\xaaa\x13\x9cV[` \x02` \x01\x01Q\x10\x15a\x10\xcaW\x82a\x10\xc2\x81a\x13LV[\x93PPa\x10\x97V[\x85\x82\x81Q\x81\x10a\x10\xdcWa\x10\xdca\x13\x9cV[` \x02` \x01\x01Q\x81\x10\x80\x15a\x10\xf2WP`\x00\x82\x11[\x15a\x11\tW\x81a\x11\x01\x81a\x15IV[\x92PPa\x10\xcaV[\x81\x83\x11a\x11\x9fW\x85\x82\x81Q\x81\x10a\x11\"Wa\x11\"a\x13\x9cV[` \x02` \x01\x01Q\x86\x84\x81Q\x81\x10a\x11 - - ( SetItem ( 548 ) ( SetItem ( 3844 ) ( SetItem ( 836 ) ( SetItem ( 4228 ) ( SetItem ( 4516 ) ( SetItem ( 324 ) ( SetItem ( 2725 ) ( SetItem ( 3685 ) ( SetItem ( 3653 ) ( SetItem ( 1957 ) ( SetItem ( 1989 ) ( SetItem ( 4965 ) ( SetItem ( 3109 ) ( SetItem ( 5221 ) ( SetItem ( 3173 ) ( SetItem ( 4581 ) ( SetItem ( 2309 ) ( SetItem ( 3622 ) ( SetItem ( 4614 ) ( SetItem ( 934 ) ( SetItem ( 806 ) ( SetItem ( 4870 ) ( SetItem ( 1862 ) ( SetItem ( 1030 ) ( SetItem ( 1126 ) ( SetItem ( 326 ) ( SetItem ( 3719 ) ( SetItem ( 1575 ) ( SetItem ( 2631 ) ( SetItem ( 3015 ) ( SetItem ( 1895 ) ( SetItem ( 4935 ) ( SetItem ( 5351 ) ( SetItem ( 2247 ) ( SetItem ( 1223 ) ( SetItem ( 391 ) ( SetItem ( 1351 ) ( SetItem ( 672 ) ( SetItem ( 1696 ) ( SetItem ( 704 ) ( SetItem ( 4192 ) ( SetItem ( 3168 ) ( SetItem ( 2432 ) ( SetItem ( 2400 ) ( SetItem ( 2689 ) ( SetItem ( 4833 ) ( SetItem ( 1729 ) ( SetItem ( 2593 ) ( SetItem ( 1569 ) ( SetItem ( 4897 ) ( SetItem ( 865 ) ( SetItem ( 2273 ) ( SetItem ( 5153 ) ( SetItem ( 5121 ) ( SetItem ( 4353 ) ( SetItem ( 353 ) ( SetItem ( 738 ) ( SetItem ( 4706 ) ( SetItem ( 610 ) ( SetItem ( 4290 ) ( SetItem ( 386 ) ( SetItem ( 1506 ) ( SetItem ( 4386 ) ( SetItem ( 2370 ) ( SetItem ( 2787 ) ( SetItem ( 2755 ) ( SetItem ( 4643 ) ( SetItem ( 2595 ) ( SetItem ( 515 ) ( SetItem ( 931 ) ( SetItem ( 899 ) ( SetItem ( 5283 ) ( SetItem ( 1187 ) ( SetItem ( 3203 ) ( SetItem ( 4131 ) ( SetItem ( 4163 ) ( SetItem ( 3139 ) ( SetItem ( 483 ) ( SetItem ( 3331 ) ( SetItem ( 3820 ) ( SetItem ( 1740 ) ( SetItem ( 1804 ) ( SetItem ( 4940 ) ( SetItem ( 300 ) ( SetItem ( 653 ) ( SetItem ( 4621 ) ( SetItem ( 1549 ) ( SetItem ( 2669 ) ( SetItem ( 5069 ) ( SetItem ( 781 ) ( SetItem ( 173 ) ( SetItem ( 4109 ) ( SetItem ( 2157 ) ( SetItem ( 5197 ) ( SetItem ( 461 ) ( SetItem ( 3630 ) ( SetItem ( 4686 ) ( SetItem ( 878 ) ( SetItem ( 2286 ) ( SetItem ( 1230 ) ( SetItem ( 334 ) ( SetItem ( 3727 ) ( SetItem ( 2575 ) ( SetItem ( 591 ) ( SetItem ( 2223 ) ( SetItem ( 4239 ) ( SetItem ( 1167 ) ( SetItem ( 5135 ) ( SetItem ( 4175 ) ( SetItem ( 4463 ) ( SetItem ( 367 ) ( SetItem ( 2728 ) ( SetItem ( 968 ) ( SetItem ( 4104 ) ( SetItem ( 4488 ) ( SetItem ( 488 ) ( SetItem ( 3528 ) ( SetItem ( 1320 ) ( SetItem ( 553 ) ( SetItem ( 2985 ) ( SetItem ( 905 ) ( SetItem ( 1001 ) ( SetItem ( 1417 ) ( SetItem ( 4361 ) ( SetItem ( 5449 ) ( SetItem ( 1706 ) ( SetItem ( 3690 ) ( SetItem ( 586 ) ( SetItem ( 4266 ) ( SetItem ( 2218 ) ( SetItem ( 4298 ) ( SetItem ( 1034 ) ( SetItem ( 4202 ) ( SetItem ( 2442 ) ( SetItem ( 4554 ) ( SetItem ( 1290 ) ( SetItem ( 2378 ) ( SetItem ( 2699 ) ( SetItem ( 1675 ) ( SetItem ( 715 ) ( SetItem ( 4043 ) ( SetItem ( 971 ) ( SetItem ( 811 ) ( SetItem ( 4875 ) ( SetItem ( 875 ) ( SetItem ( 3211 ) ( SetItem ( 2251 ) ( SetItem ( 5163 ) ( SetItem ( 2347 ) ( SetItem ( 1716 ) ( SetItem ( 756 ) ( SetItem ( 4724 ) ( SetItem ( 3028 ) ( SetItem ( 788 ) ( SetItem ( 244 ) ( SetItem ( 4212 ) ( SetItem ( 4596 ) ( SetItem ( 372 ) ( SetItem ( 3829 ) ( SetItem ( 4821 ) ( SetItem ( 629 ) ( SetItem ( 5045 ) ( SetItem ( 917 ) ( SetItem ( 5301 ) ( SetItem ( 437 ) ( SetItem ( 405 ) ( SetItem ( 3541 ) ( SetItem ( 469 ) ( SetItem ( 1782 ) ( SetItem ( 4662 ) ( SetItem ( 534 ) ( SetItem ( 822 ) ( SetItem ( 1046 ) ( SetItem ( 502 ) ( SetItem ( 1526 ) ( SetItem ( 1398 ) ( SetItem ( 4438 ) ( SetItem ( 4791 ) ( SetItem ( 3767 ) ( SetItem ( 4855 ) ( SetItem ( 567 ) ( SetItem ( 2679 ) ( SetItem ( 1655 ) ( SetItem ( 2647 ) ( SetItem ( 5015 ) ( SetItem ( 3863 ) ( SetItem ( 1911 ) ( SetItem ( 4247 ) ( SetItem ( 3191 ) ( SetItem ( 4535 ) ( SetItem ( 3447 ) ( SetItem ( 3824 ) ( SetItem ( 624 ) ( SetItem ( 1936 ) ( SetItem ( 1200 ) ( SetItem ( 2256 ) ( SetItem ( 16 ) ( SetItem ( 3152 ) ( SetItem ( 3536 ) ( SetItem ( 2769 ) ( SetItem ( 3793 ) ( SetItem ( 3601 ) ( SetItem ( 529 ) ( SetItem ( 2641 ) ( SetItem ( 4017 ) ( SetItem ( 945 ) ( SetItem ( 4145 ) ( SetItem ( 113 ) ( SetItem ( 3569 ) ( SetItem ( 305 ) ( SetItem ( 5393 ) ( SetItem ( 3441 ) ( SetItem ( 3762 ) ( SetItem ( 2706 ) ( SetItem ( 1746 ) ( SetItem ( 5042 ) ( SetItem ( 3218 ) ( SetItem ( 4338 ) ( SetItem ( 1266 ) ( SetItem ( 4114 ) ( SetItem ( 2450 ) ( SetItem ( 4562 ) ( SetItem ( 1298 ) ( SetItem ( 2418 ) ( SetItem ( 2739 ) ( SetItem ( 691 ) ( SetItem ( 2611 ) ( SetItem ( 3635 ) ( SetItem ( 3667 ) ( SetItem ( 1011 ) ( SetItem ( 4915 ) ( SetItem ( 1843 ) ( SetItem ( 2131 ) ( SetItem ( 3507 ) ( SetItem ( 3475 ) ( SetItem ( 1331 ) ( SetItem ( 4796 ) ( SetItem ( 572 ) ( SetItem ( 3612 ) ( SetItem ( 5020 ) ( SetItem ( 1820 ) ( SetItem ( 892 ) ( SetItem ( 1916 ) ( SetItem ( 1212 ) ( SetItem ( 4316 ) ( SetItem ( 4412 ) ( SetItem ( 1308 ) ( SetItem ( 765 ) ( SetItem ( 3805 ) ( SetItem ( 733 ) ( SetItem ( 2621 ) ( SetItem ( 637 ) ( SetItem ( 3677 ) ( SetItem ( 605 ) ( SetItem ( 989 ) ( SetItem ( 4989 ) ( SetItem ( 5309 ) ( SetItem ( 5181 ) ( SetItem ( 1533 ) ( SetItem ( 2397 ) ( SetItem ( 3742 ) ( SetItem ( 926 ) ( SetItem ( 5086 ) ( SetItem ( 4958 ) ( SetItem ( 3518 ) ( SetItem ( 1406 ) ( SetItem ( 1374 ) ( SetItem ( 3775 ) ( SetItem ( 1759 ) ( SetItem ( 959 ) ( SetItem ( 1951 ) ( SetItem ( 4511 ) ( SetItem ( 2559 ) ( SetItem ( 319 ) ( SetItem ( 5407 ) ( SetItem ( 4920 ) ( SetItem ( 4984 ) ( SetItem ( 2904 ) ( SetItem ( 5464 ) ( SetItem ( 344 ) ( SetItem ( 4761 ) ( SetItem ( 793 ) ( SetItem ( 1177 ) ( SetItem ( 5241 ) ( SetItem ( 1562 ) ( SetItem ( 858 ) ( SetItem ( 1146 ) ( SetItem ( 410 ) ( SetItem ( 3386 ) ( SetItem ( 1338 ) ( SetItem ( 3771 ) ( SetItem ( 667 ) ( SetItem ( 2779 ) ( SetItem ( 3707 ) ( SetItem ( 1019 ) ( SetItem ( 1851 ) ( SetItem ( 1883 ) ( SetItem ( 2267 ) ( SetItem ( 1243 ) ( SetItem ( 4507 ) ( SetItem ( 2459 ) ( SetItem ( 507 ) SetItem ( 2331 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) - - - (S => (S +Int ((N *Int (N +Int 1)) /Int 2))) - : 0 - : (N => 0) - : 334 - : 2123244496 - : .WordStack - - - 1539 - - - GAS_AMT:Int => GAS_AMT -Int (N *Int 178) - - ... - - ... - - ... - - ... - - - requires 0 =Int N *Int 178 - - -endmodule diff --git a/tests/specs/examples/sum-to-n-spec.k b/tests/specs/examples/sum-to-n-spec.k deleted file mode 100644 index b741fdb3b3..0000000000 --- a/tests/specs/examples/sum-to-n-spec.k +++ /dev/null @@ -1,71 +0,0 @@ -requires "asm.md" -requires "lemmas/lemmas.k" - -module VERIFICATION - imports EVM-ASSEMBLY - imports LEMMAS - - rule #sizeWordStack ( WS , N:Int ) - => N +Int #sizeWordStack ( WS , 0 ) - requires N =/=K 0 [simplification] - - rule bool2Word(A) ==K 0 => notBool(A) [simplification] - - rule chop(I) => I requires #rangeUInt(256, I) [simplification] - - rule 0 <=Int #sizeWordStack ( _ , _ ) => true [simplification, smt-lemma] - - syntax Bytes ::= "sumToN" [macro] - // ------------------------------------- - rule sumToN - => #asmOpCodes(PUSH(1, 0) ; SWAP(1) // s = 0 ; n = N - ; JUMPDEST // label:loop - ; DUP(1) ; ISZERO ; PUSH(1, 20) ; JUMPI // if n == 0, jump to end - ; DUP(1) ; SWAP(2) ; ADD // s = s + n - ; SWAP(1) ; PUSH(1, 1) ; SWAP(1) ; SUB // n = n - 1 - ; PUSH(1, 3) ; JUMP // jump to loop - ; JUMPDEST // label:end - ; .OpCodes - ) -endmodule - -module SUM-TO-N-SPEC - imports VERIFICATION - - claim #execute ... - NORMAL - ISTANBUL - .List - 0 - .Bytes - _ - sumToN - #computeValidJumpDests(sumToN) - 0 => 21 - N : WS => 0 : N *Int (N +Int 1) /Int 2 : WS - G => G -Int (52 *Int N +Int 27) - requires N >=Int 0 - andBool N <=Int 340282366920938463463374607431768211455 - andBool #sizeWordStack(WS) =Int 52 *Int N +Int 27 - - claim #execute ... - NORMAL - ISTANBUL - .List - 0 - .Bytes - _ - sumToN - #computeValidJumpDests(sumToN) - 3 => 21 - G => G -Int (52 *Int I +Int 21) - I : S : WS - => 0 : S +Int I *Int (I +Int 1) /Int 2 : WS - requires I >=Int 0 - andBool S >=Int 0 - andBool S +Int I *Int (I +Int 1) /Int 2 =Int 52 *Int I +Int 21 - -endmodule diff --git a/tests/specs/functional/evm-int-simplifications-spec.k b/tests/specs/functional/evm-int-simplifications-spec.k deleted file mode 100644 index ded88de4cf..0000000000 --- a/tests/specs/functional/evm-int-simplifications-spec.k +++ /dev/null @@ -1,24 +0,0 @@ -requires "edsl.md" -requires "lemmas/lemmas.k" - -module VERIFICATION - imports EDSL - imports LEMMAS - -endmodule - -module EVM-INT-SIMPLIFICATIONS-SPEC - imports VERIFICATION - - // up/Int - // ------ - - claim [upInt-01]: ( ((X up/Int Y) *Int Y) ( true ) - requires 0 ( false ) - requires 0 runLemma(S) => doneLemma(S) ...
- - syntax Step ::= Bool | Int | Gas - // -------------------------------- - -endmodule - -module INFINITE-GAS-SPEC - imports VERIFICATION - - // Gas simplifications - // ------------------- - - claim [gas.arith.0]: (#if B #then (VGas -Int Csstore(ISTANBUL, V1, V2, V3)) +Int -435 #else (VGas -Int Csstore(ISTANBUL, V1, V2, V3)) +Int -4342 #fi) - => ((VGas -Int Csstore(ISTANBUL, V1, V2, V3)) +Int #if B #then -435 #else -4342 #fi) - - claim [gas.arith.1]: ((VGas +Int -3844) -Int ((VGas -Int ((VGas +Int -4544) /Int 64)) +Int -3844)) => ((VGas +Int -4544) /Int 64) - - claim [gas.arith.2]: ((VGas -Int #allBut64th(VGas +Int -2732)) +Int #allBut64th(VGas +Int -2732)) => (VGas) - - claim [gas.arith.3]: (((VGas -Int #allBut64th(VGas +Int -9487)) +Int -9487) +Int #allBut64th(VGas +Int -9487)) => (VGas +Int -9487) - - claim [gas.arith.4]: (((VGas -Int (#allBut64th(VGas +Int -2655) +Int 700)) +Int #allBut64th(VGas +Int -2655)) +Int -7244) => (VGas +Int -7944) - - claim [gas.arith.5]: (X +Int (0 -Int ABI_wad)) => (X -Int ABI_wad) - - claim [gas.arith.6]: (#memoryUsageUpdate(#memoryUsageUpdate(MEMORYUSED_CELL, 0, 32), 32, 32)) => (#memoryUsageUpdate(MEMORYUSED_CELL, 32, 32)) - requires #rangeUInt(256, MEMORYUSED_CELL) - - // Infinite Gas simplifications - // ---------------------------- - - claim [gas.inf.1]: (#gas(8) -Gas 3) => (#gas(5)) - - claim [gas.inf.2]: (#gas(G) -Gas #gas(G')) => (#gas(G -Int G')) - - claim [gas.inf.3]: (#gas((((((VGas +Int -1148) -Int G1) +Int -866) -Int G2) +Int -4337))) => (#gas(((VGas -Int G1) -Int G2) +Int -6351)) - - claim [gas.inf.4]: (#gas((((VGas +Int -1259) -Int Csstore(ISTANBUL, 1, 1, Junk_0)) +Int -4339))) => (#gas((VGas -Int Csstore(ISTANBUL, 1, 1, Junk_0)) +Int -5598)) - - claim [gas.inf.5]: (#gas(G) +Gas (#allBut64th((VGas -Int Csstore(ISTANBUL, V1, V2, V3)) +Int -3232) +Int -3232)) => (#gas(G +Int (#allBut64th((VGas -Int Csstore(ISTANBUL, V1, V2, V3)) +Int -3232) +Int -3232))) - claim [gas.inf.6]: (#gas(G) +Gas ((#allBut64th(VGas -Int Csstore(ISTANBUL, V1, V2, V3)) -Int Csstore(ISTANBUL, V1', V2', V3')) +Int -3232)) => (#gas(G +Int ((#allBut64th(VGas -Int Csstore(ISTANBUL, V1, V2, V3)) -Int Csstore(ISTANBUL, V1', V2', V3')) +Int -3232))) - - claim [gas.inf.7]: (#gas(G) -Gas Cmem(SCHED, #memoryUsageUpdate(MU, W0, 32))) => (#gas(G -Int Cmem(SCHED, #memoryUsageUpdate(MU, W0, 32)))) - requires #rangeUInt(256, MU) andBool #rangeUInt(256, W0) - - claim [gas.inf.8]: (#gas(G) -Gas Gverylow < SCHED >) => (#gas(G -Int Gverylow < SCHED >)) - - claim [gas.inf.9]: (#gas(G) -Gas 3 *Int (DATA_LEN up/Int 32)) => (#gas(G -Int 3 *Int (DATA_LEN up/Int 32))) requires 0 <=Int DATA_LEN andBool DATA_LEN (#gas(-271 -Int Cmem(ISTANBUL, #memoryUsageUpdate(5, 160, DATA_LEN)) -Int (3 *Int (DATA_LEN up/Int 32) +Int 3))) - requires 0 <=Int DATA_LEN andBool DATA_LEN ( #gas( -271 -Int 3 *Int ( DATA_LEN up/Int 32 ) -Int Cmem ( ISTANBUL , #memoryUsageUpdate ( 5 , ( DATA_LEN +Int 31 ) /Int 32 *Int 32 +Int 160 , 32 ) ) +Int -122)) - - claim [gas.inf.12]: ( #gas(VGAS +Int -6113) +Gas Cgascap(ISTANBUL, VGAS +Int -5413, VGAS +Int -5413, 700)) - => (#gas((VGAS +Int Cgascap(ISTANBUL, VGAS +Int -5413, VGAS +Int -5413, 700)) +Int -6113)) - - claim [gas.inf.13]: ( #gas(VGAS +Int -6113) +Gas Cgascap(ISTANBUL, #gas(VGAS +Int -5413), #gas(VGAS +Int -5413), 700)) - => (#gas((VGAS +Int Cgascap(ISTANBUL, VGAS +Int -5413, VGAS +Int -5413, 700)) +Int -6113)) - - claim [gas.inf.14]: ( Cgascap(ISTANBUL, #gas(VGas +Int -2924), #gas(VGas +Int -2924), Cextra(ISTANBUL, ISEMPTY, VALUE, ISWARM)) ) - => ( #gas(Cgascap(ISTANBUL, (VGas +Int -2924), (VGas +Int -2924), Cextra(ISTANBUL, ISEMPTY, VALUE, ISWARM))) ) - - // Infinite Gas comparisons - // ------------------------ - - claim [gas.comp.1]: (#gas(_) (false) - claim [gas.comp.2]: (#gas(_) <=Gas 11 ) => (false) - claim [gas.comp.3]: (11 (true) - claim [gas.comp.4]: (11 <=Gas #gas(_)) => (true) - - claim [gas.comp.5]: (#gas(_) (false) - - claim [gas.comp.6]: (#gas(_) (false) requires I1 <=Int pow256 andBool I2 <=Int pow256 andBool I3 =/=Int 0 andBool I3 <=Int pow256 andBool I4 <=Int pow256 - - claim [gas.comp.7]: (4822 (true) - - claim [gas.comp.8]: (3 (true) - claim [gas.comp.9]: (2 (true ) - - claim [gas.comp.10]: (#gas(_G) -Gas Csstore(_, _, _, _) (false) - claim [gas.comp.11]: (minGas(#gas(_G), #gas(_G'')) +Gas -2522 (false) - - claim [gas.comp.12]: (#gas(_G) (false) - claim [gas.comp.13]: (#gas(_G' +Int 700) <=Gas #gas(_G)) => (true) - - claim [gas.comp.14]: (#if _:Int ==Int 0 #then #gas(VGas -Int Csstore(_, _, _,_)) #else #gas(VGas +Int -344) #fi (false) - claim [gas.comp.15]: (8 <=Gas #if _:Int ==Int 0 #then #gas(VGas -Int Csstore(_, _, _,_)) #else #gas(VGas +Int -344) #fi) => (true) - - claim [gas.comp.16]: (#if _:Int ==Int 0 #then #gas(VGas -Int Csstore(_, _, _,_)) #else #gas(VGas +Int -344) #fi (false) - claim [gas.comp.17]: (minGas(#if _ #then #gas(_) #else #gas(_) #fi, #gas(_)) <=Gas #if _:Int ==Int 0 #then #gas(VGas -Int Csstore(_, _, _,_)) #else #gas(VGas +Int -344) #fi) => (true) - - claim [Csstore-1]: (9223372036854696114 -Int Csstore(LONDON, _, _, _) (false) - claim [Csstore-2]: (8 <=Int 9223372036854763220 -Int Csstore(LONDON, _, _, _)) => (true) - - claim [gas.comp.18]: (#allBut64th(#gas(_G)) (false) - - claim [gas.comp.19]: (Gverylow < _ > <=Gas #gas(_)) => (true) - - claim [gas.comp.20]: runLemma(Gexp < SCHED > +Int Gexpbyte < SCHED > *Int ( log2Int ( W1 ) /Int 8 +Int 1 ) <=Gas #gas(_)) => doneLemma(true) ... requires 0 runLemma(#gas(_) +Int Gexpbyte < SCHED > *Int ( log2Int ( W1) /Int 8 +Int 1 )) => doneLemma(false) ...
requires 0 (false) requires 0 <=Int DATA_LEN andBool DATA_LEN (false) requires 0 <=Int DATA_LEN andBool DATA_LEN (false) requires 0 <=Int DATA_LEN andBool DATA_LEN (true) requires 0 <=Int DATA_LEN andBool DATA_LEN (true) requires 0 <=Int DATA_LEN andBool DATA_LEN (false) requires CONTRACT_ID =/=Int 1 andBool #rangeAddress(CONTRACT_ID) - claim [gas.comp.28]: (Csload(_ , _) <=Gas #gas ( _) ) => (true) requires CONTRACT_ID =/=Int 1 andBool #rangeAddress(CONTRACT_ID) - - claim [gas.comp.29]: (Cgascap(ISTANBUL, #gas(_), #gas(_), 700) (false) - claim [gas.comp.30]: (0 <=Gas Cgascap(ISTANBUL, #gas(VGAS +Int -5413), #gas(VGAS +Int -5413), 700)) => (true) - -endmodule diff --git a/tests/specs/functional/int-simplifications-spec.k b/tests/specs/functional/int-simplifications-spec.k deleted file mode 100644 index 2726b09f1f..0000000000 --- a/tests/specs/functional/int-simplifications-spec.k +++ /dev/null @@ -1,39 +0,0 @@ -requires "edsl.md" -requires "lemmas/lemmas.k" - -module VERIFICATION - imports EDSL - imports LEMMAS - - syntax StepSort ::= Map | Bytes | Int | Bool - // -------------------------------------------- - - syntax KItem ::= runLemma ( StepSort ) - | doneLemma( StepSort ) - // -------------------------------------- - rule runLemma( T ) => doneLemma( T ) - -endmodule - -module INT-SIMPLIFICATIONS-SPEC - imports VERIFICATION - - // minInt/maxInt - - claim [minInt-maxInt-01]: - runLemma ( minInt(A, _B) doneLemma ( true ) ... - requires A runLemma ( minInt(E +Int A, E +Int _B) doneLemma ( true ) ...
- requires A runLemma ( minInt(_A, B) <=Int maxInt(_C, D) ) => doneLemma ( true ) ...
- requires B <=Int D - - claim [minInt-maxInt-04]: - runLemma ( minInt(_A +Int E, B +Int E) <=Int maxInt(_C +Int F, D +Int F) ) => doneLemma ( true ) ... - requires B <=Int D andBool E <=Int F - -endmodule diff --git a/tests/specs/functional/lemmas-no-smt-spec.k b/tests/specs/functional/lemmas-no-smt-spec.k deleted file mode 100644 index 8d97c3d830..0000000000 --- a/tests/specs/functional/lemmas-no-smt-spec.k +++ /dev/null @@ -1,44 +0,0 @@ -requires "lemmas/lemmas.k" - -module VERIFICATION - imports LEMMAS - - syntax StepSort ::= Int | Bool - // ------------------------------ - - syntax KItem ::= runLemma ( StepSort ) - | doneLemma( StepSort ) - // -------------------------------------- - rule runLemma( T ) => doneLemma( T ) ... - -endmodule - -module LEMMAS-NO-SMT-SPEC - imports VERIFICATION - - // Arithmetic simplification - // ------------------------- - - claim runLemma ( 5 +Int X ) => doneLemma ( X +Int 5 ) ... - claim runLemma ( X -Int 5 ) => doneLemma ( X +Int (0 -Int 5) ) ... - claim runLemma ( (X +Int 3) +Int 5 ) => doneLemma ( X +Int 8 ) ... - claim runLemma ( 3 +Int (X +Int 5) ) => doneLemma ( X +Int 8 ) ... - claim runLemma ( 5 -Int (X +Int 3) ) => doneLemma ( 2 -Int X ) ... - claim runLemma ( 5 +Int (3 +Int X) ) => doneLemma ( 8 +Int X ) ... - claim runLemma ( 5 +Int (3 -Int X) ) => doneLemma ( 8 -Int X ) ... - claim runLemma ( (5 -Int X) +Int 3 ) => doneLemma ( 8 -Int X ) ... - claim runLemma ( 5 -Int (3 +Int X) ) => doneLemma ( 2 -Int X ) ... - claim runLemma ( 5 -Int (3 -Int X) ) => doneLemma ( 2 +Int X ) ... - claim runLemma ( (X -Int 5) -Int 3 ) => doneLemma ( X -Int 8 ) ... - claim runLemma ( 5 &Int (3 &Int X) ) => doneLemma ( 1 &Int X ) ... - - // Boolean simplification - // ---------------------- - - claim runLemma ( (B ==Bool false) ==Bool false ) => doneLemma ( B ) ... - - // Awaiting Haskell backend updates - // claim runLemma ( bool2Word( B:Bool ) ==Int 1 ) => doneLemma ( B ==K true ) ... - // claim runLemma ( 1 ==Int bool2Word( B:Bool ) ) => doneLemma ( B ==K true ) ... - -endmodule diff --git a/tests/specs/functional/lemmas-spec.k b/tests/specs/functional/lemmas-spec.k deleted file mode 100644 index 117d8c6e8b..0000000000 --- a/tests/specs/functional/lemmas-spec.k +++ /dev/null @@ -1,423 +0,0 @@ -requires "edsl.md" -requires "lemmas/lemmas.k" - -module VERIFICATION - imports EDSL - imports LEMMAS - - syntax StepSort ::= Map | Bytes | Int | Bool - // -------------------------------------------- - - syntax KItem ::= runLemma ( StepSort ) - | doneLemma( StepSort ) - // -------------------------------------- - rule runLemma( T ) => doneLemma( T ) - -endmodule - -module LEMMAS-SPEC - imports VERIFICATION - - // bool2Word - // --------- - - claim runLemma ( bool2Word((UINT8 ==K 0) ==K false) ) => doneLemma ( UINT8 ) ... requires #rangeBool(UINT8) - - // sizeBytes - // ------------- - - claim runLemma(lengthBytes(#padToWidth(32, #asByteStack(#hashedLocation("Solidity", 2, OWNER .IntList))))) => doneLemma(32) ... requires #rangeUInt(256, OWNER) - - claim runLemma(lengthBytes(#buf(X, 0) +Bytes #padRightToWidth(Y:Int, B:Bytes))) => doneLemma( X +Int Y ) ... - requires lengthBytes(B) runLemma(#isPrecompiledAccount(#newAddr(TESTER_ACCT, 1), ISTANBUL)) => doneLemma(false) ... requires #rangeAddress(TESTER_ACCT) - - // Arithmetic - // ---------- - - claim runLemma(#rangeUInt(256, #lookup(M, KX) -Int #lookup(M, KY))) => doneLemma(true) ... - requires #rangeUInt(256, X) andBool X ==Int #lookup(M, KX) - andBool #rangeUInt(256, Y) andBool Y ==Int #lookup(M, KY) - andBool #rangeUInt(256, Z) andBool Z ==Int #lookup(M, _KZ) - andBool #rangeUInt(256, (X -Int Y) -Int Z) - - claim [address-reprojection]: runLemma(((maxUInt160 &Int ((368263281805664599098893944405654396525700029268 |Int (notMaxUInt160 &Int X:Int)) modInt pow256)) modInt pow160)) - => doneLemma(368263281805664599098893944405654396525700029268) ... - requires #rangeUInt(256, X) - - claim [address-reprojection-1]: runLemma(0 <=Int (368263281805664599098893944405654396525700029268 |Int (notMaxUInt160 &Int X:Int))) - => doneLemma(true) ... - requires #rangeUInt(256, X) - - claim [address-reprojection-2]: runLemma(0 <=Int (notMaxUInt160 &Int X:Int)) - => doneLemma(true) ... - requires #rangeUInt(256, X) - - claim [address-reprojection-4]: runLemma((368263281805664599098893944405654396525700029268 |Int (notMaxUInt160 &Int X:Int)) doneLemma(true) ... - requires #rangeUInt(256, X) - - claim [address-reprojection-5]: runLemma((notMaxUInt160 &Int X:Int) doneLemma(true) ... - requires #rangeUInt(256, X) - - claim [address-reprojection-6]: runLemma(maxUInt160 &Int (368263281805664599098893944405654396525700029268 |Int (notMaxUInt160 &Int X:Int))) - => doneLemma(368263281805664599098893944405654396525700029268) ... - requires #rangeUInt(256, X) - - claim [address-insertion-1]: runLemma(368263281805664599098893944405654396525700029268 |Int (notMaxUInt160 &Int #lookup(ACCT_STORAGE:Map, 8))) - => doneLemma(368263281805664599098893944405654396525700029268) ... - requires #lookup(ACCT_STORAGE, 8) runLemma ( M [ L := .Bytes ] [ N := WS:Bytes ] ) => doneLemma ( M [ N := WS ] ) ... requires L <=Int N - // claim runLemma ( M [ L := WS:Bytes ] [ N := .Bytes ] ) => doneLemma ( M [ L := WS ] ) ... requires N <=Int L - // claim runLemma ( M [ 32 := (0 : 1 : 2 : .Bytes) ] [ 32 := (3 : 4 : 5 : .Bytes) ] ) => doneLemma ( M [ 32 := (3 : 4 : 5 : .Bytes) ] ) ... - - claim runLemma ( M:Map [ I1 <- 1 ] [ I2 <- 2 ] ) => doneLemma ( M [ I1 <- 1 ] [ I2 <- 2 ] ) ... requires I1 runLemma ( M:Map [ I1 <- 1 ] [ I2 <- 2 ] ) => doneLemma ( M [ I2 <- 2 ] [ I1 <- 1 ] ) ... requires I1 >Int I2 - claim runLemma ( M:Map [ I1 <- 1 ] [ I2 <- 2 ] ) => doneLemma ( M [ I1 <- 2 ] ) ... requires I1 ==Int I2 - claim runLemma ( M:Map [ I1 <- 1 ] [ I2 <- 2 ] ) => doneLemma ( M [ I2 <- 2 ] ) ... requires I1 ==Int I2 - - claim runLemma( M:Bytes [ 32 := BA1 ] [ 32 := BA2 ] ) => doneLemma(M [ 32 := BA2 ] ) ... requires lengthBytes(BA1) <=Int lengthBytes(BA2) - claim runLemma( M:Bytes [ 32 := BA1 ] [ 32 := #padToWidth(32, #asByteStack(#hashedLocation("Solidity", 2, OWNER))) ] ) => doneLemma(M [ 32 := #padToWidth(32, #asByteStack(#hashedLocation("Solidity", 2, OWNER))) ] ) ... requires lengthBytes(BA1) ==Int 32 andBool #rangeUInt(256, OWNER) - - // Memory write past the end of the buffer - claim [write-past-end]: runLemma ( #buf(160, A) [ 160 := #buf(32, B) ] [ 192 := #buf(32, C) ] [ 224 := #buf(32, D) ] [ 256 := #buf(32, E) ] ) - => doneLemma ( #buf(160, A) +Bytes #buf(32, B) +Bytes #buf(32, C) +Bytes #buf(32, D) +Bytes #buf(32, E) ) ... - - // #lookup simplifications - // ----------------------- - - claim runLemma ( #lookupMemory(( KEY |-> 33) (_KEY' |-> 728) (_KEY'' |-> (pow256 +Int 5)) (_KEY''' |-> "hello"), KEY) ) => doneLemma ( 33 ) ... - claim runLemma ( #lookupMemory((_KEY |-> 33) ( KEY' |-> 728) (_KEY'' |-> (pow256 +Int 5)) (_KEY''' |-> "hello"), KEY') ) => doneLemma ( 216 ) ... - claim runLemma ( #lookupMemory((_KEY |-> 33) (_KEY' |-> 728) ( KEY'' |-> (pow256 +Int 5)) (_KEY''' |-> "hello"), KEY'') ) => doneLemma ( 5 ) ... - claim runLemma ( #lookupMemory((_KEY |-> 33) (_KEY' |-> 728) (_KEY'' |-> (pow256 +Int 5)) ( KEY''' |-> "hello"), KEY''') ) => doneLemma ( 0 ) ... - //TODO Haskell limitation? https://github.com/runtimeverification/haskell-backend/issues/1948 - //claim runLemma ( #lookupMemory((KEY |-> 33), KEY') ) => doneLemma ( 0 ) ... requires notBool KEY' in_keys(KEY |-> 33) - - claim runLemma ( #lookup(( KEY |-> 33) (_KEY' |-> 728) (_KEY'' |-> (pow256 +Int 5)) (_KEY''' |-> "hello"), KEY) ) => doneLemma ( 33 ) ... - claim runLemma ( #lookup((_KEY |-> 33) ( KEY' |-> 728) (_KEY'' |-> (pow256 +Int 5)) (_KEY''' |-> "hello"), KEY') ) => doneLemma ( 728 ) ... - claim runLemma ( #lookup((_KEY |-> 33) (_KEY' |-> 728) ( KEY'' |-> (pow256 +Int 5)) (_KEY''' |-> "hello"), KEY'') ) => doneLemma ( 5 ) ... - claim runLemma ( #lookup((_KEY |-> 33) (_KEY' |-> 728) (_KEY'' |-> (pow256 +Int 5)) ( KEY''' |-> "hello"), KEY''') ) => doneLemma ( 0 ) ... - //claim runLemma ( #lookup((KEY |-> 33), KEY') ) => doneLemma ( 0 ) ... requires notBool KEY' in_keys(KEY |-> 33) - - claim runLemma ( #lookup( _M:Map [ KEY <- 33 ] [ KEY' <- 728 ] [ KEY'' <- (pow256 +Int 5) ] [ KEY''' <- "hello" ] , KEY ) ) => doneLemma ( 33 ) ... requires KEY =/=Int KEY' andBool KEY =/=Int KEY'' andBool KEY =/=Int KEY''' andBool KEY' =/=Int KEY'' andBool KEY' =/=Int KEY''' andBool KEY'' =/=Int KEY''' - claim runLemma ( #lookup( _M:Map [ KEY <- 33 ] [ KEY' <- 728 ] [ KEY'' <- (pow256 +Int 5) ] [ KEY''' <- "hello" ] , KEY' ) ) => doneLemma ( 728 ) ... requires KEY =/=Int KEY' andBool KEY =/=Int KEY'' andBool KEY =/=Int KEY''' andBool KEY' =/=Int KEY'' andBool KEY' =/=Int KEY''' andBool KEY'' =/=Int KEY''' - claim runLemma ( #lookup( _M:Map [ KEY <- 33 ] [ KEY' <- 728 ] [ KEY'' <- (pow256 +Int 5) ] [ KEY''' <- "hello" ] , KEY'' ) ) => doneLemma ( 5 ) ... requires KEY =/=Int KEY' andBool KEY =/=Int KEY'' andBool KEY =/=Int KEY''' andBool KEY' =/=Int KEY'' andBool KEY' =/=Int KEY''' andBool KEY'' =/=Int KEY''' - claim runLemma ( #lookup( _M:Map [ KEY <- 33 ] [ KEY' <- 728 ] [ KEY'' <- (pow256 +Int 5) ] [ KEY''' <- "hello" ] , KEY''' ) ) => doneLemma ( 0 ) ... requires KEY =/=Int KEY' andBool KEY =/=Int KEY'' andBool KEY =/=Int KEY''' andBool KEY' =/=Int KEY'' andBool KEY' =/=Int KEY''' andBool KEY'' =/=Int KEY''' - - // #range selection operation - // -------------------------- - - // Non-positive range - claim [range-01]: runLemma ( #range(_M, _N, 0) ) => doneLemma ( .Bytes ) ... - claim [range-02]: runLemma ( #range(_M, _N, -3) ) => doneLemma ( .Bytes ) ... - - // Range outside of previous buffer write - claim [range-03]: runLemma ( #range ( M [ 32 := _ ], 20, 4) ) => doneLemma ( #range(M, 20, 4) ) ... - claim [range-04]: runLemma ( #range ( M [ 32 := BUF:Bytes ], 48, 4) ) => doneLemma ( #range(M, 48, 4) ) ... requires lengthBytes(BUF) <=Int 12 - claim [range-05]: runLemma ( #range ( M [ 32 := _ ], 31, 1) ) => doneLemma ( #range(M, 31, 1) ) ... - claim [range-06]: runLemma ( #range ( M [ 32 := #buf(1, _) ], 33, 1) ) => doneLemma ( #range(M, 33, 1) ) ... - - // Range starting before buffer write - claim [range-07]: runLemma ( #range(M [ 32 := BUF:Bytes ] , 30 , 8) ) => doneLemma ( #range(M, 30, 2) +Bytes (#range(BUF, 0, 6)) ) ... requires lengthBytes(BUF) >=Int 6 - claim [range-08]: runLemma ( #range(M [ 32 := (0 : 1 : 2 : .Bytes) ] , 30 , 8) ) => doneLemma ( #range(M, 30, 2) +Bytes (0 : 1 : 2 : .Bytes) +Bytes #range(M, 35, 3) ) ... - claim [range-09]: runLemma ( #range(M [ 32 := #buf(2, BUF) ] , 31 , 2) ) => doneLemma ( #range(M, 31, 1) +Bytes (#range(#buf(2, BUF), 0, 1) ) ) ... - claim [range-10]: runLemma ( #range(M [ 32 := #buf(1, BUF) ] , 31 , 2) ) => doneLemma ( #range(M, 31, 1) +Bytes #buf(1, BUF) ) ... - claim [range-11]: runLemma ( #range(M [ 32 := #buf(1, BUF) ] , 31 , 3) ) => doneLemma ( #range(M, 31, 1) +Bytes #buf(1, BUF) +Bytes #range(M, 33, 1) ) ... - - // Range starting at same point as buffer write - claim [range-12]: runLemma ( #range(_M [ 32 := BUF:Bytes ] , 32 , 7) ) => doneLemma( #range( BUF, 0, 7 ) ) ... requires lengthBytes(BUF) >=Int 7 - claim [range-13]: runLemma ( #range( M [ 32 := (0 : 1 : 2 : .Bytes) ] , 32 , 7) ) => doneLemma( (0 : 1 : 2 : .Bytes) +Bytes #range(M, 35, 4) ) ... - claim [range-14]: runLemma ( #range(_M [ 32 := #buf(2, BUF) ] , 32 , 1) ) => doneLemma( #range(#buf(2, BUF), 0, 1 ) ) ... - claim [range-15]: runLemma ( #range(_M [ 32 := #buf(1, BUF) ] , 32 , 1) ) => doneLemma( #buf(1, BUF) ) ... - claim [range-16]: runLemma ( #range (M [ 32 := #buf(1, BUF) ] , 32 , 2) ) => doneLemma( #buf(1, BUF) +Bytes #range(M, 33, 1) ) ... - - // Range starting in the middle of the buffer write - claim [range-17]: runLemma ( #range(_M [ 32 := (0 : 1 : 2 : 3 : 4 : .Bytes) ] , 35 , 2) ) => doneLemma( (3 : 4 : .Bytes) ) ... - claim [range-18]: runLemma ( #range( M [ 32 := (0 : 1 : 2 : 3 : 4 : .Bytes) ] , 35 , 8) ) => doneLemma( (3 : 4 : .Bytes) +Bytes #range(M, 37, 6) ) ... - claim [range-19]: runLemma ( #range(_M [ 32 := (0 : 1 : 2 : .Bytes) ] , 33 , 1) ) => doneLemma( (1 : .Bytes) ) ... - claim [range-20]: runLemma ( #range(_M [ 32 := (0 : 1 : 2 : .Bytes) ] , 33 , 2) ) => doneLemma( (1 : 2 : .Bytes) ) ... - claim [range-21]: runLemma ( #range( M [ 32 := (0 : 1 : 2 : .Bytes) ] , 33 , 3) ) => doneLemma( (1 : 2 : .Bytes) +Bytes #range(M, 35, 1) ) ... - - claim [range-22]: runLemma ( #range ( #range ( BA:Bytes , 4 , 64 ) , 32 , 32 ) ) => doneLemma ( #range ( BA , 36 , 32 ) ) ... - - claim [range-23]: - runLemma ( #range((#buf(DATA_LEN, DATA) +Bytes _BUF), 0, DATA_LEN) ) => - doneLemma ( #range( #buf(DATA_LEN, DATA) , 0, DATA_LEN) ) ... - requires #range(0 <= DATA < (2 ^Int (DATA_LEN *Int 8))) - andBool 0 <=Int DATA_LEN - - claim [range-24]: - runLemma( #range ( #range ( b"\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" , lengthBytes ( VV6__data_3c5818c8:Bytes ) +Int 1 , 31 -Int lengthBytes ( VV6__data_3c5818c8:Bytes ) ) , 32 , lengthBytes ( #range ( b"\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" , lengthBytes ( VV6__data_3c5818c8:Bytes ) +Int 1 , 31 -Int lengthBytes ( VV6__data_3c5818c8:Bytes ) ) ) +Int -32 ) ) => - doneLemma( .Bytes ) ... - - claim [range-25]: - runLemma( #range ( #range ( ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00E\xb5`x" +Bytes #buf ( 32 , VV5__txOrigin_3c5818c8:Int ) ) +Bytes #buf ( 32 , VV5__txOrigin_3c5818c8:Int ) , 100 , 64 ) , 0 , 32 ) ) => - doneLemma( #buf ( 32 , VV5__txOrigin_3c5818c8:Int ) ) ... - - claim [range-26]: - runLemma ( #range ( ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00E\xb5`x" +Bytes #buf ( 32 , VV5__txOrigin_3c5818c8 ) ) +Bytes #buf ( 32 , VV5__txOrigin_3c5818c8 ) , 100 , 64 ) ) => - doneLemma( #buf ( 32 , VV5__txOrigin_3c5818c8 ) +Bytes #buf ( 32 , VV5__txOrigin_3c5818c8 ) ) ... - - - claim [range-27]: - runLemma( #range(b"\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", lengthBytes ( VV6__data_3c5818c8:Bytes ) +Int 1, 31 -Int lengthBytes ( VV6__data_3c5818c8:Bytes ) ) ) => - doneLemma( .Bytes ) ... - - requires 119 runLemma( #range ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 151 -Int lengthBytes ( VV6__data_3c5818c8:Bytes ), lengthBytes ( VV6__data_3c5818c8:Bytes ) +Int lengthBytes ( #range ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 119 -Int lengthBytes ( VV6__data_3c5818c8:Bytes ), lengthBytes ( VV6__data_3c5818c8:Bytes ) +Int lengthBytes ( #range ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 87 -Int lengthBytes ( VV6__data_3c5818c8:Bytes ), lengthBytes ( VV6__data_3c5818c8:Bytes ) +Int -55 ) ) +Int -87 ) ) +Int -119 ) ) => - doneLemma( #range ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 151 -Int lengthBytes ( VV6__data_3c5818c8 ), lengthBytes ( VV6__data_3c5818c8 ) +Int -119 ) ) ... - requires 0 <=Int VV1__value_3c5818c8 - andBool VV1__value_3c5818c8:Int runLemma( #range ( #range ( ( ( b"\xc8\x8a^m\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01H" +Bytes #buf ( 32 , VV0_value_3c5818c8 ) ) ) , 4 , 64 ) , 32 , 32 ) ) => - doneLemma( #buf ( 32 , VV0_value_3c5818c8 ) ) ... - - claim [range-30]: - runLemma( - #range ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00E\xb5`x\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - [ 132 := #buf ( 32 , _VV5__txOrigin_3c5818c8:Int ) ] - [ 128 := b"I\x1c\xc7\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ] - [ 128 := b"" ] - [ 132 := b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ] - [ 128 := b"\xe9\xe0\\B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ] - [ 164 := b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ] - [ 160 := b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ] - [ 132 := b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" ] - [ 164 := #buf ( 32 , _VV1__value_3c5818c8:Int ) ] - [ 196 := #buf ( 32 , _VV2__gasLimit_3c5818c8:Int ) ] - [ 228 := b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ] - [ 260 := b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0" ] - [ 292 := #buf ( 32 , lengthBytes ( VV6__data_3c5818c8:Bytes ) ) ] - [ 324 := VV6__data_3c5818c8:Bytes ] , 324 , minInt ( ( notMaxUInt5 &Int lengthBytes ( VV6__data_3c5818c8:Bytes ) +Int 31 ) +Int 196 , lengthBytes ( VV6__data_3c5818c8:Bytes ) +Int 196 ) +Int -196 ) - ) - => doneLemma( VV6__data_3c5818c8 ) ... - - requires lengthBytes(VV6__data_3c5818c8:Bytes) runLemma( #range(X, S1, 32) +Bytes #range( X [ S := Y ], S:Int, Z:Int )) - => doneLemma( #range(X, S2 +Int 5, 32) +Bytes Y ) ... - - requires lengthBytes(Y) +Int 20 ==Int Z +Int 20 - andBool S1 +Int 1 ==Int S2 +Int 6 - andBool 0 runLemma( - #range ( #range ( #range ( ( ( ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\xe0\\B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +Bytes _ ) +Bytes _ ) +Bytes _ ) +Bytes _ , 128 , ( notMaxUInt5 &Int lengthBytes ( X ) +Int 31 ) +Int 196 ), 0, 32 ), 0, 4 ) - ) - => doneLemma( b"\xe9\xe0\\B" ) ... - - requires 0 <=Int VV1__value_3c5818c8 - andBool VV1__value_3c5818c8:Int runLemma( - #asWord ( #range ( #range ( ( ( ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\xe0\\B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +Bytes #buf ( 32 , VV1__value_3c5818c8:Int ) ) +Bytes #buf ( 32 , VV2__gasLimit_3c5818c8:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0" ) +Bytes #buf ( 32 , lengthBytes ( VV6__data_3c5818c8:Bytes ) ) ) +Bytes VV6__data_3c5818c8:Bytes +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" , 128 , ( notMaxUInt5 &Int lengthBytes ( VV6__data_3c5818c8:Bytes ) +Int 31 ) +Int 196 ), 4, 32 ) ) - ==Int - maxUInt160 &Int #asWord ( #range ( #range ( ( ( ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\xe0\\B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +Bytes #buf ( 32 , VV1__value_3c5818c8:Int ) ) +Bytes #buf ( 32 , VV2__gasLimit_3c5818c8:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0" ) +Bytes #buf ( 32 , lengthBytes ( VV6__data_3c5818c8:Bytes ) ) ) +Bytes VV6__data_3c5818c8:Bytes +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" , 128 , ( notMaxUInt5 &Int lengthBytes ( VV6__data_3c5818c8:Bytes ) +Int 31 ) +Int 196 ), 4, 32 ) ) - ) - => doneLemma( true ) ... - - requires 0 <=Int VV1__value_3c5818c8 - andBool VV1__value_3c5818c8:Int runLemma( - #range ( ( ( ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\xe0\\B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +Bytes #buf ( 32 , VV1__value_3c5818c8:Int ) ) +Bytes #buf ( 32 , VV2__gasLimit_3c5818c8:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0" ) +Bytes #buf ( 32 , lengthBytes ( VV6__data_3c5818c8:Bytes ) ) ) +Bytes VV6__data_3c5818c8:Bytes +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" , 128 , ( notMaxUInt5 &Int lengthBytes ( VV6__data_3c5818c8:Bytes ) +Int 31 ) +Int 196 ) - ) - => doneLemma( - b"\xe9\xe0\\B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +Bytes #buf ( 32 , VV1__value_3c5818c8 ) +Bytes ( #buf ( 32 , VV2__gasLimit_3c5818c8 ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0" ) +Bytes #buf ( 32 , lengthBytes ( VV6__data_3c5818c8 ) ) +Bytes VV6__data_3c5818c8 +Bytes #range ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" , 0 , ( notMaxUInt5 &Int lengthBytes ( VV6__data_3c5818c8 ) +Int 31 ) -Int lengthBytes ( VV6__data_3c5818c8 ) ) - ) ... - - requires 0 <=Int VV1__value_3c5818c8 - andBool VV1__value_3c5818c8:Int runLemma( - #range ( #range ( ( ( ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +Bytes #buf ( 32 , _ ) ) +Bytes ( #range ( #buf ( 32 , _ ), 0, 8 ) ) +Bytes b"\x01" ) +Bytes ( #range ( #range ( ( ( ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\xe0\\B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +Bytes #buf ( 32 , _ ) ) +Bytes #buf ( 32 , _ ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0" ) +Bytes #buf ( 32 , lengthBytes ( X ) ) ) +Bytes X +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" , 128 , ( notMaxUInt5 &Int lengthBytes ( X ) +Int 31 ) +Int 196 ), 196, lengthBytes ( X ) ) ) +Bytes ( #range ( b"\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", lengthBytes ( X ) +Int 1, 31 -Int lengthBytes ( X ) ) ) ), 0, lengthBytes ( X ) +Int 233 ) , 64 , 32 ) - ) - => doneLemma( - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" - ) ... - - requires lengthBytes(X:Bytes) runLemma ( #range(B:Bytes, 5 +Int S2:Int, W:Int) ) => doneLemma ( #range(#range(B, 5, lengthBytes(B) -Int 5), S2, W) ) ... - requires 0 <=Int S2 andBool (5 +Int S2 <=Int lengthBytes(B)) - andBool B ==K #buf(512, 0) - - claim [range-37]: - runLemma( _B1:Bytes [ 1 := _B2:Bytes ] [ -1 := _B3:Bytes ]) => doneLemma(.Bytes) ... - - claim [range-38]: - runLemma( #range (#buf(8, X:Int), -3, _:Int) ) => doneLemma( .Bytes ) ... - requires 0 <=Int X andBool X runLemma ( #asWord ( ( #range( #buf ( 32 , X ), 0, 28 ) ):Bytes ) ) => doneLemma ( 0 ) ... requires #rangeUInt(32, X) - - claim runLemma ( #buf( 32 , bool2Word ( B:Bool ) ) ==K #buf( 32 , 1 ) ) => doneLemma( B ==K true ) ... - claim runLemma ( #buf( 32 , I:Int ) ==K #buf( 32 , 1 ) ) => doneLemma( I ==K 1 ) ... requires #rangeUInt(256, I) - claim runLemma ( #buf( 32 , 1 ) ==K #buf( 32 , I:Int ) ) => doneLemma( I ==K 1 ) ... requires #rangeUInt(256, I) - - claim runLemma ( #bufStrict( #ceil32(LEN) -Int LEN, 0 ) ) => doneLemma( #buf( #ceil32(LEN) -Int LEN, 0 ) ) ... requires 0 <=Int LEN - - claim runLemma( #padToWidth(32, #asByteStack(#hashedLocation("Solidity", 2, OWNER .IntList))) ) => doneLemma(#buf(32, #hashedLocation("Solidity", 2, OWNER .IntList))) ... requires #rangeUInt(256, OWNER) - claim runLemma( #padToWidth(32, #asByteStack(#hashedLocation("Solidity", 2, OWNER SPENDER .IntList))) ) => doneLemma(#buf(32, #hashedLocation("Solidity", 2, OWNER SPENDER .IntList))) ... requires #rangeUInt(256, OWNER) andBool #rangeUInt(256, SPENDER) - - claim runLemma( #buf(32, X +Int Y) +Bytes #buf(lengthBytes(B), 0) +Bytes #buf(32 +Int Y -Int Y, #asWord(B))) => doneLemma ( #buf(32, Z -Int Y) +Bytes #buf(32, ((3 *Int Y) -Int (2 *Int Y)) -Int Y) +Bytes B ) ... - requires lengthBytes(B) <=Int 4 - andBool 0 <=Int X andBool 0 <=Int Y andBool Y <=Int Z - andBool X runLemma ( chop( #lookup(M, KEY) ) ) => doneLemma( #lookup(M, KEY) ) ... - claim runLemma ( chop( bool2Word(B:Bool) ) ) => doneLemma( bool2Word(B) ) ... - - claim [chop-range-inferred]: runLemma(X doneLemma(X - requires #rangeUInt(256, X) andBool #rangeUInt(256, Y) andBool Y <=Int maxUInt256 /Int X - - // #padToWidth simplification - // -------------------------- - - claim runLemma ( #padToWidth( 32 , #asByteStack( bool2Word ( B:Bool ) ) ) ) => doneLemma( #buf( 32 , bool2Word ( B ) ) ) ... - claim runLemma ( #padToWidth( 32 , #asByteStack( maxUInt160 &Int #newAddr(ACCT, 1) ) ) ) - => doneLemma( #buf(32, #newAddr(ACCT, 1)) ) ... - - //Required for ERC20 + solc5 + constructor call - claim runLemma ( 160 ==Int #asWord ( #buf( 4, 160 ) +Bytes ( #range( #buf( 32 , _BUF ), 0, 28 ) ) ) >>Int 224 ) - => doneLemma( true ) ... - - // buffer range sinplification - // --------------------------- - claim runLemma ( #range((#buf(DATA_LEN, DATA) +Bytes _BUF), 0, DATA_LEN) ) - => doneLemma ( #range( #buf(DATA_LEN, DATA) , 0, DATA_LEN) ) ... - requires #range(0 <= DATA < (2 ^Int (DATA_LEN *Int 8))) - andBool 0 <=Int DATA_LEN - - // concatenation simplification - // ---------------------------- - - claim [bytes-reassociation]: runLemma ( ((((A +Bytes B) +Bytes C) +Bytes D) +Bytes E) +Bytes F ) - => doneLemma ( A +Bytes (B +Bytes (C +Bytes (D +Bytes (E +Bytes F)))) ) ... - - // bitwise-and identity - // -------------------- - - claim runLemma ( N &Int maxUInt256 ) => doneLemma ( N ) ... requires #rangeUInt(256, N) - claim runLemma ( maxUInt256 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(256, N) - claim runLemma ( N &Int maxUInt248 ) => doneLemma ( N ) ... requires #rangeUInt(248, N) - claim runLemma ( maxUInt248 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(248, N) - claim runLemma ( N &Int maxUInt240 ) => doneLemma ( N ) ... requires #rangeUInt(240, N) - claim runLemma ( maxUInt240 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(240, N) - claim runLemma ( N &Int maxUInt232 ) => doneLemma ( N ) ... requires #rangeUInt(232, N) - claim runLemma ( maxUInt232 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(232, N) - claim runLemma ( N &Int maxUInt224 ) => doneLemma ( N ) ... requires #rangeUInt(224, N) - claim runLemma ( maxUInt224 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(224, N) - claim runLemma ( N &Int maxUInt216 ) => doneLemma ( N ) ... requires #rangeUInt(216, N) - claim runLemma ( maxUInt216 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(216, N) - claim runLemma ( N &Int maxUInt208 ) => doneLemma ( N ) ... requires #rangeUInt(208, N) - claim runLemma ( maxUInt208 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(208, N) - claim runLemma ( N &Int maxUInt200 ) => doneLemma ( N ) ... requires #rangeUInt(200, N) - claim runLemma ( maxUInt200 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(200, N) - claim runLemma ( N &Int maxUInt192 ) => doneLemma ( N ) ... requires #rangeUInt(192, N) - claim runLemma ( maxUInt192 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(192, N) - claim runLemma ( N &Int maxUInt184 ) => doneLemma ( N ) ... requires #rangeUInt(184, N) - claim runLemma ( maxUInt184 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(184, N) - claim runLemma ( N &Int maxUInt176 ) => doneLemma ( N ) ... requires #rangeUInt(176, N) - claim runLemma ( maxUInt176 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(176, N) - claim runLemma ( N &Int maxUInt168 ) => doneLemma ( N ) ... requires #rangeUInt(168, N) - claim runLemma ( maxUInt168 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(168, N) - claim runLemma ( N &Int maxUInt160 ) => doneLemma ( N ) ... requires #rangeUInt(160, N) - claim runLemma ( maxUInt160 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(160, N) - claim runLemma ( N &Int maxUInt152 ) => doneLemma ( N ) ... requires #rangeUInt(152, N) - claim runLemma ( maxUInt152 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(152, N) - claim runLemma ( N &Int maxUInt144 ) => doneLemma ( N ) ... requires #rangeUInt(144, N) - claim runLemma ( maxUInt144 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(144, N) - claim runLemma ( N &Int maxUInt136 ) => doneLemma ( N ) ... requires #rangeUInt(136, N) - claim runLemma ( maxUInt136 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(136, N) - claim runLemma ( N &Int maxUInt128 ) => doneLemma ( N ) ... requires #rangeUInt(128, N) - claim runLemma ( maxUInt128 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(128, N) - claim runLemma ( N &Int maxUInt120 ) => doneLemma ( N ) ... requires #rangeUInt(120, N) - claim runLemma ( maxUInt120 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(120, N) - claim runLemma ( N &Int maxUInt112 ) => doneLemma ( N ) ... requires #rangeUInt(112, N) - claim runLemma ( maxUInt112 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(112, N) - claim runLemma ( N &Int maxUInt104 ) => doneLemma ( N ) ... requires #rangeUInt(104, N) - claim runLemma ( maxUInt104 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(104, N) - claim runLemma ( N &Int maxUInt96 ) => doneLemma ( N ) ... requires #rangeUInt(96, N) - claim runLemma ( maxUInt96 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(96, N) - claim runLemma ( N &Int maxUInt88 ) => doneLemma ( N ) ... requires #rangeUInt(88, N) - claim runLemma ( maxUInt88 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(88, N) - claim runLemma ( N &Int maxUInt80 ) => doneLemma ( N ) ... requires #rangeUInt(80, N) - claim runLemma ( maxUInt80 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(80, N) - claim runLemma ( N &Int maxUInt72 ) => doneLemma ( N ) ... requires #rangeUInt(72, N) - claim runLemma ( maxUInt72 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(72, N) - claim runLemma ( N &Int maxUInt64 ) => doneLemma ( N ) ... requires #rangeUInt(64, N) - claim runLemma ( maxUInt64 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(64, N) - claim runLemma ( N &Int maxUInt56 ) => doneLemma ( N ) ... requires #rangeUInt(56, N) - claim runLemma ( maxUInt56 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(56, N) - claim runLemma ( N &Int maxUInt48 ) => doneLemma ( N ) ... requires #rangeUInt(48, N) - claim runLemma ( maxUInt48 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(48, N) - claim runLemma ( N &Int maxUInt40 ) => doneLemma ( N ) ... requires #rangeUInt(40, N) - claim runLemma ( maxUInt40 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(40, N) - claim runLemma ( N &Int maxUInt32 ) => doneLemma ( N ) ... requires #rangeUInt(32, N) - claim runLemma ( maxUInt32 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(32, N) - claim runLemma ( N &Int maxUInt24 ) => doneLemma ( N ) ... requires #rangeUInt(24, N) - claim runLemma ( maxUInt24 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(24, N) - claim runLemma ( N &Int maxUInt16 ) => doneLemma ( N ) ... requires #rangeUInt(16, N) - claim runLemma ( maxUInt16 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(16, N) - claim runLemma ( N &Int maxUInt8 ) => doneLemma ( N ) ... requires #rangeUInt(8, N) - claim runLemma ( maxUInt8 &Int N ) => doneLemma ( N ) ... requires #rangeUInt(8, N) - - // ecrecover - // --------- - - claim [ecrec-length]: runLemma ( lengthBytes ( #ecrec ( _ , _ , _ , _ ) ) <=Int 32 ) - => doneLemma ( true ) ... - - claim [ecrec-split]: runLemma ( #range ( #buf(160, 0) +Bytes _BUF , lengthBytes ( #ecrec ( HASH , SIGV , SIGR , SIGS ) ) +Int 128 , 32 -Int lengthBytes ( #ecrec ( HASH , SIGV , SIGR , SIGS ) ) ) ) - => doneLemma ( #range ( #buf( 32, 0) , lengthBytes ( #ecrec ( HASH , SIGV , SIGR , SIGS ) ) , 32 -Int lengthBytes ( #ecrec ( HASH , SIGV , SIGR , SIGS ) ) ) ) ... - - claim [ecrec-range]: runLemma ( #rangeUInt ( 160 , #asWord ( #ecrec ( _ , _ , _ , _ ) ) ) ) - => doneLemma ( true ) ... - - claim [ecrec-mask]: runLemma ( #asWord ( #ecrec ( HASH , SIGV , SIGR , SIGS ) ) &Int maxUInt160 ) - => doneLemma ( #asWord ( #ecrec ( HASH , SIGV , SIGR , SIGS ) ) ) ... - - // Address computation - // ------------------- - - claim [addr-from-private-key]: runLemma ( #addrFromPrivateKey(#unparseDataBytes(b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01")) ) - => doneLemma ( 721457446580647751014191829380889690493307935711 ) ... - -endmodule diff --git a/tests/specs/functional/merkle-spec.k b/tests/specs/functional/merkle-spec.k deleted file mode 100644 index a6bb8eeee3..0000000000 --- a/tests/specs/functional/merkle-spec.k +++ /dev/null @@ -1,85 +0,0 @@ -requires "evm.md" - -module VERIFICATION - imports EVM - - syntax StepSort ::= MerkleTree | String | Int - syntax KItem ::= runMerkle ( StepSort ) - | doneMerkle( StepSort ) - // ------------------------------------------ - rule runMerkle( T ) => doneMerkle( T ) ... - - syntax MerkleTree ::= "#initTree" [macro] - // ----------------------------------------- - rule #initTree => MerkleUpdateMap( .MerkleTree, - .Map [ #parseByteStack( "de" ) <- "verb" ] - [ #parseByteStack( "def" ) <- "puppy" ] - [ #parseByteStack( "defe" ) <- "coin" ] - [ #parseByteStack( "becfe" ) <- "stallion" ] - ) -endmodule - -module MERKLE-SPEC - imports VERIFICATION - - //////////////////// - // Symbolic Tests // - //////////////////// - claim runMerkle ( MerkleUpdate( .MerkleTree, .Bytes, V ) ) - => doneMerkle( MerkleLeaf( .Bytes, V ) ) - requires V =/=String "" - - // Update on MerkleLeaf - claim runMerkle ( MerkleUpdate( MerkleLeaf( #parseByteStack("0x0607"), _ ), #parseByteStack("0x0607"), V ) ) - => doneMerkle( MerkleLeaf ( #parseByteStack("0x0607"), V ) ) - requires V =/=String "" - - claim runMerkle ( MerkleUpdate( MerkleLeaf( #parseByteStack("0x0607"), _ ), #parseByteStack("0x0608"), V ) ) - => doneMerkle( MerkleExtension( #parseByteStack("0x06"), ?_ ) ) - requires V =/=String "" - - claim runMerkle ( MerkleUpdate( MerkleLeaf( #parseByteStack("0x05"), _ ), #parseByteStack("0x06"), V ) ) - => doneMerkle( MerkleBranch( ?_, ?_ ) ) - requires V =/=String "" - - // Update on MerkleExtension - claim runMerkle ( MerkleUpdate( MerkleExtension( #parseByteStack("0x06"), .MerkleTree ), #parseByteStack("0x06"), V ) ) - => doneMerkle( MerkleExtension( #parseByteStack("0x06"), MerkleLeaf( .Bytes, V ) ) ) - requires V =/=String "" - - claim runMerkle ( MerkleUpdate( MerkleExtension( #parseByteStack("0x07"), _ ), #parseByteStack("0x06"), V ) ) - => doneMerkle( MerkleBranch( ?_, ?_ ) ) - requires V =/=String "" - - claim runMerkle ( MerkleUpdate( MerkleExtension( #parseByteStack("0x0708"), _ ), #parseByteStack("0x0709"), V ) ) - => doneMerkle( MerkleExtension( #parseByteStack("0x07"), MerkleBranch( ?_, ?_ ) ) ) - requires V =/=String "" - - // Update on MerkleBranch - claim runMerkle ( MerkleUpdate( MerkleBranch( M, _ ), .Bytes, V ) ) - => doneMerkle( MerkleBranch( M, V ) ) - requires V =/=String "" - - claim runMerkle ( #merkleExtensionBuilder ( #parseByteStack("0e") , #parseByteStack("") , "verb" , #parseByteStack("0f0e") , "coin" ) ) - => doneMerkle ( MerkleExtension ( #parseByteStack("0e") , MerkleBranch ( 15 |-> MerkleLeaf ( #parseByteStack("0e") , "coin" ) , "verb" ) ) ) - - //////////////////////// - // MerkleDelete Tests // - //////////////////////// - - claim runMerkle ( Keccak256( #rlpEncodeMerkleTree( MerkleUpdate( #initTree, "de", "" ) ) ) ) - => doneMerkle( "4ba393b447e1c78b2f647e10ae687de132f01f49d67e396bcdea4da2de05370f" ) - - claim runMerkle ( Keccak256( #rlpEncodeMerkleTree( MerkleUpdate( #initTree, "becfe", "" ) ) ) ) - => doneMerkle( "4ba393b447e1c78b2f647e10ae687de132f01f49d67e396bcdea4da2de05370f" ) - - claim runMerkle ( Keccak256( #rlpEncodeMerkleTree( MerkleUpdate( #initTree, "def", "" ) ) ) ) - => doneMerkle( "4ba393b447e1c78b2f647e10ae687de132f01f49d67e396bcdea4da2de05370f" ) - - claim runMerkle ( Keccak256( #rlpEncodeMerkleTree( MerkleUpdate( #initTree, "defe", "" ) ) ) ) - => doneMerkle( "4ba393b447e1c78b2f647e10ae687de132f01f49d67e396bcdea4da2de05370f" ) - - claim runMerkle ( Keccak256( #rlpEncodeMerkleTree( MerkleUpdate( MerkleUpdate( #initTree, "defe", "" ), "becfe", "" ) ) ) ) - => doneMerkle( "4ba393b447e1c78b2f647e10ae687de132f01f49d67e396bcdea4da2de05370f" ) - -endmodule diff --git a/tests/specs/functional/storageRoot-spec.k b/tests/specs/functional/storageRoot-spec.k deleted file mode 100644 index 5ff39291b8..0000000000 --- a/tests/specs/functional/storageRoot-spec.k +++ /dev/null @@ -1,76 +0,0 @@ -requires "evm.md" -requires "edsl.md" - -module VERIFICATION - imports EVM - imports EDSL - - syntax KItem ::= runLemma ( Step ) | doneLemma ( Step ) - // ------------------------------------------------------- - rule runLemma(S) => doneLemma(S) ... - - syntax Step ::= String | MerkleTree - // ----------------------------------- - -endmodule - -module STORAGEROOT-SPEC - imports VERIFICATION - - claim runLemma ( #storageRoot( .Map ) ) => doneLemma ( .MerkleTree ) - - claim runLemma ( #rlpEncodeString ( "" ) ) => doneLemma ( "\x80" ) - - claim runLemma ( #rlpEncodeString ( "\x82\x04\xd2" ) ) => doneLemma ( "\x83\x82\x04\xd2" ) - - // uint pos0; - // - // pos0 = 1234; - claim runLemma ( Keccak256( #rlpEncodeMerkleTree( #storageRoot( #hashedLocation( "Solidity", 0, .IntList ) |-> 1234 ) ) ) ) - => doneLemma ( "6ff6cfba457bc662332201b53a8bda503e307197962f2c51e5e2dcc3809e19be" ) - - - // mapping (uint => uint) pos0; - // - // pos0[0] = 100; - // pos0[1] = 200; - claim runLemma ( Keccak256( #rlpEncodeMerkleTree( #storageRoot( #hashedLocation( "Solidity", 0, 0 ) |-> 100 #hashedLocation( "Solidity", 0, 1 ) |-> 200 ) ) ) ) - => doneLemma ( "27093708a19995cf73ddd4b27049a7e33fb49e242bde6c1bffbb6596b67b8b3e" ) - - - // uint pos0; - // mapping (uint => uint) pos1; - // - // pos0 = 600; - // pos1[0] = 200; - // pos1[5] = 24; - claim runLemma ( Keccak256( #rlpEncodeMerkleTree( #storageRoot( #hashedLocation( "Solidity", 0, .IntList ) |-> 600 #hashedLocation( "Solidity", 1, 0 ) |-> 200 #hashedLocation( "Solidity", 1, 5 ) |-> 24 ) ) ) ) - => doneLemma ( "7df5d7b198240b49434b4e1dbff02fcb0649dd91650ae0fae191b2881cbb009e" ) - - - // mapping (uint => uint) pos0; - // mapping (uint => uint) pos1; - // - // pos0[0] = 123; - // pos0[1] = 456; - // pos1[6] = 56; - // pos1[9] = 333; - claim runLemma ( Keccak256( #rlpEncodeMerkleTree( #storageRoot( #hashedLocation( "Solidity", 0, 0 ) |-> 123 #hashedLocation( "Solidity", 0, 1 ) |-> 456 #hashedLocation( "Solidity", 1, 6 ) |-> 56 #hashedLocation( "Solidity", 1, 9 ) |-> 333 ) ) ) ) - => doneLemma ( "e3d130ca69a8d33ad2058d86ba26ec414f6e5639930041d6a266ee88b25ea835" ) - - - // uint pos0; - // mapping (uint => uint) pos1; - // uint pos2; - // mapping (uint => mapping (uint => uint)) pos3; - // - // pos0 = 1234; - // pos1[0] = 0; - // pos1[1] = 1; - // pos2 = 100; - // pos3[0][0] = 42; - // pos3[2][1] = 2019; - claim runLemma ( Keccak256( #rlpEncodeMerkleTree( #storageRoot( #hashedLocation( "Solidity", 0, .IntList ) |-> 1234 #hashedLocation( "Solidity", 1, 0 ) |-> 0 #hashedLocation( "Solidity", 1, 1 ) |-> 1 #hashedLocation( "Solidity", 2, .IntList ) |-> 100 #hashedLocation( "Solidity", 3, 0 0 ) |-> 42 #hashedLocation( "Solidity", 3, 2 1 ) |-> 2019 ) ) ) ) - => doneLemma ( "1a40e309e184fb6483112c37def9ed52e5ee36aa4b570a234a962b3a8f186610" ) - -endmodule diff --git a/tests/specs/mcd/bin_runtime.k b/tests/specs/mcd/bin_runtime.k deleted file mode 100644 index e884a83a18..0000000000 --- a/tests/specs/mcd/bin_runtime.k +++ /dev/null @@ -1,126 +0,0 @@ -requires "data.md" - -module DSS-BIN-RUNTIME - imports EVM-DATA - - syntax Bytes ::= "Vat_bin" [macro] - // ---------------------------------- - rule Vat_bin => #parseByteStack("0x608060405234801561001057600080fd5b5060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600a819055506134b58061006c6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637cdd3fde116100f9578063bb35783b11610097578063dc4d20fa11610071578063dc4d20fa1461096c578063f059212a146109b0578063f24e23eb14610a08578063f37ac61c14610a76576101c4565b8063bb35783b14610848578063bf353dbb146108b6578063d9638d361461090e576101c4565b80639c52a7f1116100d35780639c52a7f11461074a578063a3b22fc41461078e578063b65337df146107d2578063babe8a3f1461082a576101c4565b80637cdd3fde14610652578063870c616d146106aa578063957aa58c1461072c576101c4565b80634538c4eb11610166578063692450091161014057806369245009146104ac5780636c25b346146104b6578063760887031461050e5780637bab3f40146105b0576101c4565b80634538c4eb146103785780636111be2e146103f057806365fae35e14610468576101c4565b80632424be5c116101a25780632424be5c1461028b57806329ae8114146102f45780632d61a3551461032c5780633b6631951461034a576101c4565b80630dca59c1146101c95780631a0b287e146101e7578063214414d514610229575b600080fd5b6101d1610aa4565b6040518082815260200191505060405180910390f35b610227600480360360608110156101fd57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610aaa565b005b6102756004803603604081101561023f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d58565b6040518082815260200191505060405180910390f35b6102d7600480360360408110156102a157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d7d565b604051808381526020018281526020019250505060405180910390f35b61032a6004803603604081101561030a57600080fd5b810190808035906020019092919080359060200190929190505050610dae565b005b610334610fb5565b6040518082815260200191505060405180910390f35b6103766004803603602081101561036057600080fd5b8101908080359060200190929190505050610fbb565b005b6103da6004803603604081101561038e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061115a565b6040518082815260200191505060405180910390f35b6104666004803603608081101561040657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061117f565b005b6104aa6004803603602081101561047e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611392565b005b6104b461153a565b005b6104f8600480360360208110156104cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061162d565b6040518082815260200191505060405180910390f35b6105ae600480360360c081101561052457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611645565b005b610650600480360360c08110156105c657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611e31565b005b6106a86004803603606081101561066857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612130565b005b61072a600480360360a08110156106c057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506122cc565b005b610734612700565b6040518082815260200191505060405180910390f35b61078c6004803603602081101561076057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612706565b005b6107d0600480360360208110156107a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ae565b005b610828600480360360608110156107e857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612967565b005b610832612bac565b6040518082815260200191505060405180910390f35b6108b46004803603606081101561085e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612bb2565b005b6108f8600480360360208110156108cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d80565b6040518082815260200191505060405180910390f35b61093a6004803603602081101561092457600080fd5b8101908080359060200190929190505050612d98565b604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b6109ae6004803603602081101561098257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612dce565b005b6109f2600480360360208110156109c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e88565b6040518082815260200191505060405180910390f35b610a7460048036036060811015610a1e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ea0565b005b610aa260048036036020811015610a8c57600080fd5b81019080803590602001909291905050506130ca565b005b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414610bd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f73706f7400000000000000000000000000000000000000000000000000000000821415610c1e57806002600085815260200190815260200160002060020181905550610d1e565b7f6c696e6500000000000000000000000000000000000000000000000000000000821415610c6657806002600085815260200190815260200160002060030181905550610d1d565b7f6475737400000000000000000000000000000000000000000000000000000000821415610cae57806002600085815260200190815260200160002060040181905550610d1c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5661742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5b5961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b6004602052816000526040600020602052806000526040600020600091509150505481565b6003602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414610eda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f4c696e6500000000000000000000000000000000000000000000000000000000821415610f0e5780600981905550610f7c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5661742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a4505050565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461106f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006002600083815260200190815260200160002060010154146110fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5661742f696c6b2d616c72656164792d696e697400000000000000000000000081525060200191505060405180910390fd5b6b033b2e3c9fd0803ce800000060026000838152602001908152602001600020600101819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b6001602052816000526040600020602052806000526040600020600091509150505481565b6111898333613244565b6111fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5661742f6e6f742d616c6c6f776564000000000000000000000000000000000081525060200191505060405180910390fd5b6112556004600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613304565b6004600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113036004600086815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b6004600086815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611446576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a54146114be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6000600a819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450565b60056020528060005260406000206000915090505481565b6001600a54146116bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6116c5613437565b6003600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201548152602001600182015481525050905061173e613451565b600260008981526020019081526020016000206040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905060008160200151141561180b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5661742f696c6b2d6e6f742d696e69740000000000000000000000000000000081525060200191505060405180910390fd5b611819826000015185613338565b826000018181525050611830826020015184613338565b826020018181525050611847816000015184613338565b8160000181815250506000611860826020015185613377565b90506000611876836020015185602001516133b2565b905061188460075483613338565b6007819055506118c060008613156118bb85606001516118ac876000015188602001516133b2565b111560095460075411156133de565b6133eb565b611932576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5661742f6365696c696e672d657863656564656400000000000000000000000081525060200191505060405180910390fd5b611961611947600087131560008912156133de565b611959866000015186604001516133b2565b8311156133eb565b6119d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d73616665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6119f76119e8600087131560008912156133de565b6119f28b33613244565b6133eb565b611a69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5661742f6e6f742d616c6c6f7765642d7500000000000000000000000000000081525060200191505060405180910390fd5b611a806000871315611a7b8a33613244565b6133eb565b611af2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5661742f6e6f742d616c6c6f7765642d7600000000000000000000000000000081525060200191505060405180910390fd5b611b096000861215611b048933613244565b6133eb565b611b7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5661742f6e6f742d616c6c6f7765642d7700000000000000000000000000000081525060200191505060405180910390fd5b611b93600085602001511484608001518310156133eb565b611c05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f5661742f6475737400000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611c5f600460008c815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054876133f8565b600460008c815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611cfc600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613338565b600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600360008c815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015590505082600260008c81526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155905050505050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ee5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006003600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600260008981526020019081526020016000209050611f5e826000015485613338565b8260000181905550611f74826001015484613338565b8260010181905550611f8a816000015484613338565b81600001819055506000611fa2826001015485613377565b9050611ffe600460008b815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866133f8565b600460008b815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061209b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826133f8565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120ea600854826133f8565b6008819055505050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b61223e6004600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613338565b6004600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b60006003600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006003600088815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006002600089815260200190815260200160002090506123998360000154866133f8565b83600001819055506123af8360010154856133f8565b83600101819055506123c5826000015486613338565b82600001819055506123db826001015485613338565b826001018190555060006123f7846001015483600101546133b2565b9050600061240d846001015484600101546133b2565b905061242b61241c8a33613244565b6124268a33613244565b6133de565b61249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5661742f6e6f742d616c6c6f776564000000000000000000000000000000000081525060200191505060405180910390fd5b6124af856000015484600201546133b2565b821115612524576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5661742f6e6f742d736166652d7372630000000000000000000000000000000081525060200191505060405180910390fd5b612536846000015484600201546133b2565b8111156125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5661742f6e6f742d736166652d6473740000000000000000000000000000000081525060200191505060405180910390fd5b6125c3836004015483101560008760010154146133eb565b612635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f647573742d737263000000000000000000000000000000000000000081525060200191505060405180910390fd5b61264d836004015482101560008660010154146133eb565b6126bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f647573742d647374000000000000000000000000000000000000000081525060200191505060405180910390fd5b50505050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a4505050505050565b600a5481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146127ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612a1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414612a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600260008581526020019081526020016000209050612ab8816001015483613338565b81600101819055506000612ad0826000015484613377565b9050612b1b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613338565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b6a60075482613338565b60078190555050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b60095481565b612bbc8333613244565b612c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5661742f6e6f742d616c6c6f776564000000000000000000000000000000000081525060200191505060405180910390fd5b612c77600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613304565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d03600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b60006020528060005260406000206000915090505481565b60026020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154905085565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60066020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612f54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b612f9d600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613029600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130786008548261331e565b60088190555061308a6007548261331e565b6007819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b6000339050613118600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613304565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131a4600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613304565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131f360085483613304565b60088190555061320560075483613304565b600781905550505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60006132fc8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161460018060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146133eb565b905092915050565b600082828403915081111561331857600080fd5b92915050565b600082828401915081101561333257600080fd5b92915050565b6000818301905060008212158061334f5750828111155b61335857600080fd5b6000821315806133685750828110155b61337157600080fd5b92915050565b60008183029050600083121561338c57600080fd5b60008214806133a35750828282816133a057fe5b05145b6133ac57600080fd5b92915050565b6000808214806133cf57508282838502925082816133cc57fe5b04145b6133d857600080fd5b92915050565b6000818316905092915050565b6000818317905092915050565b6000818303905060008213158061340f5750828111155b61341857600080fd5b6000821215806134285750828110155b61343157600080fd5b92915050565b604051806040016040528060008152602001600081525090565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509056fea265627a7a723158208a580a94b7f47ff0368768e9eb5ecda769fe0c72f37dcc78574c670dc0671a9664736f6c634300050c0032") - - syntax Bytes ::= "Vat_bin_runtime" [macro] - // ------------------------------------------ - rule Vat_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80637cdd3fde116100f9578063bb35783b11610097578063dc4d20fa11610071578063dc4d20fa1461096c578063f059212a146109b0578063f24e23eb14610a08578063f37ac61c14610a76576101c4565b8063bb35783b14610848578063bf353dbb146108b6578063d9638d361461090e576101c4565b80639c52a7f1116100d35780639c52a7f11461074a578063a3b22fc41461078e578063b65337df146107d2578063babe8a3f1461082a576101c4565b80637cdd3fde14610652578063870c616d146106aa578063957aa58c1461072c576101c4565b80634538c4eb11610166578063692450091161014057806369245009146104ac5780636c25b346146104b6578063760887031461050e5780637bab3f40146105b0576101c4565b80634538c4eb146103785780636111be2e146103f057806365fae35e14610468576101c4565b80632424be5c116101a25780632424be5c1461028b57806329ae8114146102f45780632d61a3551461032c5780633b6631951461034a576101c4565b80630dca59c1146101c95780631a0b287e146101e7578063214414d514610229575b600080fd5b6101d1610aa4565b6040518082815260200191505060405180910390f35b610227600480360360608110156101fd57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610aaa565b005b6102756004803603604081101561023f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d58565b6040518082815260200191505060405180910390f35b6102d7600480360360408110156102a157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d7d565b604051808381526020018281526020019250505060405180910390f35b61032a6004803603604081101561030a57600080fd5b810190808035906020019092919080359060200190929190505050610dae565b005b610334610fb5565b6040518082815260200191505060405180910390f35b6103766004803603602081101561036057600080fd5b8101908080359060200190929190505050610fbb565b005b6103da6004803603604081101561038e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061115a565b6040518082815260200191505060405180910390f35b6104666004803603608081101561040657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061117f565b005b6104aa6004803603602081101561047e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611392565b005b6104b461153a565b005b6104f8600480360360208110156104cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061162d565b6040518082815260200191505060405180910390f35b6105ae600480360360c081101561052457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611645565b005b610650600480360360c08110156105c657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611e31565b005b6106a86004803603606081101561066857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612130565b005b61072a600480360360a08110156106c057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506122cc565b005b610734612700565b6040518082815260200191505060405180910390f35b61078c6004803603602081101561076057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612706565b005b6107d0600480360360208110156107a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ae565b005b610828600480360360608110156107e857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612967565b005b610832612bac565b6040518082815260200191505060405180910390f35b6108b46004803603606081101561085e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612bb2565b005b6108f8600480360360208110156108cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d80565b6040518082815260200191505060405180910390f35b61093a6004803603602081101561092457600080fd5b8101908080359060200190929190505050612d98565b604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b6109ae6004803603602081101561098257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612dce565b005b6109f2600480360360208110156109c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e88565b6040518082815260200191505060405180910390f35b610a7460048036036060811015610a1e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ea0565b005b610aa260048036036020811015610a8c57600080fd5b81019080803590602001909291905050506130ca565b005b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414610bd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f73706f7400000000000000000000000000000000000000000000000000000000821415610c1e57806002600085815260200190815260200160002060020181905550610d1e565b7f6c696e6500000000000000000000000000000000000000000000000000000000821415610c6657806002600085815260200190815260200160002060030181905550610d1d565b7f6475737400000000000000000000000000000000000000000000000000000000821415610cae57806002600085815260200190815260200160002060040181905550610d1c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5661742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5b5961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b6004602052816000526040600020602052806000526040600020600091509150505481565b6003602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414610eda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f4c696e6500000000000000000000000000000000000000000000000000000000821415610f0e5780600981905550610f7c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5661742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a4505050565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461106f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006002600083815260200190815260200160002060010154146110fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5661742f696c6b2d616c72656164792d696e697400000000000000000000000081525060200191505060405180910390fd5b6b033b2e3c9fd0803ce800000060026000838152602001908152602001600020600101819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b6001602052816000526040600020602052806000526040600020600091509150505481565b6111898333613244565b6111fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5661742f6e6f742d616c6c6f776564000000000000000000000000000000000081525060200191505060405180910390fd5b6112556004600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613304565b6004600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113036004600086815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b6004600086815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611446576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a54146114be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6000600a819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450565b60056020528060005260406000206000915090505481565b6001600a54146116bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6116c5613437565b6003600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201548152602001600182015481525050905061173e613451565b600260008981526020019081526020016000206040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905060008160200151141561180b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5661742f696c6b2d6e6f742d696e69740000000000000000000000000000000081525060200191505060405180910390fd5b611819826000015185613338565b826000018181525050611830826020015184613338565b826020018181525050611847816000015184613338565b8160000181815250506000611860826020015185613377565b90506000611876836020015185602001516133b2565b905061188460075483613338565b6007819055506118c060008613156118bb85606001516118ac876000015188602001516133b2565b111560095460075411156133de565b6133eb565b611932576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5661742f6365696c696e672d657863656564656400000000000000000000000081525060200191505060405180910390fd5b611961611947600087131560008912156133de565b611959866000015186604001516133b2565b8311156133eb565b6119d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d73616665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6119f76119e8600087131560008912156133de565b6119f28b33613244565b6133eb565b611a69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5661742f6e6f742d616c6c6f7765642d7500000000000000000000000000000081525060200191505060405180910390fd5b611a806000871315611a7b8a33613244565b6133eb565b611af2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5661742f6e6f742d616c6c6f7765642d7600000000000000000000000000000081525060200191505060405180910390fd5b611b096000861215611b048933613244565b6133eb565b611b7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5661742f6e6f742d616c6c6f7765642d7700000000000000000000000000000081525060200191505060405180910390fd5b611b93600085602001511484608001518310156133eb565b611c05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f5661742f6475737400000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611c5f600460008c815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054876133f8565b600460008c815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611cfc600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613338565b600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600360008c815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015590505082600260008c81526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155905050505050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ee5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006003600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600260008981526020019081526020016000209050611f5e826000015485613338565b8260000181905550611f74826001015484613338565b8260010181905550611f8a816000015484613338565b81600001819055506000611fa2826001015485613377565b9050611ffe600460008b815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866133f8565b600460008b815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061209b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826133f8565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120ea600854826133f8565b6008819055505050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b61223e6004600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613338565b6004600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b60006003600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006003600088815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006002600089815260200190815260200160002090506123998360000154866133f8565b83600001819055506123af8360010154856133f8565b83600101819055506123c5826000015486613338565b82600001819055506123db826001015485613338565b826001018190555060006123f7846001015483600101546133b2565b9050600061240d846001015484600101546133b2565b905061242b61241c8a33613244565b6124268a33613244565b6133de565b61249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5661742f6e6f742d616c6c6f776564000000000000000000000000000000000081525060200191505060405180910390fd5b6124af856000015484600201546133b2565b821115612524576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5661742f6e6f742d736166652d7372630000000000000000000000000000000081525060200191505060405180910390fd5b612536846000015484600201546133b2565b8111156125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5661742f6e6f742d736166652d6473740000000000000000000000000000000081525060200191505060405180910390fd5b6125c3836004015483101560008760010154146133eb565b612635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f647573742d737263000000000000000000000000000000000000000081525060200191505060405180910390fd5b61264d836004015482101560008660010154146133eb565b6126bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f647573742d647374000000000000000000000000000000000000000081525060200191505060405180910390fd5b50505050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a4505050505050565b600a5481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146127ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612a1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414612a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600260008581526020019081526020016000209050612ab8816001015483613338565b81600101819055506000612ad0826000015484613377565b9050612b1b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613338565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b6a60075482613338565b60078190555050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b60095481565b612bbc8333613244565b612c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5661742f6e6f742d616c6c6f776564000000000000000000000000000000000081525060200191505060405180910390fd5b612c77600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613304565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d03600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b60006020528060005260406000206000915090505481565b60026020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154905085565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60066020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612f54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b612f9d600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613029600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130786008548261331e565b60088190555061308a6007548261331e565b6007819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b6000339050613118600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613304565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131a4600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613304565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131f360085483613304565b60088190555061320560075483613304565b600781905550505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60006132fc8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161460018060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146133eb565b905092915050565b600082828403915081111561331857600080fd5b92915050565b600082828401915081101561333257600080fd5b92915050565b6000818301905060008212158061334f5750828111155b61335857600080fd5b6000821315806133685750828110155b61337157600080fd5b92915050565b60008183029050600083121561338c57600080fd5b60008214806133a35750828282816133a057fe5b05145b6133ac57600080fd5b92915050565b6000808214806133cf57508282838502925082816133cc57fe5b04145b6133d857600080fd5b92915050565b6000818316905092915050565b6000818317905092915050565b6000818303905060008213158061340f5750828111155b61341857600080fd5b6000821215806134285750828110155b61343157600080fd5b92915050565b604051806040016040528060008152602001600081525090565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509056fea265627a7a723158208a580a94b7f47ff0368768e9eb5ecda769fe0c72f37dcc78574c670dc0671a9664736f6c634300050c0032") - - syntax Bytes ::= "Vow_bin" [macro] - // ---------------------------------- - rule Vow_bin => #parseByteStack("0x608060405234801561001057600080fd5b506040516128e63803806128e68339818101604052606081101561003357600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3b22fc4836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561020057600080fd5b505af1158015610214573d6000803e3d6000fd5b505050506001600c819055505050506126b4806102326000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063697efb78116100c3578063cb5cc1091161007c578063cb5cc109146104a9578063d0adc35f146104eb578063d4e8be8314610509578063d7ee674b14610557578063e433054514610585578063f37ac61c146105a357610158565b8063697efb7814610385578063957aa58c146103b35780639c52a7f1146103d1578063bbbb0d7b14610415578063bf353dbb14610433578063c349d3621461048b57610158565b80634081d73a116101155780634081d73a146102675780635ca0d723146102b157806364bd7013146102fb57806365fae35e1461031957806368110b2f1461035d578063692450091461037b57610158565b80630e01198b1461015d5780631b8e8cfa1461017b5780632506855a1461019957806329ae8114146101c75780632a1d2b3c146101ff57806336569e771461021d575b600080fd5b6101656105d1565b6040518082815260200191505060405180910390f35b610183610a69565b6040518082815260200191505060405180910390f35b6101c5600480360360208110156101af57600080fd5b8101908080359060200190929190505050610a6f565b005b6101fd600480360360408110156101dd57600080fd5b810190808035906020019092919080359060200190929190505050610d0b565b005b610207610f6c565b6040518082815260200191505060405180910390f35b610225610f72565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61026f610f98565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102b9610fbe565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610303610fe4565b6040518082815260200191505060405180910390f35b61035b6004803603602081101561032f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fea565b005b610365611190565b6040518082815260200191505060405180910390f35b610383611196565b005b6103b16004803603602081101561039b57600080fd5b8101908080359060200190929190505050611761565b005b6103bb611891565b6040518082815260200191505060405180910390f35b610413600480360360208110156103e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611897565b005b61041d6119c5565b6040518082815260200191505060405180910390f35b6104756004803603602081101561044957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611db9565b6040518082815260200191505060405180910390f35b610493611dd1565b6040518082815260200191505060405180910390f35b6104d5600480360360208110156104bf57600080fd5b8101908080359060200190929190505050611dd7565b6040518082815260200191505060405180910390f35b6104f3611def565b6040518082815260200191505060405180910390f35b6105556004803603604081101561051f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611df5565b005b6105836004803603602081101561056d57600080fd5b81019080803590602001909291905050506121bf565b005b61058d6122b4565b6040518082815260200191505060405180910390f35b6105cf600480360360208110156105b957600080fd5b81019080803590602001909291905050506122ba565b005b60006106c36106bb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561067857600080fd5b505afa15801561068c573d6000803e3d6000fd5b505050506040513d60208110156106a257600080fd5b8101908080519060200190929190505050600a54612631565b600b54612631565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561076257600080fd5b505afa158015610776573d6000803e3d6000fd5b505050506040513d602081101561078c57600080fd5b81019080805190602001909291905050501015610811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f566f772f696e73756666696369656e742d737572706c7573000000000000000081525060200191505060405180910390fd5b60006109036108fb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156108b857600080fd5b505afa1580156108cc573d6000803e3d6000fd5b505050506040513d60208110156108e257600080fd5b810190808051906020019092919050505060055461264b565b60065461264b565b14610976576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f566f772f646562742d6e6f742d7a65726f00000000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca40c419600a5460006040518363ffffffff1660e01b81526004018083815260200182815260200192505050602060405180830381600087803b1580156109f657600080fd5b505af1158015610a0a573d6000803e3d6000fd5b505050506040513d6020811015610a2057600080fd5b810190808051906020019092919050505090505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45090565b600b5481565b600654811115610ae7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d656e6f7567682d617368000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b8657600080fd5b505afa158015610b9a573d6000803e3d6000fd5b505050506040513d6020811015610bb057600080fd5b8101908080519060200190929190505050811115610c36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f566f772f696e73756666696369656e742d737572706c7573000000000000000081525060200191505060405180910390fd5b610c426006548261264b565b600681905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f37ac61c826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610cbd57600080fd5b505af1158015610cd1573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610dbf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f7761697400000000000000000000000000000000000000000000000000000000821415610df35780600781905550610f35565b7f62756d7000000000000000000000000000000000000000000000000000000000821415610e275780600a81905550610f34565b7f73756d7000000000000000000000000000000000000000000000000000000000821415610e5b5780600981905550610f33565b7f64756d7000000000000000000000000000000000000000000000000000000000821415610e8f5780600881905550610f32565b7f68756d7000000000000000000000000000000000000000000000000000000000821415610ec35780600b81905550610f31565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f566f772f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461109e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600c5414611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f566f772f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600a5481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461124a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600c54146112c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f566f772f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600c8190555060006005819055506000600681905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2f91af2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156113d957600080fd5b505afa1580156113ed573d6000803e3d6000fd5b505050506040513d602081101561140357600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561144a57600080fd5b505af115801561145e573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156114cc57600080fd5b505af11580156114e0573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f37ac61c6116de600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156115c457600080fd5b505afa1580156115d8573d6000803e3d6000fd5b505050506040513d60208110156115ee57600080fd5b8101908080519060200190929190505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b8101908080519060200190929190505050612665565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561171457600080fd5b505af1158015611728573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611815576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b611832600460004281526020019081526020016000205482612631565b600460004281526020019081526020016000208190555061185560055482612631565b6005819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600c5481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461194b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6000611ab7611aaf600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a6c57600080fd5b505afa158015611a80573d6000803e3d6000fd5b505050506040513d6020811015611a9657600080fd5b810190808051906020019092919050505060055461264b565b60065461264b565b6009541115611b2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f566f772f696e73756666696369656e742d64656274000000000000000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bcf57600080fd5b505afa158015611be3573d6000803e3d6000fd5b505050506040513d6020811015611bf957600080fd5b810190808051906020019092919050505014611c7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f566f772f737572706c75732d6e6f742d7a65726f00000000000000000000000081525060200191505060405180910390fd5b611c8b600654600954612631565b600681905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b7e9cd24306008546009546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050602060405180830381600087803b158015611d4657600080fd5b505af1158015611d5a573d6000803e3d6000fd5b505050506040513d6020811015611d7057600080fd5b810190808051906020019092919050505090505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45090565b60006020528060005260406000206000915090505481565b60095481565b60046020528060005260406000206000915090505481565b60055481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ea9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f666c6170706572000000000000000000000000000000000000000000000000008214156120ab57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc4d20fa600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015611f9457600080fd5b505af1158015611fa8573d6000803e3d6000fd5b5050505080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3b22fc4826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561208e57600080fd5b505af11580156120a2573d6000803e3d6000fd5b50505050612188565b7f666c6f70706572000000000000000000000000000000000000000000000000008214156121195780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612187565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f566f772f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b426121cc82600754612631565b1115612240576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f566f772f776169742d6e6f742d66696e6973686564000000000000000000000081525060200191505060405180910390fd5b61225f600554600460008481526020019081526020016000205461264b565b600581905550600060046000838152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60085481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561235957600080fd5b505afa15801561236d573d6000803e3d6000fd5b505050506040513d602081101561238357600080fd5b8101908080519060200190929190505050811115612409576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f566f772f696e73756666696369656e742d737572706c7573000000000000000081525060200191505060405180910390fd5b6124f96124f1600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156124ae57600080fd5b505afa1580156124c2573d6000803e3d6000fd5b505050506040513d60208110156124d857600080fd5b810190808051906020019092919050505060055461264b565b60065461264b565b81111561256e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f566f772f696e73756666696369656e742d64656274000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f37ac61c826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156125e357600080fd5b505af11580156125f7573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600082828401915081101561264557600080fd5b92915050565b600082828403915081111561265f57600080fd5b92915050565b6000818311156126755781612677565b825b90509291505056fea265627a7a72315820c366742f39bbcf961239d704f4653337b9e0b1b5b9ce284e9e27a346452a7a9964736f6c634300050c0032") - - syntax Bytes ::= "Vow_bin_runtime" [macro] - // ------------------------------------------ - rule Vow_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063697efb78116100c3578063cb5cc1091161007c578063cb5cc109146104a9578063d0adc35f146104eb578063d4e8be8314610509578063d7ee674b14610557578063e433054514610585578063f37ac61c146105a357610158565b8063697efb7814610385578063957aa58c146103b35780639c52a7f1146103d1578063bbbb0d7b14610415578063bf353dbb14610433578063c349d3621461048b57610158565b80634081d73a116101155780634081d73a146102675780635ca0d723146102b157806364bd7013146102fb57806365fae35e1461031957806368110b2f1461035d578063692450091461037b57610158565b80630e01198b1461015d5780631b8e8cfa1461017b5780632506855a1461019957806329ae8114146101c75780632a1d2b3c146101ff57806336569e771461021d575b600080fd5b6101656105d1565b6040518082815260200191505060405180910390f35b610183610a69565b6040518082815260200191505060405180910390f35b6101c5600480360360208110156101af57600080fd5b8101908080359060200190929190505050610a6f565b005b6101fd600480360360408110156101dd57600080fd5b810190808035906020019092919080359060200190929190505050610d0b565b005b610207610f6c565b6040518082815260200191505060405180910390f35b610225610f72565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61026f610f98565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102b9610fbe565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610303610fe4565b6040518082815260200191505060405180910390f35b61035b6004803603602081101561032f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fea565b005b610365611190565b6040518082815260200191505060405180910390f35b610383611196565b005b6103b16004803603602081101561039b57600080fd5b8101908080359060200190929190505050611761565b005b6103bb611891565b6040518082815260200191505060405180910390f35b610413600480360360208110156103e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611897565b005b61041d6119c5565b6040518082815260200191505060405180910390f35b6104756004803603602081101561044957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611db9565b6040518082815260200191505060405180910390f35b610493611dd1565b6040518082815260200191505060405180910390f35b6104d5600480360360208110156104bf57600080fd5b8101908080359060200190929190505050611dd7565b6040518082815260200191505060405180910390f35b6104f3611def565b6040518082815260200191505060405180910390f35b6105556004803603604081101561051f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611df5565b005b6105836004803603602081101561056d57600080fd5b81019080803590602001909291905050506121bf565b005b61058d6122b4565b6040518082815260200191505060405180910390f35b6105cf600480360360208110156105b957600080fd5b81019080803590602001909291905050506122ba565b005b60006106c36106bb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561067857600080fd5b505afa15801561068c573d6000803e3d6000fd5b505050506040513d60208110156106a257600080fd5b8101908080519060200190929190505050600a54612631565b600b54612631565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561076257600080fd5b505afa158015610776573d6000803e3d6000fd5b505050506040513d602081101561078c57600080fd5b81019080805190602001909291905050501015610811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f566f772f696e73756666696369656e742d737572706c7573000000000000000081525060200191505060405180910390fd5b60006109036108fb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156108b857600080fd5b505afa1580156108cc573d6000803e3d6000fd5b505050506040513d60208110156108e257600080fd5b810190808051906020019092919050505060055461264b565b60065461264b565b14610976576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f566f772f646562742d6e6f742d7a65726f00000000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca40c419600a5460006040518363ffffffff1660e01b81526004018083815260200182815260200192505050602060405180830381600087803b1580156109f657600080fd5b505af1158015610a0a573d6000803e3d6000fd5b505050506040513d6020811015610a2057600080fd5b810190808051906020019092919050505090505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45090565b600b5481565b600654811115610ae7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d656e6f7567682d617368000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b8657600080fd5b505afa158015610b9a573d6000803e3d6000fd5b505050506040513d6020811015610bb057600080fd5b8101908080519060200190929190505050811115610c36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f566f772f696e73756666696369656e742d737572706c7573000000000000000081525060200191505060405180910390fd5b610c426006548261264b565b600681905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f37ac61c826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610cbd57600080fd5b505af1158015610cd1573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610dbf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f7761697400000000000000000000000000000000000000000000000000000000821415610df35780600781905550610f35565b7f62756d7000000000000000000000000000000000000000000000000000000000821415610e275780600a81905550610f34565b7f73756d7000000000000000000000000000000000000000000000000000000000821415610e5b5780600981905550610f33565b7f64756d7000000000000000000000000000000000000000000000000000000000821415610e8f5780600881905550610f32565b7f68756d7000000000000000000000000000000000000000000000000000000000821415610ec35780600b81905550610f31565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f566f772f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461109e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600c5414611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f566f772f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600a5481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461124a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600c54146112c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f566f772f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600c8190555060006005819055506000600681905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2f91af2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156113d957600080fd5b505afa1580156113ed573d6000803e3d6000fd5b505050506040513d602081101561140357600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561144a57600080fd5b505af115801561145e573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156114cc57600080fd5b505af11580156114e0573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f37ac61c6116de600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156115c457600080fd5b505afa1580156115d8573d6000803e3d6000fd5b505050506040513d60208110156115ee57600080fd5b8101908080519060200190929190505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b8101908080519060200190929190505050612665565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561171457600080fd5b505af1158015611728573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611815576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b611832600460004281526020019081526020016000205482612631565b600460004281526020019081526020016000208190555061185560055482612631565b6005819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600c5481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461194b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6000611ab7611aaf600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a6c57600080fd5b505afa158015611a80573d6000803e3d6000fd5b505050506040513d6020811015611a9657600080fd5b810190808051906020019092919050505060055461264b565b60065461264b565b6009541115611b2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f566f772f696e73756666696369656e742d64656274000000000000000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bcf57600080fd5b505afa158015611be3573d6000803e3d6000fd5b505050506040513d6020811015611bf957600080fd5b810190808051906020019092919050505014611c7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f566f772f737572706c75732d6e6f742d7a65726f00000000000000000000000081525060200191505060405180910390fd5b611c8b600654600954612631565b600681905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b7e9cd24306008546009546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050602060405180830381600087803b158015611d4657600080fd5b505af1158015611d5a573d6000803e3d6000fd5b505050506040513d6020811015611d7057600080fd5b810190808051906020019092919050505090505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45090565b60006020528060005260406000206000915090505481565b60095481565b60046020528060005260406000206000915090505481565b60055481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ea9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f666c6170706572000000000000000000000000000000000000000000000000008214156120ab57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc4d20fa600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015611f9457600080fd5b505af1158015611fa8573d6000803e3d6000fd5b5050505080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3b22fc4826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561208e57600080fd5b505af11580156120a2573d6000803e3d6000fd5b50505050612188565b7f666c6f70706572000000000000000000000000000000000000000000000000008214156121195780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612187565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f566f772f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b426121cc82600754612631565b1115612240576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f566f772f776169742d6e6f742d66696e6973686564000000000000000000000081525060200191505060405180910390fd5b61225f600554600460008481526020019081526020016000205461264b565b600581905550600060046000838152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60085481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561235957600080fd5b505afa15801561236d573d6000803e3d6000fd5b505050506040513d602081101561238357600080fd5b8101908080519060200190929190505050811115612409576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f566f772f696e73756666696369656e742d737572706c7573000000000000000081525060200191505060405180910390fd5b6124f96124f1600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156124ae57600080fd5b505afa1580156124c2573d6000803e3d6000fd5b505050506040513d60208110156124d857600080fd5b810190808051906020019092919050505060055461264b565b60065461264b565b81111561256e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f566f772f696e73756666696369656e742d64656274000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f37ac61c826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156125e357600080fd5b505af11580156125f7573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600082828401915081101561264557600080fd5b92915050565b600082828403915081111561265f57600080fd5b92915050565b6000818311156126755781612677565b825b90509291505056fea265627a7a72315820c366742f39bbcf961239d704f4653337b9e0b1b5b9ce284e9e27a346452a7a9964736f6c634300050c0032") - - syntax Bytes ::= "Dai_bin" [macro] - // ---------------------------------- - rule Dai_bin => #parseByteStack("0x608060405234801561001057600080fd5b506040516120d33803806120d38339818101604052602081101561003357600080fd5b810190808051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550604051808061208160529139605201905060405180910390206040518060400160405280600e81526020017f44616920537461626c65636f696e000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208330604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001955050505050506040516020818303038152906040528051906020012060058190555050611ee0806101a16000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80637ecebe00116100b8578063a9059cbb1161007c578063a9059cbb146106b4578063b753a98c1461071a578063bb35783b14610768578063bf353dbb146107d6578063dd62ed3e1461082e578063f2d5d56b146108a657610142565b80637ecebe00146104a15780638fcbaf0c146104f957806395d89b411461059f5780639c52a7f1146106225780639dc29fac1461066657610142565b8063313ce5671161010a578063313ce567146102f25780633644e5151461031657806340c10f191461033457806354fd4d501461038257806365fae35e1461040557806370a082311461044957610142565b806306fdde0314610147578063095ea7b3146101ca57806318160ddd1461023057806323b872dd1461024e57806330adf81f146102d4575b600080fd5b61014f6108f4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561018f578082015181840152602081019050610174565b50505050905090810190601f1680156101bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610216600480360360408110156101e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061092d565b604051808215151515815260200191505060405180910390f35b610238610a1f565b6040518082815260200191505060405180910390f35b6102ba6004803603606081101561026457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a25565b604051808215151515815260200191505060405180910390f35b6102dc610f3a565b6040518082815260200191505060405180910390f35b6102fa610f61565b604051808260ff1660ff16815260200191505060405180910390f35b61031e610f66565b6040518082815260200191505060405180910390f35b6103806004803603604081101561034a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f6c565b005b61038a611128565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103ca5780820151818401526020810190506103af565b50505050905090810190601f1680156103f75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104476004803603602081101561041b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611161565b005b61048b6004803603602081101561045f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061128f565b6040518082815260200191505060405180910390f35b6104e3600480360360208110156104b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112a7565b6040518082815260200191505060405180910390f35b61059d600480360361010081101561051057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803515159060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506112bf565b005b6105a76117fa565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105e75780820151818401526020810190506105cc565b50505050905090810190601f1680156106145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106646004803603602081101561063857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611833565b005b6106b26004803603604081101561067c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611961565b005b610700600480360360408110156106ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611df4565b604051808215151515815260200191505060405180910390f35b6107666004803603604081101561073057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e09565b005b6107d46004803603606081101561077e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e19565b005b610818600480360360208110156107ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e2a565b6040518082815260200191505060405180910390f35b6108906004803603604081101561084457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e42565b6040518082815260200191505060405180910390f35b6108f2600480360360408110156108bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e67565b005b6040518060400160405280600e81526020017f44616920537461626c65636f696e00000000000000000000000000000000000081525081565b600081600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60015481565b600081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610adc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4461692f696e73756666696369656e742d62616c616e6365000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610bb457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15610db25781600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4461692f696e73756666696369656e742d616c6c6f77616e636500000000000081525060200191505060405180910390fd5b610d31600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611e77565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610dfb600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611e77565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e87600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611e91565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b7fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb60001b81565b601281565b60055481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b611069600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611e91565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110b860015482611e91565b6001819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611215576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60026020528060005260406000206000915090505481565b60046020528060005260406000206000915090505481565b60006005547fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb60001b8a8a8a8a8a604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018215151515815260200196505050505050506040516020818303038152906040528051906020012060405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16141561148c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4461692f696e76616c69642d616464726573732d30000000000000000000000081525060200191505060405180910390fd5b60018185858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156114e9573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614611593576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f696e76616c69642d7065726d6974000000000000000000000000000081525060200191505060405180910390fd5b60008614806115a25750854211155b611614576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f7065726d69742d65787069726564000000000000000000000000000081525060200191505060405180910390fd5b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505587146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4461692f696e76616c69642d6e6f6e636500000000000000000000000000000081525060200191505060405180910390fd5b6000856116e4576000611706565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b905080600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050505050505050565b6040518060400160405280600381526020017f444149000000000000000000000000000000000000000000000000000000000081525081565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611a16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4461692f696e73756666696369656e742d62616c616e6365000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611aee57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15611cec5780600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611be5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4461692f696e73756666696369656e742d616c6c6f77616e636500000000000081525060200191505060405180910390fd5b611c6b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611e77565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611d35600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611e77565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d8460015482611e77565b600181905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000611e01338484610a25565b905092915050565b611e14338383610a25565b505050565b611e24838383610a25565b50505050565b60006020528060005260406000206000915090505481565b6003602052816000526040600020602052806000526040600020600091509150505481565b611e72823383610a25565b505050565b6000828284039150811115611e8b57600080fd5b92915050565b6000828284019150811015611ea557600080fd5b9291505056fea265627a7a7231582015335e6e193a1854a8470540d118909ce058e2503b1be6f4d55d85de83c689ea64736f6c634300050c0032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429") - - syntax Bytes ::= "Dai_bin_runtime" [macro] - // ------------------------------------------ - rule Dai_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106101425760003560e01c80637ecebe00116100b8578063a9059cbb1161007c578063a9059cbb146106b4578063b753a98c1461071a578063bb35783b14610768578063bf353dbb146107d6578063dd62ed3e1461082e578063f2d5d56b146108a657610142565b80637ecebe00146104a15780638fcbaf0c146104f957806395d89b411461059f5780639c52a7f1146106225780639dc29fac1461066657610142565b8063313ce5671161010a578063313ce567146102f25780633644e5151461031657806340c10f191461033457806354fd4d501461038257806365fae35e1461040557806370a082311461044957610142565b806306fdde0314610147578063095ea7b3146101ca57806318160ddd1461023057806323b872dd1461024e57806330adf81f146102d4575b600080fd5b61014f6108f4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561018f578082015181840152602081019050610174565b50505050905090810190601f1680156101bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610216600480360360408110156101e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061092d565b604051808215151515815260200191505060405180910390f35b610238610a1f565b6040518082815260200191505060405180910390f35b6102ba6004803603606081101561026457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a25565b604051808215151515815260200191505060405180910390f35b6102dc610f3a565b6040518082815260200191505060405180910390f35b6102fa610f61565b604051808260ff1660ff16815260200191505060405180910390f35b61031e610f66565b6040518082815260200191505060405180910390f35b6103806004803603604081101561034a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f6c565b005b61038a611128565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103ca5780820151818401526020810190506103af565b50505050905090810190601f1680156103f75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104476004803603602081101561041b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611161565b005b61048b6004803603602081101561045f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061128f565b6040518082815260200191505060405180910390f35b6104e3600480360360208110156104b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112a7565b6040518082815260200191505060405180910390f35b61059d600480360361010081101561051057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803515159060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506112bf565b005b6105a76117fa565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105e75780820151818401526020810190506105cc565b50505050905090810190601f1680156106145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106646004803603602081101561063857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611833565b005b6106b26004803603604081101561067c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611961565b005b610700600480360360408110156106ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611df4565b604051808215151515815260200191505060405180910390f35b6107666004803603604081101561073057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e09565b005b6107d46004803603606081101561077e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e19565b005b610818600480360360208110156107ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e2a565b6040518082815260200191505060405180910390f35b6108906004803603604081101561084457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e42565b6040518082815260200191505060405180910390f35b6108f2600480360360408110156108bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e67565b005b6040518060400160405280600e81526020017f44616920537461626c65636f696e00000000000000000000000000000000000081525081565b600081600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60015481565b600081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610adc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4461692f696e73756666696369656e742d62616c616e6365000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610bb457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15610db25781600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4461692f696e73756666696369656e742d616c6c6f77616e636500000000000081525060200191505060405180910390fd5b610d31600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611e77565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610dfb600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611e77565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e87600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611e91565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b7fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb60001b81565b601281565b60055481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b611069600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611e91565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110b860015482611e91565b6001819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611215576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60026020528060005260406000206000915090505481565b60046020528060005260406000206000915090505481565b60006005547fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb60001b8a8a8a8a8a604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018215151515815260200196505050505050506040516020818303038152906040528051906020012060405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16141561148c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4461692f696e76616c69642d616464726573732d30000000000000000000000081525060200191505060405180910390fd5b60018185858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156114e9573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614611593576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f696e76616c69642d7065726d6974000000000000000000000000000081525060200191505060405180910390fd5b60008614806115a25750854211155b611614576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f7065726d69742d65787069726564000000000000000000000000000081525060200191505060405180910390fd5b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505587146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4461692f696e76616c69642d6e6f6e636500000000000000000000000000000081525060200191505060405180910390fd5b6000856116e4576000611706565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b905080600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050505050505050565b6040518060400160405280600381526020017f444149000000000000000000000000000000000000000000000000000000000081525081565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611a16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4461692f696e73756666696369656e742d62616c616e6365000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611aee57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15611cec5780600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611be5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4461692f696e73756666696369656e742d616c6c6f77616e636500000000000081525060200191505060405180910390fd5b611c6b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611e77565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611d35600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611e77565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d8460015482611e77565b600181905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000611e01338484610a25565b905092915050565b611e14338383610a25565b505050565b611e24838383610a25565b50505050565b60006020528060005260406000206000915090505481565b6003602052816000526040600020602052806000526040600020600091509150505481565b611e72823383610a25565b505050565b6000828284039150811115611e8b57600080fd5b92915050565b6000828284019150811015611ea557600080fd5b9291505056fea265627a7a7231582015335e6e193a1854a8470540d118909ce058e2503b1be6f4d55d85de83c689ea64736f6c634300050c0032") - - syntax Bytes ::= "Jug_bin" [macro] - // ---------------------------------- - rule Jug_bin => #parseByteStack("0x608060405234801561001057600080fd5b5060405161131b38038061131b8339818101604052602081101561003357600080fd5b810190808051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611242806100d96000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063626cb3c511610071578063626cb3c51461020b57806365fae35e146102555780639c52a7f114610299578063bf353dbb146102dd578063d4e8be8314610335578063d9638d3614610383576100b4565b80631a0b287e146100b957806329ae8114146100fb57806336569e77146101335780633b6631951461017d57806344e2a5a8146101ab5780635001f3b5146101ed575b600080fd5b6100f9600480360360608110156100cf57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506103cc565b005b6101316004803603604081101561011157600080fd5b8101908080359060200190929190803590602001909291905050506105f9565b005b61013b610786565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101a96004803603602081101561019357600080fd5b81019080803590602001909291905050506107ac565b005b6101d7600480360360208110156101c157600080fd5b8101908080359060200190929190505050610946565b6040518082815260200191505060405180910390f35b6101f5610c35565b6040518082815260200191505060405180910390f35b610213610c3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102976004803603602081101561026b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c61565b005b6102db600480360360208110156102af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d8f565b005b61031f600480360360208110156102f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ebd565b6040518082815260200191505060405180910390f35b6103816004803603604081101561034b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ed5565b005b6103af6004803603602081101561039957600080fd5b810190808035906020019092919050505061109c565b604051808381526020018281526020019250505060405180910390f35b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610480576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060010154421461050b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4a75672f72686f2d6e6f742d757064617465640000000000000000000000000081525060200191505060405180910390fd5b7f6475747900000000000000000000000000000000000000000000000000000000821415610553578060016000858152602001908152602001600020600001819055506105c1565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4a75672f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f62617365000000000000000000000000000000000000000000000000000000008214156106e1578060048190555061074f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4a75672f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600060016000838152602001908152602001600020905060008160000154146108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4a75672f696c6b2d616c72656164792d696e697400000000000000000000000081525060200191505060405180910390fd5b6b033b2e3c9fd0803ce80000008160000181905550428160010181905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600060016000838152602001908152602001600020600101544210156109d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4a75672f696e76616c69642d6e6f77000000000000000000000000000000000081525060200191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36846040518263ffffffff1660e01b8152600401808281526020019150506040805180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050506040513d6040811015610a7457600080fd5b810190808051906020019092919080519060200190929190505050915050610aeb610ae5610aba60045460016000888152602001908152602001600020600001546110c0565b600160008781526020019081526020016000206001015442036b033b2e3c9fd0803ce80000006110da565b826111a0565b9150600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b65337df84600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b5986866111e5565b6040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610bc957600080fd5b505af1158015610bdd573d6000803e3d6000fd5b50505050426001600085815260200190815260200160002060010181905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450919050565b60045481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f766f770000000000000000000000000000000000000000000000000000000000821415610ff75780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611065565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4a75672f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016020528060005260406000206000915090508060000154908060010154905082565b60008183019050828110156110d457600080fd5b92915050565b600083600081146111805760028406600081146110f9578592506110fd565b8392505b50600283046002850494505b841561117a57858602868782041461112057600080fd5b8181018181101561113057600080fd5b8581049750600287061561116d57878502858982041415891515161561115557600080fd5b8381018181101561116557600080fd5b878104965050505b5050600285049450611109565b50611198565b83600081146111925760009250611196565b8392505b505b509392505050565b6000818302905060008214806111be5750828282816111bb57fe5b04145b6111c757600080fd5b6b033b2e3c9fd0803ce800000081816111dc57fe5b04905092915050565b60008183039050600083121580156111fe575060008212155b61120757600080fd5b9291505056fea265627a7a72315820171ca196f7d984fd5da28988be1d8174b37ded44b773b6dd0e886c788d5546c164736f6c634300050c0032") - - syntax Bytes ::= "Jug_bin_runtime" [macro] - // ------------------------------------------ - rule Jug_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063626cb3c511610071578063626cb3c51461020b57806365fae35e146102555780639c52a7f114610299578063bf353dbb146102dd578063d4e8be8314610335578063d9638d3614610383576100b4565b80631a0b287e146100b957806329ae8114146100fb57806336569e77146101335780633b6631951461017d57806344e2a5a8146101ab5780635001f3b5146101ed575b600080fd5b6100f9600480360360608110156100cf57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506103cc565b005b6101316004803603604081101561011157600080fd5b8101908080359060200190929190803590602001909291905050506105f9565b005b61013b610786565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101a96004803603602081101561019357600080fd5b81019080803590602001909291905050506107ac565b005b6101d7600480360360208110156101c157600080fd5b8101908080359060200190929190505050610946565b6040518082815260200191505060405180910390f35b6101f5610c35565b6040518082815260200191505060405180910390f35b610213610c3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102976004803603602081101561026b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c61565b005b6102db600480360360208110156102af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d8f565b005b61031f600480360360208110156102f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ebd565b6040518082815260200191505060405180910390f35b6103816004803603604081101561034b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ed5565b005b6103af6004803603602081101561039957600080fd5b810190808035906020019092919050505061109c565b604051808381526020018281526020019250505060405180910390f35b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610480576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060010154421461050b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4a75672f72686f2d6e6f742d757064617465640000000000000000000000000081525060200191505060405180910390fd5b7f6475747900000000000000000000000000000000000000000000000000000000821415610553578060016000858152602001908152602001600020600001819055506105c1565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4a75672f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f62617365000000000000000000000000000000000000000000000000000000008214156106e1578060048190555061074f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4a75672f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600060016000838152602001908152602001600020905060008160000154146108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4a75672f696c6b2d616c72656164792d696e697400000000000000000000000081525060200191505060405180910390fd5b6b033b2e3c9fd0803ce80000008160000181905550428160010181905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600060016000838152602001908152602001600020600101544210156109d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4a75672f696e76616c69642d6e6f77000000000000000000000000000000000081525060200191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36846040518263ffffffff1660e01b8152600401808281526020019150506040805180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050506040513d6040811015610a7457600080fd5b810190808051906020019092919080519060200190929190505050915050610aeb610ae5610aba60045460016000888152602001908152602001600020600001546110c0565b600160008781526020019081526020016000206001015442036b033b2e3c9fd0803ce80000006110da565b826111a0565b9150600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b65337df84600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b5986866111e5565b6040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610bc957600080fd5b505af1158015610bdd573d6000803e3d6000fd5b50505050426001600085815260200190815260200160002060010181905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450919050565b60045481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f766f770000000000000000000000000000000000000000000000000000000000821415610ff75780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611065565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4a75672f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016020528060005260406000206000915090508060000154908060010154905082565b60008183019050828110156110d457600080fd5b92915050565b600083600081146111805760028406600081146110f9578592506110fd565b8392505b50600283046002850494505b841561117a57858602868782041461112057600080fd5b8181018181101561113057600080fd5b8581049750600287061561116d57878502858982041415891515161561115557600080fd5b8381018181101561116557600080fd5b878104965050505b5050600285049450611109565b50611198565b83600081146111925760009250611196565b8392505b505b509392505050565b6000818302905060008214806111be5750828282816111bb57fe5b04145b6111c757600080fd5b6b033b2e3c9fd0803ce800000081816111dc57fe5b04905092915050565b60008183039050600083121580156111fe575060008212155b61120757600080fd5b9291505056fea265627a7a72315820171ca196f7d984fd5da28988be1d8174b37ded44b773b6dd0e886c788d5546c164736f6c634300050c0032") - - syntax Bytes ::= "Pot_bin" [macro] - // ---------------------------------- - rule Pot_bin => #parseByteStack("0x608060405234801561001057600080fd5b506040516115853803806115858339818101604052602081101561003357600080fd5b810190808051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506b033b2e3c9fd0803ce80000006003819055506b033b2e3c9fd0803ce8000000600481905550426007819055506001600881905550506114778061010e6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806365fae35e116100a25780639c52a7f1116100715780639c52a7f1146103565780639f678cca1461039a578063bf353dbb146103b8578063c92aecc414610410578063d4e8be831461042e5761010b565b806365fae35e146102bc57806369245009146103005780637f8661a11461030a578063957aa58c146103385761010b565b80632c69ed58116100de5780632c69ed58146101ec57806336569e771461020a578063487bf08214610254578063626cb3c5146102725761010b565b8063049878f3146101105780630bebac861461013e57806320aba08b1461019657806329ae8114146101b4575b600080fd5b61013c6004803603602081101561012657600080fd5b810190808035906020019092919050505061047c565b005b6101806004803603602081101561015457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106c7565b6040518082815260200191505060405180910390f35b61019e6106df565b6040518082815260200191505060405180910390f35b6101ea600480360360408110156101ca57600080fd5b8101908080359060200190929190803590602001909291905050506106e5565b005b6101f4610961565b6040518082815260200191505060405180910390f35b610212610967565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61025c61098d565b6040518082815260200191505060405180910390f35b61027a610993565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109b9565b005b610308610ae7565b005b6103366004803603602081101561032057600080fd5b8101908080359060200190929190505050610beb565b005b610340610dbf565b6040518082815260200191505060405180910390f35b6103986004803603602081101561036c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dc5565b005b6103a2610ef3565b6040518082815260200191505060405180910390f35b6103fa600480360360208110156103ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061110e565b6040518082815260200191505060405180910390f35b610418611126565b6040518082815260200191505060405180910390f35b61047a6004803603604081101561044457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061112c565b005b60075442146104f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f742f72686f2d6e6f742d757064617465640000000000000000000000000081525060200191505060405180910390fd5b61053c600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826112f3565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061058b600254826112f3565b600281905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b33306105dd6004548661130d565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561067957600080fd5b505af115801561068d573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016020528060005260406000206000915090505481565b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610799576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600160085414610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f506f742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6007544214610888576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f742f72686f2d6e6f742d757064617465640000000000000000000000000081525060200191505060405180910390fd5b7f64737200000000000000000000000000000000000000000000000000000000008214156108bc578060038190555061092a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f506f742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60025481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006008819055506b033b2e3c9fd0803ce80000006003819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b610c34600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611339565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c8360025482611339565b600281905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3033610cd56004548661130d565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610d7157600080fd5b505af1158015610d85573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6000600754421015610f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f506f742f696e76616c69642d6e6f77000000000000000000000000000000000081525060200191505060405180910390fd5b610f95610f8d60035460075442036b033b2e3c9fd0803ce8000000611353565b600454611419565b90506000610fa582600454611339565b90508160048190555042600781905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306110236002548661130d565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156110bf57600080fd5b505af11580156110d3573d6000803e3d6000fd5b50505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45090565b60006020528060005260406000206000915090505481565b60045481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f766f77000000000000000000000000000000000000000000000000000000000082141561124e5780600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506112bc565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f506f742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600082828401915081101561130757600080fd5b92915050565b60008082148061132a575082828385029250828161132757fe5b04145b61133357600080fd5b92915050565b600082828403915081111561134d57600080fd5b92915050565b600083600081146113f957600284066000811461137257859250611376565b8392505b50600283046002850494505b84156113f357858602868782041461139957600080fd5b818101818110156113a957600080fd5b858104975060028706156113e65787850285898204141589151516156113ce57600080fd5b838101818110156113de57600080fd5b878104965050505b5050600285049450611382565b50611411565b836000811461140b576000925061140f565b8392505b505b509392505050565b60006b033b2e3c9fd0803ce8000000611432848461130d565b8161143957fe5b0490509291505056fea265627a7a7231582012ac9f56855a6b6dcac6ac82b295c79e4a756291f2c4de00facc30dd4796636c64736f6c634300050c0032") - - syntax Bytes ::= "Pot_bin_runtime" [macro] - // ------------------------------------------ - rule Pot_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806365fae35e116100a25780639c52a7f1116100715780639c52a7f1146103565780639f678cca1461039a578063bf353dbb146103b8578063c92aecc414610410578063d4e8be831461042e5761010b565b806365fae35e146102bc57806369245009146103005780637f8661a11461030a578063957aa58c146103385761010b565b80632c69ed58116100de5780632c69ed58146101ec57806336569e771461020a578063487bf08214610254578063626cb3c5146102725761010b565b8063049878f3146101105780630bebac861461013e57806320aba08b1461019657806329ae8114146101b4575b600080fd5b61013c6004803603602081101561012657600080fd5b810190808035906020019092919050505061047c565b005b6101806004803603602081101561015457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106c7565b6040518082815260200191505060405180910390f35b61019e6106df565b6040518082815260200191505060405180910390f35b6101ea600480360360408110156101ca57600080fd5b8101908080359060200190929190803590602001909291905050506106e5565b005b6101f4610961565b6040518082815260200191505060405180910390f35b610212610967565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61025c61098d565b6040518082815260200191505060405180910390f35b61027a610993565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109b9565b005b610308610ae7565b005b6103366004803603602081101561032057600080fd5b8101908080359060200190929190505050610beb565b005b610340610dbf565b6040518082815260200191505060405180910390f35b6103986004803603602081101561036c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dc5565b005b6103a2610ef3565b6040518082815260200191505060405180910390f35b6103fa600480360360208110156103ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061110e565b6040518082815260200191505060405180910390f35b610418611126565b6040518082815260200191505060405180910390f35b61047a6004803603604081101561044457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061112c565b005b60075442146104f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f742f72686f2d6e6f742d757064617465640000000000000000000000000081525060200191505060405180910390fd5b61053c600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826112f3565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061058b600254826112f3565b600281905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b33306105dd6004548661130d565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561067957600080fd5b505af115801561068d573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016020528060005260406000206000915090505481565b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610799576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600160085414610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f506f742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6007544214610888576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f742f72686f2d6e6f742d757064617465640000000000000000000000000081525060200191505060405180910390fd5b7f64737200000000000000000000000000000000000000000000000000000000008214156108bc578060038190555061092a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f506f742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60025481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006008819055506b033b2e3c9fd0803ce80000006003819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b610c34600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611339565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c8360025482611339565b600281905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3033610cd56004548661130d565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610d7157600080fd5b505af1158015610d85573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6000600754421015610f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f506f742f696e76616c69642d6e6f77000000000000000000000000000000000081525060200191505060405180910390fd5b610f95610f8d60035460075442036b033b2e3c9fd0803ce8000000611353565b600454611419565b90506000610fa582600454611339565b90508160048190555042600781905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306110236002548661130d565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156110bf57600080fd5b505af11580156110d3573d6000803e3d6000fd5b50505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45090565b60006020528060005260406000206000915090505481565b60045481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f766f77000000000000000000000000000000000000000000000000000000000082141561124e5780600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506112bc565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f506f742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600082828401915081101561130757600080fd5b92915050565b60008082148061132a575082828385029250828161132757fe5b04145b61133357600080fd5b92915050565b600082828403915081111561134d57600080fd5b92915050565b600083600081146113f957600284066000811461137257859250611376565b8392505b50600283046002850494505b84156113f357858602868782041461139957600080fd5b818101818110156113a957600080fd5b858104975060028706156113e65787850285898204141589151516156113ce57600080fd5b838101818110156113de57600080fd5b878104965050505b5050600285049450611382565b50611411565b836000811461140b576000925061140f565b8392505b505b509392505050565b60006b033b2e3c9fd0803ce8000000611432848461130d565b8161143957fe5b0490509291505056fea265627a7a7231582012ac9f56855a6b6dcac6ac82b295c79e4a756291f2c4de00facc30dd4796636c64736f6c634300050c0032") - - syntax Bytes ::= "Cat_bin" [macro] - // ---------------------------------- - rule Cat_bin => #parseByteStack("0x608060405234801561001057600080fd5b5060405161190b38038061190b8339818101604052602081101561003357600080fd5b810190808051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016002819055505061182a806100e16000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063957aa58c11610071578063957aa58c1461023f5780639c52a7f11461025d578063bf353dbb146102a1578063d4e8be83146102f9578063d9638d3614610347578063ebecb39d146103c3576100b4565b80631a0b287e146100b957806336569e77146100fb57806345cf223014610145578063626cb3c5146101a757806365fae35e146101f15780636924500914610235575b600080fd5b6100f9600480360360608110156100cf57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061041b565b005b610103610606565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101916004803603604081101561015b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061062c565b6040518082815260200191505060405180910390f35b6101af610e5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102336004803603602081101561020757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e84565b005b61023d610fb2565b005b6102476110a3565b6040518082815260200191505060405180910390f35b61029f6004803603602081101561027357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110a9565b005b6102e3600480360360208110156102b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111d7565b6040518082815260200191505060405180910390f35b6103456004803603604081101561030f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111ef565b005b6103736004803603602081101561035d57600080fd5b81019080803590602001909291905050506113b6565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b610419600480360360608110156103d957600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611400565b005b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146104cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f63686f7000000000000000000000000000000000000000000000000000000000821415610517578060016000858152602001908152602001600020600101819055506105ce565b7f6c756d700000000000000000000000000000000000000000000000000000000082141561055f578060016000858152602001908152602001600020600201819055506105cd565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4361742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36866040518263ffffffff1660e01b81526004018082815260200191505060606040518083038186803b1580156106a457600080fd5b505afa1580156106b8573d6000803e3d6000fd5b505050506040513d60608110156106ce57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050509250925050600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632424be5c88886040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050604080518083038186803b1580156107a157600080fd5b505afa1580156107b5573d6000803e3d6000fd5b505050506040513d60408110156107cb57600080fd5b81019080805190602001909291908051906020019092919050505091509150600160025414610862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4361742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008311801561088357506108778185611784565b6108818385611784565b105b6108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4361742f6e6f742d756e7361666500000000000000000000000000000000000081525060200191505060405180910390fd5b600061091783600160008b8152602001908152602001600020600201546117b0565b905061093582846109288486611784565b8161092f57fe5b046117b0565b91507f8000000000000000000000000000000000000000000000000000000000000000811115801561098757507f80000000000000000000000000000000000000000000000000000000000000008211155b6109f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4361742f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f40898930600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686600003886000036040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663697efb78610ba28488611784565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b505050506001600089815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663351de60088600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610c8f610c73878b611784565b600160008f8152602001908152602001600020600101546117cc565b8560006040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200195505050505050602060405180830381600087803b158015610d3c57600080fd5b505af1158015610d50573d6000803e3d6000fd5b505050506040513d6020811015610d6657600080fd5b810190808051906020019092919050505095508673ffffffffffffffffffffffffffffffffffffffff16887fa716da86bc1fb6d43d1493373f34d7a418b619681cd7b90f7ea667ba1489be288385610dbe878b611784565b600160008f815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168c604051808681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019550505050505060405180910390a3505050505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006002819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60025481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461115d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146112a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f766f7700000000000000000000000000000000000000000000000000000000008214156113115780600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061137f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4361742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f666c6970000000000000000000000000000000000000000000000000000000008214156116de57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc4d20fa6001600086815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156115b357600080fd5b505af11580156115c7573d6000803e3d6000fd5b50505050806001600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3b22fc4826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156116c157600080fd5b505af11580156116d5573d6000803e3d6000fd5b5050505061174c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4361742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b6000808214806117a1575082828385029250828161179e57fe5b04145b6117aa57600080fd5b92915050565b6000818311156117c2578190506117c6565b8290505b92915050565b60006b033b2e3c9fd0803ce80000006117e58484611784565b816117ec57fe5b0490509291505056fea265627a7a72315820bf13a907e197c5e2f2ca0698f7608d926c495a6d2070dec1e9437d77ba4c155764736f6c634300050c0032") - - syntax Bytes ::= "Cat_bin_runtime" [macro] - // ------------------------------------------ - rule Cat_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063957aa58c11610071578063957aa58c1461023f5780639c52a7f11461025d578063bf353dbb146102a1578063d4e8be83146102f9578063d9638d3614610347578063ebecb39d146103c3576100b4565b80631a0b287e146100b957806336569e77146100fb57806345cf223014610145578063626cb3c5146101a757806365fae35e146101f15780636924500914610235575b600080fd5b6100f9600480360360608110156100cf57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061041b565b005b610103610606565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101916004803603604081101561015b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061062c565b6040518082815260200191505060405180910390f35b6101af610e5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102336004803603602081101561020757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e84565b005b61023d610fb2565b005b6102476110a3565b6040518082815260200191505060405180910390f35b61029f6004803603602081101561027357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110a9565b005b6102e3600480360360208110156102b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111d7565b6040518082815260200191505060405180910390f35b6103456004803603604081101561030f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111ef565b005b6103736004803603602081101561035d57600080fd5b81019080803590602001909291905050506113b6565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b610419600480360360608110156103d957600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611400565b005b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146104cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f63686f7000000000000000000000000000000000000000000000000000000000821415610517578060016000858152602001908152602001600020600101819055506105ce565b7f6c756d700000000000000000000000000000000000000000000000000000000082141561055f578060016000858152602001908152602001600020600201819055506105cd565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4361742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36866040518263ffffffff1660e01b81526004018082815260200191505060606040518083038186803b1580156106a457600080fd5b505afa1580156106b8573d6000803e3d6000fd5b505050506040513d60608110156106ce57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050509250925050600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632424be5c88886040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050604080518083038186803b1580156107a157600080fd5b505afa1580156107b5573d6000803e3d6000fd5b505050506040513d60408110156107cb57600080fd5b81019080805190602001909291908051906020019092919050505091509150600160025414610862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4361742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008311801561088357506108778185611784565b6108818385611784565b105b6108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4361742f6e6f742d756e7361666500000000000000000000000000000000000081525060200191505060405180910390fd5b600061091783600160008b8152602001908152602001600020600201546117b0565b905061093582846109288486611784565b8161092f57fe5b046117b0565b91507f8000000000000000000000000000000000000000000000000000000000000000811115801561098757507f80000000000000000000000000000000000000000000000000000000000000008211155b6109f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4361742f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f40898930600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686600003886000036040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663697efb78610ba28488611784565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b505050506001600089815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663351de60088600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610c8f610c73878b611784565b600160008f8152602001908152602001600020600101546117cc565b8560006040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200195505050505050602060405180830381600087803b158015610d3c57600080fd5b505af1158015610d50573d6000803e3d6000fd5b505050506040513d6020811015610d6657600080fd5b810190808051906020019092919050505095508673ffffffffffffffffffffffffffffffffffffffff16887fa716da86bc1fb6d43d1493373f34d7a418b619681cd7b90f7ea667ba1489be288385610dbe878b611784565b600160008f815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168c604051808681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019550505050505060405180910390a3505050505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006002819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60025481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461115d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146112a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f766f7700000000000000000000000000000000000000000000000000000000008214156113115780600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061137f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4361742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f666c6970000000000000000000000000000000000000000000000000000000008214156116de57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc4d20fa6001600086815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156115b357600080fd5b505af11580156115c7573d6000803e3d6000fd5b50505050806001600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3b22fc4826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156116c157600080fd5b505af11580156116d5573d6000803e3d6000fd5b5050505061174c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4361742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b6000808214806117a1575082828385029250828161179e57fe5b04145b6117aa57600080fd5b92915050565b6000818311156117c2578190506117c6565b8290505b92915050565b60006b033b2e3c9fd0803ce80000006117e58484611784565b816117ec57fe5b0490509291505056fea265627a7a72315820bf13a907e197c5e2f2ca0698f7608d926c495a6d2070dec1e9437d77ba4c155764736f6c634300050c0032") - - syntax Bytes ::= "GemJoin_bin" [macro] - // -------------------------------------- - rule GemJoin_bin => #parseByteStack("0x608060405234801561001057600080fd5b50604051610f6e380380610f6e8339818101604052606081101561003357600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160058190555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160028190555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561019557600080fd5b505afa1580156101a9573d6000803e3d6000fd5b505050506040513d60208110156101bf57600080fd5b8101908080519060200190929190505050600481905550505050610d86806101e86000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063957aa58c11610071578063957aa58c146101de5780639c52a7f1146101fc578063b3bcfa8214610240578063bf353dbb1461025e578063c5ce281e146102b6578063ef693bed146102d4576100a9565b806336569e77146100ae5780633b4da69f146100f857806365fae35e14610146578063692450091461018a5780637bd2bea714610194575b600080fd5b6100b6610322565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101446004803603604081101561010e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610348565b005b6101886004803603602081101561015c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106c3565b005b6101926107f1565b005b61019c6108e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101e6610908565b6040518082815260200191505060405180910390f35b61023e6004803603602081101561021257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061090e565b005b610248610a3c565b6040518082815260200191505060405180910390f35b6102a06004803603602081101561027457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a42565b6040518082815260200191505060405180910390f35b6102be610a5a565b6040518082815260200191505060405180910390f35b610320600480360360408110156102ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a60565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6001600554146103c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f47656d4a6f696e2f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b6000811215610437576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f47656d4a6f696e2f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637cdd3fde60025484846040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156104ea57600080fd5b505af11580156104fe573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156105df57600080fd5b505af11580156105f3573d6000803e3d6000fd5b505050506040513d602081101561060957600080fd5b810190808051906020019092919050505061068c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f47656d4a6f696e2f6661696c65642d7472616e7366657200000000000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610777576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f47656d4a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146108a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f47656d4a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60006005819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146109c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f47656d4a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60045481565b60006020528060005260406000206000915090505481565b60025481565b7f8000000000000000000000000000000000000000000000000000000000000000811115610af6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f47656d4a6f696e2f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637cdd3fde60025433846000036040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610bac57600080fd5b505af1158015610bc0573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c6d57600080fd5b505af1158015610c81573d6000803e3d6000fd5b505050506040513d6020811015610c9757600080fd5b8101908080519060200190929190505050610d1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f47656d4a6f696e2f6661696c65642d7472616e7366657200000000000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505056fea265627a7a7231582083bed50269f5c3d47da587567ef8517765519d503bc3b3b987308aac27d16fb564736f6c634300050c0032") - - syntax Bytes ::= "GemJoin_bin_runtime" [macro] - // ---------------------------------------------- - rule GemJoin_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063957aa58c11610071578063957aa58c146101de5780639c52a7f1146101fc578063b3bcfa8214610240578063bf353dbb1461025e578063c5ce281e146102b6578063ef693bed146102d4576100a9565b806336569e77146100ae5780633b4da69f146100f857806365fae35e14610146578063692450091461018a5780637bd2bea714610194575b600080fd5b6100b6610322565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101446004803603604081101561010e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610348565b005b6101886004803603602081101561015c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106c3565b005b6101926107f1565b005b61019c6108e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101e6610908565b6040518082815260200191505060405180910390f35b61023e6004803603602081101561021257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061090e565b005b610248610a3c565b6040518082815260200191505060405180910390f35b6102a06004803603602081101561027457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a42565b6040518082815260200191505060405180910390f35b6102be610a5a565b6040518082815260200191505060405180910390f35b610320600480360360408110156102ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a60565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6001600554146103c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f47656d4a6f696e2f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b6000811215610437576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f47656d4a6f696e2f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637cdd3fde60025484846040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156104ea57600080fd5b505af11580156104fe573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156105df57600080fd5b505af11580156105f3573d6000803e3d6000fd5b505050506040513d602081101561060957600080fd5b810190808051906020019092919050505061068c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f47656d4a6f696e2f6661696c65642d7472616e7366657200000000000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610777576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f47656d4a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146108a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f47656d4a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60006005819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146109c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f47656d4a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60045481565b60006020528060005260406000206000915090505481565b60025481565b7f8000000000000000000000000000000000000000000000000000000000000000811115610af6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f47656d4a6f696e2f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637cdd3fde60025433846000036040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610bac57600080fd5b505af1158015610bc0573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c6d57600080fd5b505af1158015610c81573d6000803e3d6000fd5b505050506040513d6020811015610c9757600080fd5b8101908080519060200190929190505050610d1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f47656d4a6f696e2f6661696c65642d7472616e7366657200000000000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505056fea265627a7a7231582083bed50269f5c3d47da587567ef8517765519d503bc3b3b987308aac27d16fb564736f6c634300050c0032") - - syntax Bytes ::= "DaiJoin_bin" [macro] - // -------------------------------------- - rule DaiJoin_bin => #parseByteStack("0x608060405234801561001057600080fd5b50604051610c91380380610c918339818101604052604081101561003357600080fd5b81019080805190602001909291908051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160038190555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610b648061012d6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063957aa58c11610066578063957aa58c1461017e5780639c52a7f11461019c578063bf353dbb146101e0578063ef693bed14610238578063f4b9fa751461028657610093565b806336569e77146100985780633b4da69f146100e257806365fae35e146101305780636924500914610174575b600080fd5b6100a06102d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61012e600480360360408110156100f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506102f6565b005b6101726004803603602081101561014657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104f8565b005b61017c610626565b005b610186610717565b6040518082815260200191505060405180910390f35b6101de600480360360208110156101b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061071d565b005b610222600480360360208110156101f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061084b565b6040518082815260200191505060405180910390f35b6102846004803603604081101561024e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610863565b005b61028e610add565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b308461034c6b033b2e3c9fd0803ce800000086610b03565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156103e857600080fd5b505af11580156103fc573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156104a957600080fd5b505af11580156104bd573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146105ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4461694a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146106da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4461694a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60006003819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60035481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146107d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4461694a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b6001600354146108db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4461694a6f696e2f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b33306109316b033b2e3c9fd0803ce800000086610b03565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156109cd57600080fd5b505af11580156109e1573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610a8e57600080fd5b505af1158015610aa2573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080821480610b205750828283850292508281610b1d57fe5b04145b610b2957600080fd5b9291505056fea265627a7a72315820973dce5b6612fe5d6b238645cf5425fa1ac980b80540dc1346c9437a243f73b564736f6c634300050c0032") - - syntax Bytes ::= "DaiJoin_bin_runtime" [macro] - // ---------------------------------------------- - rule DaiJoin_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063957aa58c11610066578063957aa58c1461017e5780639c52a7f11461019c578063bf353dbb146101e0578063ef693bed14610238578063f4b9fa751461028657610093565b806336569e77146100985780633b4da69f146100e257806365fae35e146101305780636924500914610174575b600080fd5b6100a06102d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61012e600480360360408110156100f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506102f6565b005b6101726004803603602081101561014657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104f8565b005b61017c610626565b005b610186610717565b6040518082815260200191505060405180910390f35b6101de600480360360208110156101b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061071d565b005b610222600480360360208110156101f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061084b565b6040518082815260200191505060405180910390f35b6102846004803603604081101561024e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610863565b005b61028e610add565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b308461034c6b033b2e3c9fd0803ce800000086610b03565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156103e857600080fd5b505af11580156103fc573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156104a957600080fd5b505af11580156104bd573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146105ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4461694a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146106da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4461694a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60006003819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60035481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146107d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4461694a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b6001600354146108db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4461694a6f696e2f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b33306109316b033b2e3c9fd0803ce800000086610b03565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156109cd57600080fd5b505af11580156109e1573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610a8e57600080fd5b505af1158015610aa2573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080821480610b205750828283850292508281610b1d57fe5b04145b610b2957600080fd5b9291505056fea265627a7a72315820973dce5b6612fe5d6b238645cf5425fa1ac980b80540dc1346c9437a243f73b564736f6c634300050c0032") - - syntax Bytes ::= "Flipper_bin" [macro] - // -------------------------------------- - rule Flipper_bin => #parseByteStack("0x6080604052670e92596fd6290000600455612a30600560006101000a81548165ffffffffffff021916908365ffffffffffff1602179055506202a300600560066101000a81548165ffffffffffff021916908365ffffffffffff160217905550600060065534801561007057600080fd5b50604051612e30380380612e308339818101604052604081101561009357600080fd5b81019080805190602001909291908051906020019092919050505081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060038190555060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050612ce58061014b6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806365fae35e116100a2578063c5ce281e11610071578063c5ce281e1461051d578063c959c42b1461053b578063cfc4af5514610569578063cfdd330214610597578063fc7b6aee146105b55761010b565b806365fae35e1461041f5780637d780d82146104635780639c52a7f114610481578063bf353dbb146104c55761010b565b80634423c5f1116100de5780634423c5f1146102565780634b43ed121461036d5780634e8b1dd5146103af5780635ff3a382146103dd5761010b565b806326e027f11461011057806329ae81141461013e578063351de6001461017657806336569e771461020c575b600080fd5b61013c6004803603602081101561012657600080fd5b81019080803590602001909291905050506105e3565b005b6101746004803603604081101561015457600080fd5b810190808035906020019092919080359060200190929190505050610b72565b005b6101f6600480360360a081101561018c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050610da5565b6040518082815260200191505060405180910390f35b61021461122e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102826004803603602081101561026c57600080fd5b8101908080359060200190929190505050611254565b604051808981526020018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018665ffffffffffff1665ffffffffffff1681526020018565ffffffffffff1665ffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019850505050505050505060405180910390f35b6103ad6004803603606081101561038357600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611320565b005b6103b7611bd4565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b61041d600480360360608110156103f357600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611bec565b005b6104616004803603602081101561043557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612473565b005b61046b6125a1565b6040518082815260200191505060405180910390f35b6104c36004803603602081101561049757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125a7565b005b610507600480360360208110156104db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126d5565b6040518082815260200191505060405180910390f35b6105256126ed565b6040518082815260200191505060405180910390f35b6105676004803603602081101561055157600080fd5b81019080803590602001909291905050506126f3565b005b610571612a65565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b61059f612a7d565b6040518082815260200191505060405180910390f35b6105e1600480360360208110156105cb57600080fd5b8101908080359060200190929190505050612a83565b005b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610697576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610770576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c69707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b6001600082815260200190815260200160002060050154600160008381526020019081526020016000206000015410610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c69707065722f616c72656164792d64656e742d706861736500000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e600354303360016000878152602001908152602001600020600101546040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561090e57600080fd5b505af1158015610922573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610a4f57600080fd5b505af1158015610a63573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600582016000905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610c26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7f6265670000000000000000000000000000000000000000000000000000000000821415610c5a5780600481905550610d6e565b7f74746c0000000000000000000000000000000000000000000000000000000000821415610cac5780600560006101000a81548165ffffffffffff021916908365ffffffffffff160217905550610d6d565b7f7461750000000000000000000000000000000000000000000000000000000000821415610cfe5780600560066101000a81548165ffffffffffff021916908365ffffffffffff160217905550610d6c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f466c69707065722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60065410610ef2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c69707065722f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b6006600081546001019190508190559050816001600083815260200190815260200160002060000181905550826001600083815260200190815260200160002060010181905550336001600083815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fac42600560069054906101000a900465ffffffffffff16612c5a565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff160217905550856001600083815260200190815260200160002060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846001600083815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836001600083815260200190815260200160002060050181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e6003543330876040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561119057600080fd5b505af11580156111a4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fc84ce3a1172f0dec3173f04caaa6005151a4bfe40d4c9f3ea28dba5f719b2a7a838686896040518085815260200184815260200183815260200182815260200194505050505060405180910390a395945050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900465ffffffffffff169080600201601a9054906101000a900465ffffffffffff16908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050154905088565b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c69707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180611467575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b6114d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff161161157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600101548214611609576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c69707065722f6c6f742d6e6f742d6d61746368696e67000000000000000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060050154811115611695576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f466c69707065722f6869676865722d7468616e2d74616200000000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548111611720576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6269642d6e6f742d6869676865720000000000000000000081525060200191505060405180910390fd5b6117426004546001600086815260200190815260200160002060000154612c84565b61175482670de0b6b3a7640000612c84565b1015806117765750600160008481526020019081526020016000206005015481145b6117e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c69707065722f696e73756666696369656e742d696e63726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119e857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000888152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561197a57600080fd5b505af115801561198e573d6000803e3d6000fd5b50505050336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008881526020019081526020016000206000015485036040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611b1357600080fd5b505af1158015611b27573d6000803e3d6000fd5b50505050806001600085815260200190815260200160002060000181905550611b6442600560009054906101000a900465ffffffffffff16612c5a565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600560009054906101000a900465ffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611cc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c69707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180611d33575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b611da5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1611611e4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548114611ed5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c69707065722f6e6f742d6d61746368696e672d626964000000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600501548114611f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f466c69707065722f74656e642d6e6f742d66696e69736865640000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600101548210611feb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f466c69707065722f6c6f742d6e6f742d6c6f776572000000000000000000000081525060200191505060405180910390fd5b6120136001600085815260200190815260200160002060010154670de0b6b3a7640000612c84565b61201f60045484612c84565b1115612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c69707065722f696e73756666696369656e742d646563726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461227d57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561220f57600080fd5b505af1158015612223573d6000803e3d6000fd5b50505050336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e600354306001600088815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686600160008a815260200190815260200160002060010154036040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b1580156123b257600080fd5b505af11580156123c6573d6000803e3d6000fd5b5050505081600160008581526020019081526020016000206001018190555061240342600560009054906101000a900465ffffffffffff16612c5a565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60045481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461265b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60035481565b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161415801561279d5750426001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16108061279c57504260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff16105b5b61280f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c69707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e600354306001600086815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000878152602001908152602001600020600101546040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561294257600080fd5b505af1158015612956573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600582016000905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600560069054906101000a900465ffffffffffff1681565b60065481565b4260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1610612b28576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c69707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614612bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c69707065722f6269642d616c72656164792d706c6163656400000000000081525060200191505060405180910390fd5b612bec42600560069054906101000a900465ffffffffffff16612c5a565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60008265ffffffffffff1682840191508165ffffffffffff161015612c7e57600080fd5b92915050565b600080821480612ca15750828283850292508281612c9e57fe5b04145b612caa57600080fd5b9291505056fea265627a7a723158205bf8d8db250074722a9a8897ef6594c97ba781ee0b5215bd97c249a718d9ee2a64736f6c634300050c0032") - - syntax Bytes ::= "Flipper_bin_runtime" [macro] - // ---------------------------------------------- - rule Flipper_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806365fae35e116100a2578063c5ce281e11610071578063c5ce281e1461051d578063c959c42b1461053b578063cfc4af5514610569578063cfdd330214610597578063fc7b6aee146105b55761010b565b806365fae35e1461041f5780637d780d82146104635780639c52a7f114610481578063bf353dbb146104c55761010b565b80634423c5f1116100de5780634423c5f1146102565780634b43ed121461036d5780634e8b1dd5146103af5780635ff3a382146103dd5761010b565b806326e027f11461011057806329ae81141461013e578063351de6001461017657806336569e771461020c575b600080fd5b61013c6004803603602081101561012657600080fd5b81019080803590602001909291905050506105e3565b005b6101746004803603604081101561015457600080fd5b810190808035906020019092919080359060200190929190505050610b72565b005b6101f6600480360360a081101561018c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050610da5565b6040518082815260200191505060405180910390f35b61021461122e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102826004803603602081101561026c57600080fd5b8101908080359060200190929190505050611254565b604051808981526020018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018665ffffffffffff1665ffffffffffff1681526020018565ffffffffffff1665ffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019850505050505050505060405180910390f35b6103ad6004803603606081101561038357600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611320565b005b6103b7611bd4565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b61041d600480360360608110156103f357600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611bec565b005b6104616004803603602081101561043557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612473565b005b61046b6125a1565b6040518082815260200191505060405180910390f35b6104c36004803603602081101561049757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125a7565b005b610507600480360360208110156104db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126d5565b6040518082815260200191505060405180910390f35b6105256126ed565b6040518082815260200191505060405180910390f35b6105676004803603602081101561055157600080fd5b81019080803590602001909291905050506126f3565b005b610571612a65565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b61059f612a7d565b6040518082815260200191505060405180910390f35b6105e1600480360360208110156105cb57600080fd5b8101908080359060200190929190505050612a83565b005b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610697576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610770576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c69707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b6001600082815260200190815260200160002060050154600160008381526020019081526020016000206000015410610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c69707065722f616c72656164792d64656e742d706861736500000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e600354303360016000878152602001908152602001600020600101546040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561090e57600080fd5b505af1158015610922573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610a4f57600080fd5b505af1158015610a63573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600582016000905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610c26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7f6265670000000000000000000000000000000000000000000000000000000000821415610c5a5780600481905550610d6e565b7f74746c0000000000000000000000000000000000000000000000000000000000821415610cac5780600560006101000a81548165ffffffffffff021916908365ffffffffffff160217905550610d6d565b7f7461750000000000000000000000000000000000000000000000000000000000821415610cfe5780600560066101000a81548165ffffffffffff021916908365ffffffffffff160217905550610d6c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f466c69707065722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60065410610ef2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c69707065722f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b6006600081546001019190508190559050816001600083815260200190815260200160002060000181905550826001600083815260200190815260200160002060010181905550336001600083815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fac42600560069054906101000a900465ffffffffffff16612c5a565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff160217905550856001600083815260200190815260200160002060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846001600083815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836001600083815260200190815260200160002060050181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e6003543330876040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561119057600080fd5b505af11580156111a4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fc84ce3a1172f0dec3173f04caaa6005151a4bfe40d4c9f3ea28dba5f719b2a7a838686896040518085815260200184815260200183815260200182815260200194505050505060405180910390a395945050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900465ffffffffffff169080600201601a9054906101000a900465ffffffffffff16908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050154905088565b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c69707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180611467575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b6114d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff161161157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600101548214611609576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c69707065722f6c6f742d6e6f742d6d61746368696e67000000000000000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060050154811115611695576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f466c69707065722f6869676865722d7468616e2d74616200000000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548111611720576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6269642d6e6f742d6869676865720000000000000000000081525060200191505060405180910390fd5b6117426004546001600086815260200190815260200160002060000154612c84565b61175482670de0b6b3a7640000612c84565b1015806117765750600160008481526020019081526020016000206005015481145b6117e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c69707065722f696e73756666696369656e742d696e63726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119e857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000888152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561197a57600080fd5b505af115801561198e573d6000803e3d6000fd5b50505050336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008881526020019081526020016000206000015485036040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611b1357600080fd5b505af1158015611b27573d6000803e3d6000fd5b50505050806001600085815260200190815260200160002060000181905550611b6442600560009054906101000a900465ffffffffffff16612c5a565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600560009054906101000a900465ffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611cc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c69707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180611d33575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b611da5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1611611e4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548114611ed5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c69707065722f6e6f742d6d61746368696e672d626964000000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600501548114611f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f466c69707065722f74656e642d6e6f742d66696e69736865640000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600101548210611feb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f466c69707065722f6c6f742d6e6f742d6c6f776572000000000000000000000081525060200191505060405180910390fd5b6120136001600085815260200190815260200160002060010154670de0b6b3a7640000612c84565b61201f60045484612c84565b1115612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c69707065722f696e73756666696369656e742d646563726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461227d57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561220f57600080fd5b505af1158015612223573d6000803e3d6000fd5b50505050336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e600354306001600088815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686600160008a815260200190815260200160002060010154036040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b1580156123b257600080fd5b505af11580156123c6573d6000803e3d6000fd5b5050505081600160008581526020019081526020016000206001018190555061240342600560009054906101000a900465ffffffffffff16612c5a565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60045481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461265b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60035481565b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161415801561279d5750426001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16108061279c57504260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff16105b5b61280f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c69707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e600354306001600086815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000878152602001908152602001600020600101546040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561294257600080fd5b505af1158015612956573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600582016000905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600560069054906101000a900465ffffffffffff1681565b60065481565b4260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1610612b28576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c69707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614612bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c69707065722f6269642d616c72656164792d706c6163656400000000000081525060200191505060405180910390fd5b612bec42600560069054906101000a900465ffffffffffff16612c5a565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60008265ffffffffffff1682840191508165ffffffffffff161015612c7e57600080fd5b92915050565b600080821480612ca15750828283850292508281612c9e57fe5b04145b612caa57600080fd5b9291505056fea265627a7a723158205bf8d8db250074722a9a8897ef6594c97ba781ee0b5215bd97c249a718d9ee2a64736f6c634300050c0032") - - syntax Bytes ::= "Flopper_bin" [macro] - // -------------------------------------- - rule Flopper_bin => #parseByteStack("0x6080604052670e92596fd62900006004556714d1120d7b160000600555612a30600660006101000a81548165ffffffffffff021916908365ffffffffffff1602179055506202a3006006806101000a81548165ffffffffffff021916908365ffffffffffff160217905550600060075534801561007b57600080fd5b5060405161242c38038061242c8339818101604052604081101561009e57600080fd5b81019080805190602001909291908051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016008819055505050612294806101986000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637d780d82116100ad578063bf353dbb11610071578063bf353dbb146104e7578063c959c42b1461053f578063cfc4af551461056d578063cfdd33021461059b578063fc7b6aee146105b95761012c565b80637d780d82146103dd5780639361266c146103fb578063957aa58c146104195780639c52a7f114610437578063b7e9cd241461047b5761012c565b80635ff3a382116100f45780635ff3a382146102b9578063626cb3c5146102fb57806365fae35e1461034557806369245009146103895780637bd2bea7146103935761012c565b806326e027f11461013157806329ae81141461015f57806336569e77146101975780634423c5f1146101e15780634e8b1dd51461028b575b600080fd5b61015d6004803603602081101561014757600080fd5b81019080803590602001909291905050506105e7565b005b6101956004803603604081101561017557600080fd5b810190808035906020019092919080359060200190929190505050610950565b005b61019f610bb7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61020d600480360360208110156101f757600080fd5b8101908080359060200190929190505050610bdd565b604051808681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018365ffffffffffff1665ffffffffffff1681526020018265ffffffffffff1665ffffffffffff1681526020019550505050505060405180910390f35b610293610c57565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b6102f9600480360360608110156102cf57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610c6f565b005b610303611538565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103876004803603602081101561035b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061155e565b005b61039161168c565b005b61039b6117be565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e56117e4565b6040518082815260200191505060405180910390f35b6104036117ea565b6040518082815260200191505060405180910390f35b6104216117f0565b6040518082815260200191505060405180910390f35b6104796004803603602081101561044d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117f6565b005b6104d16004803603606081101561049157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611924565b6040518082815260200191505060405180910390f35b610529600480360360208110156104fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3f565b6040518082815260200191505060405180910390f35b61056b6004803603602081101561055557600080fd5b8101908080359060200190929190505050611c57565b005b610575611fad565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b6105a3611fc4565b6040518082815260200191505060405180910390f35b6105e5600480360360208110156105cf57600080fd5b8101908080359060200190929190505050611fca565b005b60006008541461065f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f466c6f707065722f7374696c6c2d6c697665000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610738576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c6f707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561088357600080fd5b505af1158015610897573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7f6265670000000000000000000000000000000000000000000000000000000000821415610a385780600481905550610b80565b7f7061640000000000000000000000000000000000000000000000000000000000821415610a6c5780600581905550610b7f565b7f74746c0000000000000000000000000000000000000000000000000000000000821415610abe5780600660006101000a81548165ffffffffffff021916908365ffffffffffff160217905550610b7e565b7f7461750000000000000000000000000000000000000000000000000000000000821415610b0f57806006806101000a81548165ffffffffffff021916908365ffffffffffff160217905550610b7d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f466c6f707065722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900465ffffffffffff169080600201601a9054906101000a900465ffffffffffff16905085565b600660009054906101000a900465ffffffffffff1681565b600160085414610ce7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610dc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c6f707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180610e2e575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b610ea0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c6f707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1611610f45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c6f707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548114610fd0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c6f707065722f6e6f742d6d61746368696e672d626964000000000000000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060010154821061105b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f466c6f707065722f6c6f742d6e6f742d6c6f776572000000000000000000000081525060200191505060405180910390fd5b6110836001600085815260200190815260200160002060010154670de0b6b3a76400006121ed565b61108f600454846121ed565b1115611103576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c6f707065722f696e73756666696369656e742d646563726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461148f57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561127f57600080fd5b505af1158015611293573d6000803e3d6000fd5b5050505060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614156114395760006001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632a1d2b3c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561135057600080fd5b505af1158015611364573d6000803e3d6000fd5b505050506040513d602081101561137a57600080fd5b810190808051906020019092919050505090506001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632506855a6113e98484612219565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561141f57600080fd5b505af1158015611433573d6000803e3d6000fd5b50505050505b336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8160016000858152602001908152602001600020600101819055506114c842600660009054906101000a900465ffffffffffff16612235565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611740576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600060088190555033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60055481565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160085414611a52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60075410611ae9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b6007600081546001019190508190559050816001600083815260200190815260200160002060000181905550826001600083815260200190815260200160002060010181905550836001600083815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611ba2426006809054906101000a900465ffffffffffff16612235565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff167f7e8881001566f9f89aedb9c5dc3d856a2b81e5235a8196413ed484be91cc0df682858560405180848152602001838152602001828152602001935050505060405180910390a29392505050565b60006020528060005260406000206000915090505481565b600160085414611ccf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614158015611d795750426001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161080611d7857504260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff16105b5b611deb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c6f707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f196001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000858152602001908152602001600020600101546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611ee057600080fd5b505af1158015611ef4573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6006809054906101000a900465ffffffffffff1681565b60075481565b4260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff161061206f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c6f707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c6f707065722f6269642d616c72656164792d706c6163656400000000000081525060200191505060405180910390fd5b670de0b6b3a764000061214060055460016000858152602001908152602001600020600101546121ed565b8161214757fe5b04600160008381526020019081526020016000206001018190555061217f426006809054906101000a900465ffffffffffff16612235565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60008082148061220a575082828385029250828161220757fe5b04145b61221357600080fd5b92915050565b60008183111561222b5781905061222f565b8290505b92915050565b60008265ffffffffffff1682840191508165ffffffffffff16101561225957600080fd5b9291505056fea265627a7a723158205e1409f4f0c0165ca7346388d0afdcca6757261ff7f56d1c76a3df8267f2bd0664736f6c634300050c0032") - - syntax Bytes ::= "Flopper_bin_runtime" [macro] - // ---------------------------------------------- - rule Flopper_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80637d780d82116100ad578063bf353dbb11610071578063bf353dbb146104e7578063c959c42b1461053f578063cfc4af551461056d578063cfdd33021461059b578063fc7b6aee146105b95761012c565b80637d780d82146103dd5780639361266c146103fb578063957aa58c146104195780639c52a7f114610437578063b7e9cd241461047b5761012c565b80635ff3a382116100f45780635ff3a382146102b9578063626cb3c5146102fb57806365fae35e1461034557806369245009146103895780637bd2bea7146103935761012c565b806326e027f11461013157806329ae81141461015f57806336569e77146101975780634423c5f1146101e15780634e8b1dd51461028b575b600080fd5b61015d6004803603602081101561014757600080fd5b81019080803590602001909291905050506105e7565b005b6101956004803603604081101561017557600080fd5b810190808035906020019092919080359060200190929190505050610950565b005b61019f610bb7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61020d600480360360208110156101f757600080fd5b8101908080359060200190929190505050610bdd565b604051808681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018365ffffffffffff1665ffffffffffff1681526020018265ffffffffffff1665ffffffffffff1681526020019550505050505060405180910390f35b610293610c57565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b6102f9600480360360608110156102cf57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610c6f565b005b610303611538565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103876004803603602081101561035b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061155e565b005b61039161168c565b005b61039b6117be565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e56117e4565b6040518082815260200191505060405180910390f35b6104036117ea565b6040518082815260200191505060405180910390f35b6104216117f0565b6040518082815260200191505060405180910390f35b6104796004803603602081101561044d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117f6565b005b6104d16004803603606081101561049157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611924565b6040518082815260200191505060405180910390f35b610529600480360360208110156104fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3f565b6040518082815260200191505060405180910390f35b61056b6004803603602081101561055557600080fd5b8101908080359060200190929190505050611c57565b005b610575611fad565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b6105a3611fc4565b6040518082815260200191505060405180910390f35b6105e5600480360360208110156105cf57600080fd5b8101908080359060200190929190505050611fca565b005b60006008541461065f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f466c6f707065722f7374696c6c2d6c697665000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610738576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c6f707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561088357600080fd5b505af1158015610897573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7f6265670000000000000000000000000000000000000000000000000000000000821415610a385780600481905550610b80565b7f7061640000000000000000000000000000000000000000000000000000000000821415610a6c5780600581905550610b7f565b7f74746c0000000000000000000000000000000000000000000000000000000000821415610abe5780600660006101000a81548165ffffffffffff021916908365ffffffffffff160217905550610b7e565b7f7461750000000000000000000000000000000000000000000000000000000000821415610b0f57806006806101000a81548165ffffffffffff021916908365ffffffffffff160217905550610b7d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f466c6f707065722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900465ffffffffffff169080600201601a9054906101000a900465ffffffffffff16905085565b600660009054906101000a900465ffffffffffff1681565b600160085414610ce7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610dc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c6f707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180610e2e575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b610ea0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c6f707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1611610f45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c6f707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548114610fd0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c6f707065722f6e6f742d6d61746368696e672d626964000000000000000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060010154821061105b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f466c6f707065722f6c6f742d6e6f742d6c6f776572000000000000000000000081525060200191505060405180910390fd5b6110836001600085815260200190815260200160002060010154670de0b6b3a76400006121ed565b61108f600454846121ed565b1115611103576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c6f707065722f696e73756666696369656e742d646563726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461148f57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561127f57600080fd5b505af1158015611293573d6000803e3d6000fd5b5050505060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614156114395760006001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632a1d2b3c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561135057600080fd5b505af1158015611364573d6000803e3d6000fd5b505050506040513d602081101561137a57600080fd5b810190808051906020019092919050505090506001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632506855a6113e98484612219565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561141f57600080fd5b505af1158015611433573d6000803e3d6000fd5b50505050505b336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8160016000858152602001908152602001600020600101819055506114c842600660009054906101000a900465ffffffffffff16612235565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611740576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600060088190555033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60055481565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160085414611a52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60075410611ae9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b6007600081546001019190508190559050816001600083815260200190815260200160002060000181905550826001600083815260200190815260200160002060010181905550836001600083815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611ba2426006809054906101000a900465ffffffffffff16612235565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff167f7e8881001566f9f89aedb9c5dc3d856a2b81e5235a8196413ed484be91cc0df682858560405180848152602001838152602001828152602001935050505060405180910390a29392505050565b60006020528060005260406000206000915090505481565b600160085414611ccf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614158015611d795750426001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161080611d7857504260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff16105b5b611deb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c6f707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f196001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000858152602001908152602001600020600101546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611ee057600080fd5b505af1158015611ef4573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6006809054906101000a900465ffffffffffff1681565b60075481565b4260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff161061206f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c6f707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c6f707065722f6269642d616c72656164792d706c6163656400000000000081525060200191505060405180910390fd5b670de0b6b3a764000061214060055460016000858152602001908152602001600020600101546121ed565b8161214757fe5b04600160008381526020019081526020016000206001018190555061217f426006809054906101000a900465ffffffffffff16612235565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60008082148061220a575082828385029250828161220757fe5b04145b61221357600080fd5b92915050565b60008183111561222b5781905061222f565b8290505b92915050565b60008265ffffffffffff1682840191508165ffffffffffff16101561225957600080fd5b9291505056fea265627a7a723158205e1409f4f0c0165ca7346388d0afdcca6757261ff7f56d1c76a3df8267f2bd0664736f6c634300050c0032") - - syntax Bytes ::= "Flapper_bin" [macro] - // -------------------------------------- - rule Flapper_bin => #parseByteStack("0x6080604052670e92596fd6290000600455612a30600560006101000a81548165ffffffffffff021916908365ffffffffffff1602179055506202a300600560066101000a81548165ffffffffffff021916908365ffffffffffff160217905550600060065534801561007057600080fd5b506040516124dd3803806124dd8339818101604052604081101561009357600080fd5b81019080805190602001909291908051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160078190555050506123508061018d6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063957aa58c116100a2578063c959c42b11610071578063c959c42b14610479578063ca40c419146104a7578063cfc4af55146104f3578063cfdd330214610521578063fc7b6aee1461053f57610116565b8063957aa58c146103915780639c52a7f1146103af578063a2f91af2146103f3578063bf353dbb1461042157610116565b80634b43ed12116100e95780634b43ed12146102755780634e8b1dd5146102b757806365fae35e146102e55780637bd2bea7146103295780637d780d821461037357610116565b806326e027f11461011b57806329ae81141461014957806336569e77146101815780634423c5f1146101cb575b600080fd5b6101476004803603602081101561013157600080fd5b810190808035906020019092919050505061056d565b005b61017f6004803603604081101561015f57600080fd5b8101908080359060200190929190803590602001909291905050506108b4565b005b610189610ae7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101f7600480360360208110156101e157600080fd5b8101908080359060200190929190505050610b0d565b604051808681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018365ffffffffffff1665ffffffffffff1681526020018265ffffffffffff1665ffffffffffff1681526020019550505050505060405180910390f35b6102b56004803603606081101561028b57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610b87565b005b6102bf6113d1565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b610327600480360360208110156102fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113e9565b005b610331611517565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61037b61153d565b6040518082815260200191505060405180910390f35b610399611543565b6040518082815260200191505060405180910390f35b6103f1600480360360208110156103c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611549565b005b61041f6004803603602081101561040957600080fd5b8101908080359060200190929190505050611677565b005b6104636004803603602081101561043757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185e565b6040518082815260200191505060405180910390f35b6104a56004803603602081101561048f57600080fd5b8101908080359060200190929190505050611876565b005b6104dd600480360360408110156104bd57600080fd5b810190808035906020019092919080359060200190929190505050611cd7565b6040518082815260200191505060405180910390f35b6104fb6120d0565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b6105296120e8565b6040518082815260200191505060405180910390f35b61056b6004803603602081101561055557600080fd5b81019080803590602001909291905050506120ee565b005b6000600754146105e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f466c61707065722f7374696c6c2d6c697665000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156106be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c61707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b306001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156107e757600080fd5b505af11580156107fb573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610968576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7f626567000000000000000000000000000000000000000000000000000000000082141561099c5780600481905550610ab0565b7f74746c00000000000000000000000000000000000000000000000000000000008214156109ee5780600560006101000a81548165ffffffffffff021916908365ffffffffffff160217905550610aaf565b7f7461750000000000000000000000000000000000000000000000000000000000821415610a405780600560066101000a81548165ffffffffffff021916908365ffffffffffff160217905550610aae565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f466c61707065722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900465ffffffffffff169080600201601a9054906101000a900465ffffffffffff16905085565b600160075414610bff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c61707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180610d46575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b610db8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c61707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1611610e5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c61707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600101548214610ee8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c61707065722f6c6f742d6e6f742d6d61746368696e67000000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548111610f73576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6269642d6e6f742d6869676865720000000000000000000081525060200191505060405180910390fd5b610f9560045460016000868152602001908152602001600020600001546122c5565b610fa782670de0b6b3a76400006122c5565b101561101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c61707065722f696e73756666696369656e742d696e63726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461121b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000888152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156111ad57600080fd5b505af11580156111c1573d6000803e3d6000fd5b50505050336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3330600160008881526020019081526020016000206000015485036040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b5050505080600160008581526020019081526020016000206000018190555061136142600560009054906101000a900465ffffffffffff166122f1565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600560009054906101000a900465ffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461149d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461172b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b6000600781905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3033846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561181057600080fd5b505af1158015611824573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b6001600754146118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16141580156119985750426001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16108061199757504260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff16105b5b611a0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c61707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b306001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600101546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611b3357600080fd5b505af1158015611b47573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac3060016000858152602001908152602001600020600001546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611c0a57600080fd5b505af1158015611c1e573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160075414611e05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60065410611e9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b6006600081546001019190508190559050816001600083815260200190815260200160002060000181905550826001600083815260200190815260200160002060010181905550336001600083815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f5642600560069054906101000a900465ffffffffffff166122f1565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561206b57600080fd5b505af115801561207f573d6000803e3d6000fd5b505050507fe6dde59cbc017becba89714a037778d234a84ce7f0a137487142a007e580d60981848460405180848152602001838152602001828152602001935050505060405180910390a192915050565b600560069054906101000a900465ffffffffffff1681565b60065481565b4260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1610612193576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c61707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614612239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c61707065722f6269642d616c72656164792d706c6163656400000000000081525060200191505060405180910390fd5b61225742600560069054906101000a900465ffffffffffff166122f1565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6000808214806122e257508282838502925082816122df57fe5b04145b6122eb57600080fd5b92915050565b60008265ffffffffffff1682840191508165ffffffffffff16101561231557600080fd5b9291505056fea265627a7a723158201acd0496ca3432003bac40639b3808573f9831f884ae4dc91d004d0deff68a7364736f6c634300050c0032") - - syntax Bytes ::= "Flapper_bin_runtime" [macro] - // ---------------------------------------------- - rule Flapper_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063957aa58c116100a2578063c959c42b11610071578063c959c42b14610479578063ca40c419146104a7578063cfc4af55146104f3578063cfdd330214610521578063fc7b6aee1461053f57610116565b8063957aa58c146103915780639c52a7f1146103af578063a2f91af2146103f3578063bf353dbb1461042157610116565b80634b43ed12116100e95780634b43ed12146102755780634e8b1dd5146102b757806365fae35e146102e55780637bd2bea7146103295780637d780d821461037357610116565b806326e027f11461011b57806329ae81141461014957806336569e77146101815780634423c5f1146101cb575b600080fd5b6101476004803603602081101561013157600080fd5b810190808035906020019092919050505061056d565b005b61017f6004803603604081101561015f57600080fd5b8101908080359060200190929190803590602001909291905050506108b4565b005b610189610ae7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101f7600480360360208110156101e157600080fd5b8101908080359060200190929190505050610b0d565b604051808681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018365ffffffffffff1665ffffffffffff1681526020018265ffffffffffff1665ffffffffffff1681526020019550505050505060405180910390f35b6102b56004803603606081101561028b57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610b87565b005b6102bf6113d1565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b610327600480360360208110156102fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113e9565b005b610331611517565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61037b61153d565b6040518082815260200191505060405180910390f35b610399611543565b6040518082815260200191505060405180910390f35b6103f1600480360360208110156103c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611549565b005b61041f6004803603602081101561040957600080fd5b8101908080359060200190929190505050611677565b005b6104636004803603602081101561043757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185e565b6040518082815260200191505060405180910390f35b6104a56004803603602081101561048f57600080fd5b8101908080359060200190929190505050611876565b005b6104dd600480360360408110156104bd57600080fd5b810190808035906020019092919080359060200190929190505050611cd7565b6040518082815260200191505060405180910390f35b6104fb6120d0565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b6105296120e8565b6040518082815260200191505060405180910390f35b61056b6004803603602081101561055557600080fd5b81019080803590602001909291905050506120ee565b005b6000600754146105e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f466c61707065722f7374696c6c2d6c697665000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156106be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c61707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b306001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156107e757600080fd5b505af11580156107fb573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610968576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7f626567000000000000000000000000000000000000000000000000000000000082141561099c5780600481905550610ab0565b7f74746c00000000000000000000000000000000000000000000000000000000008214156109ee5780600560006101000a81548165ffffffffffff021916908365ffffffffffff160217905550610aaf565b7f7461750000000000000000000000000000000000000000000000000000000000821415610a405780600560066101000a81548165ffffffffffff021916908365ffffffffffff160217905550610aae565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f466c61707065722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900465ffffffffffff169080600201601a9054906101000a900465ffffffffffff16905085565b600160075414610bff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c61707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180610d46575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b610db8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c61707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1611610e5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c61707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600101548214610ee8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c61707065722f6c6f742d6e6f742d6d61746368696e67000000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548111610f73576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6269642d6e6f742d6869676865720000000000000000000081525060200191505060405180910390fd5b610f9560045460016000868152602001908152602001600020600001546122c5565b610fa782670de0b6b3a76400006122c5565b101561101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c61707065722f696e73756666696369656e742d696e63726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461121b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000888152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156111ad57600080fd5b505af11580156111c1573d6000803e3d6000fd5b50505050336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3330600160008881526020019081526020016000206000015485036040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b5050505080600160008581526020019081526020016000206000018190555061136142600560009054906101000a900465ffffffffffff166122f1565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600560009054906101000a900465ffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461149d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461172b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b6000600781905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3033846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561181057600080fd5b505af1158015611824573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b6001600754146118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16141580156119985750426001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16108061199757504260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff16105b5b611a0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c61707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b306001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600101546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611b3357600080fd5b505af1158015611b47573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac3060016000858152602001908152602001600020600001546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611c0a57600080fd5b505af1158015611c1e573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160075414611e05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60065410611e9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b6006600081546001019190508190559050816001600083815260200190815260200160002060000181905550826001600083815260200190815260200160002060010181905550336001600083815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f5642600560069054906101000a900465ffffffffffff166122f1565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561206b57600080fd5b505af115801561207f573d6000803e3d6000fd5b505050507fe6dde59cbc017becba89714a037778d234a84ce7f0a137487142a007e580d60981848460405180848152602001838152602001828152602001935050505060405180910390a192915050565b600560069054906101000a900465ffffffffffff1681565b60065481565b4260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1610612193576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c61707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614612239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c61707065722f6269642d616c72656164792d706c6163656400000000000081525060200191505060405180910390fd5b61225742600560069054906101000a900465ffffffffffff166122f1565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6000808214806122e257508282838502925082816122df57fe5b04145b6122eb57600080fd5b92915050565b60008265ffffffffffff1682840191508165ffffffffffff16101561231557600080fd5b9291505056fea265627a7a723158201acd0496ca3432003bac40639b3808573f9831f884ae4dc91d004d0deff68a7364736f6c634300050c0032") - - syntax Bytes ::= "DSToken_bin" [macro] - // -------------------------------------- - rule DSToken_bin => #parseByteStack("0x60806040526012600655600060075534801561001a57600080fd5b5060405161241f38038061241f8339818101604052602081101561003d57600080fd5b8101908080519060200190929190505050600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806000819055505033600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a280600581905550506122e8806101376000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80637a9e5e4b116100de578063b753a98c11610097578063bf7e214f11610071578063bf7e214f14610684578063daea85c5146106ce578063dd62ed3e1461072a578063f2d5d56b146107a257610173565b8063b753a98c146105be578063bb35783b1461060c578063be9a65551461067a57610173565b80637a9e5e4b146104305780638da5cb5b1461047457806395d89b41146104be5780639dc29fac146104dc578063a0712d681461052a578063a9059cbb1461055857610173565b8063313ce56711610130578063313ce567146102ee57806340c10f191461030c57806342966c681461035a5780635ac801fe1461038857806370a08231146103b657806375f12b211461040e57610173565b806306fdde031461017857806307da68f514610196578063095ea7b3146101a057806313af40351461020657806318160ddd1461024a57806323b872dd14610268575b600080fd5b6101806107f0565b6040518082815260200191505060405180910390f35b61019e6107f6565b005b6101ec600480360360408110156101b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610970565b604051808215151515815260200191505060405180910390f35b6102486004803603602081101561021c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a07565b005b610252610b50565b6040518082815260200191505060405180910390f35b6102d46004803603606081101561027e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b59565b604051808215151515815260200191505060405180910390f35b6102f66110f1565b6040518082815260200191505060405180910390f35b6103586004803603604081101561032257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110f7565b005b6103866004803603602081101561037057600080fd5b810190808035906020019092919050505061130a565b005b6103b46004803603602081101561039e57600080fd5b8101908080359060200190929190505050611317565b005b6103f8600480360360208110156103cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113c1565b6040518082815260200191505060405180910390f35b61041661140a565b604051808215151515815260200191505060405180910390f35b6104726004803603602081101561044657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061141d565b005b61047c611566565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104c661158c565b6040518082815260200191505060405180910390f35b610528600480360360408110156104f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611592565b005b6105566004803603602081101561054057600080fd5b8101908080359060200190929190505050611b30565b005b6105a46004803603604081101561056e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b3d565b604051808215151515815260200191505060405180910390f35b61060a600480360360408110156105d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b52565b005b6106786004803603606081101561062257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b62565b005b610682611b73565b005b61068c611ced565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610710600480360360208110156106e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d13565b604051808215151515815260200191505060405180910390f35b61078c6004803603604081101561074057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dc9565b6040518082815260200191505060405180910390f35b6107ee600480360360408110156107b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e50565b005b60075481565b610824336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b610896576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46001600460146101000a81548160ff021916908315150217905550505050565b6000600460149054906101000a900460ff16156109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b6109ff83836120bb565b905092915050565b610a35336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b610aa7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615610bde576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610cb657507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15610eb45781600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610dad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f64732d746f6b656e2d696e73756666696369656e742d617070726f76616c000081525060200191505060405180910390fd5b610e33600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836121ad565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610f69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f64732d746f6b656e2d696e73756666696369656e742d62616c616e636500000081525060200191505060405180910390fd5b610fb2600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836121ad565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061103e600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612230565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b60065481565b611125336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b611197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b600460149054906101000a900460ff161561121a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b611263600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612230565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112b260005482612230565b6000819055508173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040518082815260200191505060405180910390a25050565b6113143382611592565b50565b611345336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b6113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b61144b336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b6114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6115c0336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b611632576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b600460149054906101000a900460ff16156116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561178d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b1561198b5780600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f64732d746f6b656e2d696e73756666696369656e742d617070726f76616c000081525060200191505060405180910390fd5b61190a600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826121ad565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611a40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f64732d746f6b656e2d696e73756666696369656e742d62616c616e636500000081525060200191505060405180910390fd5b611a89600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826121ad565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ad8600054826121ad565b6000819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a25050565b611b3a33826110f7565b50565b6000611b4a338484610b59565b905092915050565b611b5d338383610b59565b505050565b611b6d838383610b59565b50505050565b611ba1336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b611c13576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46000600460146101000a81548160ff021916908315150217905550505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460149054906101000a900460ff1615611d98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b611dc2827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6120bb565b9050919050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e5b823383610b59565b505050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e9f57600190506120b5565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611efe57600190506120b5565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f5e57600090506120b5565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561207757600080fd5b505afa15801561208b573d6000803e3d6000fd5b505050506040513d60208110156120a157600080fd5b810190808051906020019092919050505090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600082828403915081111561222a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b60008282840191508110156122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b9291505056fea265627a7a7231582042e4b52e52d434217b55a1ee90f412a7c49b1fd0406bb9ec1168e2a7c1fbad0e64736f6c634300050c0032") - - syntax Bytes ::= "DSToken_bin_runtime" [macro] - // ---------------------------------------------- - rule DSToken_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106101735760003560e01c80637a9e5e4b116100de578063b753a98c11610097578063bf7e214f11610071578063bf7e214f14610684578063daea85c5146106ce578063dd62ed3e1461072a578063f2d5d56b146107a257610173565b8063b753a98c146105be578063bb35783b1461060c578063be9a65551461067a57610173565b80637a9e5e4b146104305780638da5cb5b1461047457806395d89b41146104be5780639dc29fac146104dc578063a0712d681461052a578063a9059cbb1461055857610173565b8063313ce56711610130578063313ce567146102ee57806340c10f191461030c57806342966c681461035a5780635ac801fe1461038857806370a08231146103b657806375f12b211461040e57610173565b806306fdde031461017857806307da68f514610196578063095ea7b3146101a057806313af40351461020657806318160ddd1461024a57806323b872dd14610268575b600080fd5b6101806107f0565b6040518082815260200191505060405180910390f35b61019e6107f6565b005b6101ec600480360360408110156101b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610970565b604051808215151515815260200191505060405180910390f35b6102486004803603602081101561021c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a07565b005b610252610b50565b6040518082815260200191505060405180910390f35b6102d46004803603606081101561027e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b59565b604051808215151515815260200191505060405180910390f35b6102f66110f1565b6040518082815260200191505060405180910390f35b6103586004803603604081101561032257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110f7565b005b6103866004803603602081101561037057600080fd5b810190808035906020019092919050505061130a565b005b6103b46004803603602081101561039e57600080fd5b8101908080359060200190929190505050611317565b005b6103f8600480360360208110156103cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113c1565b6040518082815260200191505060405180910390f35b61041661140a565b604051808215151515815260200191505060405180910390f35b6104726004803603602081101561044657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061141d565b005b61047c611566565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104c661158c565b6040518082815260200191505060405180910390f35b610528600480360360408110156104f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611592565b005b6105566004803603602081101561054057600080fd5b8101908080359060200190929190505050611b30565b005b6105a46004803603604081101561056e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b3d565b604051808215151515815260200191505060405180910390f35b61060a600480360360408110156105d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b52565b005b6106786004803603606081101561062257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b62565b005b610682611b73565b005b61068c611ced565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610710600480360360208110156106e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d13565b604051808215151515815260200191505060405180910390f35b61078c6004803603604081101561074057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dc9565b6040518082815260200191505060405180910390f35b6107ee600480360360408110156107b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e50565b005b60075481565b610824336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b610896576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46001600460146101000a81548160ff021916908315150217905550505050565b6000600460149054906101000a900460ff16156109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b6109ff83836120bb565b905092915050565b610a35336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b610aa7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615610bde576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610cb657507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15610eb45781600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610dad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f64732d746f6b656e2d696e73756666696369656e742d617070726f76616c000081525060200191505060405180910390fd5b610e33600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836121ad565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610f69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f64732d746f6b656e2d696e73756666696369656e742d62616c616e636500000081525060200191505060405180910390fd5b610fb2600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836121ad565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061103e600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612230565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b60065481565b611125336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b611197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b600460149054906101000a900460ff161561121a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b611263600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612230565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112b260005482612230565b6000819055508173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040518082815260200191505060405180910390a25050565b6113143382611592565b50565b611345336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b6113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b61144b336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b6114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6115c0336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b611632576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b600460149054906101000a900460ff16156116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561178d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b1561198b5780600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f64732d746f6b656e2d696e73756666696369656e742d617070726f76616c000081525060200191505060405180910390fd5b61190a600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826121ad565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611a40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f64732d746f6b656e2d696e73756666696369656e742d62616c616e636500000081525060200191505060405180910390fd5b611a89600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826121ad565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ad8600054826121ad565b6000819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a25050565b611b3a33826110f7565b50565b6000611b4a338484610b59565b905092915050565b611b5d338383610b59565b505050565b611b6d838383610b59565b50505050565b611ba1336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b611c13576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46000600460146101000a81548160ff021916908315150217905550505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460149054906101000a900460ff1615611d98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b611dc2827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6120bb565b9050919050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e5b823383610b59565b505050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e9f57600190506120b5565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611efe57600190506120b5565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f5e57600090506120b5565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561207757600080fd5b505afa15801561208b573d6000803e3d6000fd5b505050506040513d60208110156120a157600080fd5b810190808051906020019092919050505090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600082828403915081111561222a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b60008282840191508110156122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b9291505056fea265627a7a7231582042e4b52e52d434217b55a1ee90f412a7c49b1fd0406bb9ec1168e2a7c1fbad0e64736f6c634300050c0032") - - syntax Bytes ::= "End_bin" [macro] - // ---------------------------------- - rule End_bin => #parseByteStack("0x608060405234801561001057600080fd5b5060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600681905550613a458061006c6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806389ea45d311610104578063d4e8be83116100a2578063e488181311610071578063e48818131461076a578063e6ee62aa146107b4578063ee6447b5146107f6578063fe8507c614610838576101cf565b8063d4e8be831461068e578063e1340a3d146106dc578063e2702fdc1461071e578063e2b0caef1461074c576101cf565b80639c52a7f1116100de5780639c52a7f114610562578063bf353dbb146105a6578063c83062c6146105fe578063c939ebfc1461062c576101cf565b806389ea45d31461049e5780639255f809146104ec578063957aa58c14610544576101cf565b8063626cb3c51161017157806365fae35e1161014b57806365fae35e146103d8578063692450091461041c5780636ea42555146104265780636f265b9314610454576101cf565b8063626cb3c51461032e57806363fad85e1461037857806364bd7013146103ba576101cf565b80634a10eaa6116101ad5780634a10eaa6146102745780634ba2363a146102a2578063503ecf06146102ec5780635920375c14610324576101cf565b80630dca59c1146101d457806329ae8114146101f257806336569e771461022a575b600080fd5b6101dc610870565b6040518082815260200191505060405180910390f35b6102286004803603604081101561020857600080fd5b810190808035906020019092919080359060200190929190505050610876565b005b610232610a7b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102a06004803603602081101561028a57600080fd5b8101908080359060200190929190505050610aa1565b005b6102aa610d4c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103226004803603604081101561030257600080fd5b810190808035906020019092919080359060200190929190505050610d72565b005b61032c611665565b005b610336611a29565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103a46004803603602081101561038e57600080fd5b8101908080359060200190929190505050611a4f565b6040518082815260200191505060405180910390f35b6103c2611a67565b6040518082815260200191505060405180910390f35b61041a600480360360208110156103ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a6d565b005b610424611b9b565b005b6104526004803603602081101561043c57600080fd5b8101908080359060200190929190505050611f95565b005b61045c6121fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104ea600480360360408110156104b457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612222565b005b61052e6004803603602081101561050257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612754565b6040518082815260200191505060405180910390f35b61054c61276c565b6040518082815260200191505060405180910390f35b6105a46004803603602081101561057857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612772565b005b6105e8600480360360208110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128a0565b6040518082815260200191505060405180910390f35b61062a6004803603602081101561061457600080fd5b81019080803590602001909291905050506128b8565b005b6106786004803603604081101561064257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cc7565b6040518082815260200191505060405180910390f35b6106da600480360360408110156106a457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cec565b005b610708600480360360208110156106f257600080fd5b81019080803590602001909291905050506130e7565b6040518082815260200191505060405180910390f35b61074a6004803603602081101561073457600080fd5b81019080803590602001909291905050506130ff565b005b610754613536565b6040518082815260200191505060405180910390f35b61077261353c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107e0600480360360208110156107ca57600080fd5b8101908080359060200190929190505050613562565b6040518082815260200191505060405180910390f35b6108226004803603602081101561080c57600080fd5b810190808035906020019092919050505061357a565b6040518082815260200191505060405180910390f35b61086e6004803603604081101561084e57600080fd5b810190808035906020019092919080359060200190929190505050613592565b005b60095481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461092a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600654146109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f77616974000000000000000000000000000000000000000000000000000000008214156109d65780600881905550610a44565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009541415610b1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f456e642f646562742d7a65726f0000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600d60008381526020019081526020016000205414610ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f6669782d696c6b2d616c72656164792d646566696e6564000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36836040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b505050506040513d60a0811015610c4457600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050505050509150506000610cbe610ca5600c6000868152602001908152602001600020548461391f565b600a60008681526020019081526020016000205461391f565b9050610cfd610cf5610ce383600b600088815260200190815260200160002054613948565b6b033b2e3c9fd0803ce8000000613962565b60095461398e565b600d60008581526020019081526020016000208190555050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a6000848152602001908152602001600020541415610dfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f456e642f7461672d696c6b2d6e6f742d646566696e656400000000000000000081525060200191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36846040518263ffffffff1660e01b815260040180828152602001915050606060405180830381600087803b158015610e7357600080fd5b505af1158015610e87573d6000803e3d6000fd5b505050506040513d6060811015610e9d57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050905060008190506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36866040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b158015610f4257600080fd5b505af1158015610f56573d6000803e3d6000fd5b505050506040513d60a0811015610f6c57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050505050509150506000806000808573ffffffffffffffffffffffffffffffffffffffff16634423c5f1896040518263ffffffff1660e01b8152600401808281526020019150506101006040518083038186803b15801561100357600080fd5b505afa158015611017573d6000803e3d6000fd5b505050506040513d61010081101561102e57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050975050965050505093509350600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156111b257600080fd5b505af11580156111c6573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156112c957600080fd5b505af11580156112dd573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3b22fc4876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561138257600080fd5b505af1158015611396573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff166326e027f1896040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156113ed57600080fd5b505af1158015611401573d6000803e3d6000fd5b50505050600085828161141057fe5b049050611430600c60008c815260200190815260200160002054826139b7565b600c60008c81526020019081526020016000208190555060008412158015611459575060008112155b6114cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f408b8530600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689876040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b15801561160e57600080fd5b505af1158015611622573d6000803e3d6000fd5b5050505050505050505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b6000600654146116dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f456e642f7374696c6c2d6c69766500000000000000000000000000000000000081525060200191505060405180910390fd5b600060095414611755576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f456e642f646562742d6e6f742d7a65726f00000000000000000000000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561181857600080fd5b505afa15801561182c573d6000803e3d6000fd5b505050506040513d602081101561184257600080fd5b8101908080519060200190929190505050146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f456e642f737572706c75732d6e6f742d7a65726f00000000000000000000000081525060200191505060405180910390fd5b6118d46007546008546139b7565b421015611949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f456e642f776169742d6e6f742d66696e6973686564000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dca59c16040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156119b357600080fd5b505af11580156119c7573d6000803e3d6000fd5b505050506040513d60208110156119dd57600080fd5b81019080805190602001909291905050506009819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d6020528060005260406000206000915090505481565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611b21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611c4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600160065414611cc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b600060068190555042600781905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611dc257600080fd5b505af1158015611dd6573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e4457600080fd5b505af1158015611e58573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ec657600080fd5b505af1158015611eda573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611f4857600080fd5b505af1158015611f5c573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b6000600954141561200e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f456e642f646562742d7a65726f0000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b33600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612086856b033b2e3c9fd0803ce8000000613962565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561212257600080fd5b505af1158015612136573d6000803e3d6000fd5b50505050612183600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139b7565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60008481526020019081526020016000205414156122ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f456e642f7461672d696c6b2d6e6f742d646566696e656400000000000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36846040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b15801561232357600080fd5b505af1158015612337573d6000803e3d6000fd5b505050506040513d60a081101561234d57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050505050915050600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632424be5c86866040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506040805180830381600087803b15801561243757600080fd5b505af115801561244b573d6000803e3d6000fd5b505050506040513d604081101561246157600080fd5b8101908080519060200190929190805190602001909291905050509150915060006124a861248f838661391f565b600a60008981526020019081526020016000205461391f565b905060006124b684836139d1565b90506124de600b6000898152602001908152602001600020546124d98484613948565b6139b7565b600b6000898152602001908152602001600020819055507f8000000000000000000000000000000000000000000000000000000000000000811115801561254557507f80000000000000000000000000000000000000000000000000000000000000008311155b6125b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f40888830600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686600003896000036040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b15801561270057600080fd5b505af1158015612714573d6000803e3d6000fd5b5050505050505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600e6020528060005260406000206000915090505481565b60065481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612826576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b600060065414612930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f456e642f7374696c6c2d6c69766500000000000000000000000000000000000081525060200191505060405180910390fd5b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632424be5c84336040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506040805180830381600087803b1580156129db57600080fd5b505af11580156129ef573d6000803e3d6000fd5b505050506040513d6040811015612a0557600080fd5b8101908080519060200190929190805190602001909291905050509150915060008114612a9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f456e642f6172742d6e6f742d7a65726f0000000000000000000000000000000081525060200191505060405180910390fd5b7f8000000000000000000000000000000000000000000000000000000000000000821115612b30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f40843333600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168760000360006040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b158015612c7757600080fd5b505af1158015612c8b573d6000803e3d6000fd5b5050505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600f602052816000526040600020602052806000526040600020600091509150505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600160065414612e18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f7661740000000000000000000000000000000000000000000000000000000000821415612e865780600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130b0565b7f6361740000000000000000000000000000000000000000000000000000000000821415612ef45780600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130af565b7f766f770000000000000000000000000000000000000000000000000000000000821415612f625780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130ae565b7f706f740000000000000000000000000000000000000000000000000000000000821415612fd05780600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130ad565b7f73706f740000000000000000000000000000000000000000000000000000000082141561303e5780600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130ac565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600c6020528060005260406000206000915090505481565b600060065414613177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f456e642f7374696c6c2d6c69766500000000000000000000000000000000000081525060200191505060405180910390fd5b6000600a60008381526020019081526020016000205414613200576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f7461672d696c6b2d616c72656164792d646566696e6564000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36826040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b15801561327557600080fd5b505af1158015613289573d6000803e3d6000fd5b505050506040513d60a081101561329f57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505090919250909150905050600c600083815260200190815260200160002060008291905055506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36836040518263ffffffff1660e01b815260040180828152602001915050604080518083038186803b15801561337157600080fd5b505afa158015613385573d6000803e3d6000fd5b505050506040513d604081101561339b57600080fd5b8101908080519060200190929190805190602001909291905050505090506134e8600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663495d32cb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561342457600080fd5b505afa158015613438573d6000803e3d6000fd5b505050506040513d602081101561344e57600080fd5b81019080805190602001909291905050508273ffffffffffffffffffffffffffffffffffffffff166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b1580156134a557600080fd5b505afa1580156134b9573d6000803e3d6000fd5b505050506040513d60208110156134cf57600080fd5b810190808051906020019092919050505060001c6139eb565b600a600084815260200190815260200160002081905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60075481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b6000600d600084815260200190815260200160002054141561361c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f456e642f6669782d696c6b2d6e6f742d646566696e656400000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e83303361367a86600d60008a81526020019081526020016000205461391f565b6040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561371d57600080fd5b505af1158015613731573d6000803e3d6000fd5b5050505061378f600f600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139b7565b600f600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156138e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f456e642f696e73756666696369656e742d6261672d62616c616e63650000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60006b033b2e3c9fd0803ce80000006139388484613962565b8161393f57fe5b04905092915050565b600082828403915081111561395c57600080fd5b92915050565b60008082148061397f575082828385029250828161397c57fe5b04145b61398857600080fd5b92915050565b6000816139a7846b033b2e3c9fd0803ce8000000613962565b816139ae57fe5b04905092915050565b60008183019050828110156139cb57600080fd5b92915050565b6000818311156139e157816139e3565b825b905092915050565b600081613a0084670de0b6b3a7640000613962565b81613a0757fe5b0490509291505056fea265627a7a72315820264a0ce72bca160075b6a5de4f272b4d2dd05f4166ae5536ffb13338378412bc64736f6c634300050c0032") - - syntax Bytes ::= "End_bin_runtime" [macro] - // ------------------------------------------ - rule End_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806389ea45d311610104578063d4e8be83116100a2578063e488181311610071578063e48818131461076a578063e6ee62aa146107b4578063ee6447b5146107f6578063fe8507c614610838576101cf565b8063d4e8be831461068e578063e1340a3d146106dc578063e2702fdc1461071e578063e2b0caef1461074c576101cf565b80639c52a7f1116100de5780639c52a7f114610562578063bf353dbb146105a6578063c83062c6146105fe578063c939ebfc1461062c576101cf565b806389ea45d31461049e5780639255f809146104ec578063957aa58c14610544576101cf565b8063626cb3c51161017157806365fae35e1161014b57806365fae35e146103d8578063692450091461041c5780636ea42555146104265780636f265b9314610454576101cf565b8063626cb3c51461032e57806363fad85e1461037857806364bd7013146103ba576101cf565b80634a10eaa6116101ad5780634a10eaa6146102745780634ba2363a146102a2578063503ecf06146102ec5780635920375c14610324576101cf565b80630dca59c1146101d457806329ae8114146101f257806336569e771461022a575b600080fd5b6101dc610870565b6040518082815260200191505060405180910390f35b6102286004803603604081101561020857600080fd5b810190808035906020019092919080359060200190929190505050610876565b005b610232610a7b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102a06004803603602081101561028a57600080fd5b8101908080359060200190929190505050610aa1565b005b6102aa610d4c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103226004803603604081101561030257600080fd5b810190808035906020019092919080359060200190929190505050610d72565b005b61032c611665565b005b610336611a29565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103a46004803603602081101561038e57600080fd5b8101908080359060200190929190505050611a4f565b6040518082815260200191505060405180910390f35b6103c2611a67565b6040518082815260200191505060405180910390f35b61041a600480360360208110156103ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a6d565b005b610424611b9b565b005b6104526004803603602081101561043c57600080fd5b8101908080359060200190929190505050611f95565b005b61045c6121fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104ea600480360360408110156104b457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612222565b005b61052e6004803603602081101561050257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612754565b6040518082815260200191505060405180910390f35b61054c61276c565b6040518082815260200191505060405180910390f35b6105a46004803603602081101561057857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612772565b005b6105e8600480360360208110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128a0565b6040518082815260200191505060405180910390f35b61062a6004803603602081101561061457600080fd5b81019080803590602001909291905050506128b8565b005b6106786004803603604081101561064257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cc7565b6040518082815260200191505060405180910390f35b6106da600480360360408110156106a457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cec565b005b610708600480360360208110156106f257600080fd5b81019080803590602001909291905050506130e7565b6040518082815260200191505060405180910390f35b61074a6004803603602081101561073457600080fd5b81019080803590602001909291905050506130ff565b005b610754613536565b6040518082815260200191505060405180910390f35b61077261353c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107e0600480360360208110156107ca57600080fd5b8101908080359060200190929190505050613562565b6040518082815260200191505060405180910390f35b6108226004803603602081101561080c57600080fd5b810190808035906020019092919050505061357a565b6040518082815260200191505060405180910390f35b61086e6004803603604081101561084e57600080fd5b810190808035906020019092919080359060200190929190505050613592565b005b60095481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461092a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600654146109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f77616974000000000000000000000000000000000000000000000000000000008214156109d65780600881905550610a44565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009541415610b1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f456e642f646562742d7a65726f0000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600d60008381526020019081526020016000205414610ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f6669782d696c6b2d616c72656164792d646566696e6564000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36836040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b505050506040513d60a0811015610c4457600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050505050509150506000610cbe610ca5600c6000868152602001908152602001600020548461391f565b600a60008681526020019081526020016000205461391f565b9050610cfd610cf5610ce383600b600088815260200190815260200160002054613948565b6b033b2e3c9fd0803ce8000000613962565b60095461398e565b600d60008581526020019081526020016000208190555050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a6000848152602001908152602001600020541415610dfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f456e642f7461672d696c6b2d6e6f742d646566696e656400000000000000000081525060200191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36846040518263ffffffff1660e01b815260040180828152602001915050606060405180830381600087803b158015610e7357600080fd5b505af1158015610e87573d6000803e3d6000fd5b505050506040513d6060811015610e9d57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050905060008190506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36866040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b158015610f4257600080fd5b505af1158015610f56573d6000803e3d6000fd5b505050506040513d60a0811015610f6c57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050505050509150506000806000808573ffffffffffffffffffffffffffffffffffffffff16634423c5f1896040518263ffffffff1660e01b8152600401808281526020019150506101006040518083038186803b15801561100357600080fd5b505afa158015611017573d6000803e3d6000fd5b505050506040513d61010081101561102e57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050975050965050505093509350600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156111b257600080fd5b505af11580156111c6573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156112c957600080fd5b505af11580156112dd573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3b22fc4876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561138257600080fd5b505af1158015611396573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff166326e027f1896040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156113ed57600080fd5b505af1158015611401573d6000803e3d6000fd5b50505050600085828161141057fe5b049050611430600c60008c815260200190815260200160002054826139b7565b600c60008c81526020019081526020016000208190555060008412158015611459575060008112155b6114cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f408b8530600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689876040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b15801561160e57600080fd5b505af1158015611622573d6000803e3d6000fd5b5050505050505050505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b6000600654146116dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f456e642f7374696c6c2d6c69766500000000000000000000000000000000000081525060200191505060405180910390fd5b600060095414611755576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f456e642f646562742d6e6f742d7a65726f00000000000000000000000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561181857600080fd5b505afa15801561182c573d6000803e3d6000fd5b505050506040513d602081101561184257600080fd5b8101908080519060200190929190505050146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f456e642f737572706c75732d6e6f742d7a65726f00000000000000000000000081525060200191505060405180910390fd5b6118d46007546008546139b7565b421015611949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f456e642f776169742d6e6f742d66696e6973686564000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dca59c16040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156119b357600080fd5b505af11580156119c7573d6000803e3d6000fd5b505050506040513d60208110156119dd57600080fd5b81019080805190602001909291905050506009819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d6020528060005260406000206000915090505481565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611b21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611c4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600160065414611cc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b600060068190555042600781905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611dc257600080fd5b505af1158015611dd6573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e4457600080fd5b505af1158015611e58573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ec657600080fd5b505af1158015611eda573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611f4857600080fd5b505af1158015611f5c573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b6000600954141561200e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f456e642f646562742d7a65726f0000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b33600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612086856b033b2e3c9fd0803ce8000000613962565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561212257600080fd5b505af1158015612136573d6000803e3d6000fd5b50505050612183600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139b7565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60008481526020019081526020016000205414156122ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f456e642f7461672d696c6b2d6e6f742d646566696e656400000000000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36846040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b15801561232357600080fd5b505af1158015612337573d6000803e3d6000fd5b505050506040513d60a081101561234d57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050505050915050600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632424be5c86866040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506040805180830381600087803b15801561243757600080fd5b505af115801561244b573d6000803e3d6000fd5b505050506040513d604081101561246157600080fd5b8101908080519060200190929190805190602001909291905050509150915060006124a861248f838661391f565b600a60008981526020019081526020016000205461391f565b905060006124b684836139d1565b90506124de600b6000898152602001908152602001600020546124d98484613948565b6139b7565b600b6000898152602001908152602001600020819055507f8000000000000000000000000000000000000000000000000000000000000000811115801561254557507f80000000000000000000000000000000000000000000000000000000000000008311155b6125b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f40888830600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686600003896000036040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b15801561270057600080fd5b505af1158015612714573d6000803e3d6000fd5b5050505050505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600e6020528060005260406000206000915090505481565b60065481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612826576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b600060065414612930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f456e642f7374696c6c2d6c69766500000000000000000000000000000000000081525060200191505060405180910390fd5b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632424be5c84336040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506040805180830381600087803b1580156129db57600080fd5b505af11580156129ef573d6000803e3d6000fd5b505050506040513d6040811015612a0557600080fd5b8101908080519060200190929190805190602001909291905050509150915060008114612a9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f456e642f6172742d6e6f742d7a65726f0000000000000000000000000000000081525060200191505060405180910390fd5b7f8000000000000000000000000000000000000000000000000000000000000000821115612b30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f40843333600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168760000360006040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b158015612c7757600080fd5b505af1158015612c8b573d6000803e3d6000fd5b5050505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600f602052816000526040600020602052806000526040600020600091509150505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600160065414612e18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f7661740000000000000000000000000000000000000000000000000000000000821415612e865780600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130b0565b7f6361740000000000000000000000000000000000000000000000000000000000821415612ef45780600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130af565b7f766f770000000000000000000000000000000000000000000000000000000000821415612f625780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130ae565b7f706f740000000000000000000000000000000000000000000000000000000000821415612fd05780600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130ad565b7f73706f740000000000000000000000000000000000000000000000000000000082141561303e5780600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130ac565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600c6020528060005260406000206000915090505481565b600060065414613177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f456e642f7374696c6c2d6c69766500000000000000000000000000000000000081525060200191505060405180910390fd5b6000600a60008381526020019081526020016000205414613200576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f7461672d696c6b2d616c72656164792d646566696e6564000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36826040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b15801561327557600080fd5b505af1158015613289573d6000803e3d6000fd5b505050506040513d60a081101561329f57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505090919250909150905050600c600083815260200190815260200160002060008291905055506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36836040518263ffffffff1660e01b815260040180828152602001915050604080518083038186803b15801561337157600080fd5b505afa158015613385573d6000803e3d6000fd5b505050506040513d604081101561339b57600080fd5b8101908080519060200190929190805190602001909291905050505090506134e8600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663495d32cb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561342457600080fd5b505afa158015613438573d6000803e3d6000fd5b505050506040513d602081101561344e57600080fd5b81019080805190602001909291905050508273ffffffffffffffffffffffffffffffffffffffff166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b1580156134a557600080fd5b505afa1580156134b9573d6000803e3d6000fd5b505050506040513d60208110156134cf57600080fd5b810190808051906020019092919050505060001c6139eb565b600a600084815260200190815260200160002081905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60075481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b6000600d600084815260200190815260200160002054141561361c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f456e642f6669782d696c6b2d6e6f742d646566696e656400000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e83303361367a86600d60008a81526020019081526020016000205461391f565b6040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561371d57600080fd5b505af1158015613731573d6000803e3d6000fd5b5050505061378f600f600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139b7565b600f600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156138e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f456e642f696e73756666696369656e742d6261672d62616c616e63650000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60006b033b2e3c9fd0803ce80000006139388484613962565b8161393f57fe5b04905092915050565b600082828403915081111561395c57600080fd5b92915050565b60008082148061397f575082828385029250828161397c57fe5b04145b61398857600080fd5b92915050565b6000816139a7846b033b2e3c9fd0803ce8000000613962565b816139ae57fe5b04905092915050565b60008183019050828110156139cb57600080fd5b92915050565b6000818311156139e157816139e3565b825b905092915050565b600081613a0084670de0b6b3a7640000613962565b81613a0757fe5b0490509291505056fea265627a7a72315820264a0ce72bca160075b6a5de4f272b4d2dd05f4166ae5536ffb13338378412bc64736f6c634300050c0032") - - syntax Bytes ::= "DSValue_bin" [macro] - // -------------------------------------- - rule DSValue_bin => #parseByteStack("0x608060405233600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a2610b3a806100976000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80637a9e5e4b1161005b5780637a9e5e4b146101465780638da5cb5b1461018a578063ac4c25b2146101d4578063bf7e214f146101de57610088565b806313af40351461008d5780631504460f146100d157806357de26a4146100ff57806359e02dd71461011d575b600080fd5b6100cf600480360360208110156100a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610228565b005b6100fd600480360360208110156100e757600080fd5b8101908080359060200190929190505050610371565b005b6101076104f2565b6040518082815260200191505060405180910390f35b610125610582565b60405180838152602001821515151581526020019250505060405180910390f35b6101886004803603602081101561015c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105a0565b005b6101926106e7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101dc61070d565b005b6101e6610887565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610256336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b6102c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a4610459336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b6104cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b8360028190555060018060146101000a81548160ff02191690831515021790555050505050565b60008060006104ff610582565b80925081935050508061057a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f68617a2d6e6f740000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b819250505090565b600080600254600160149054906101000a900460ff16915091509091565b6105ce336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b610640576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46107f5336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b610867576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b6000600160146101000a81548160ff021916908315150217905550505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108eb5760019050610aff565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561094a5760019050610aff565b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156109a95760009050610aff565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015610ac157600080fd5b505afa158015610ad5573d6000803e3d6000fd5b505050506040513d6020811015610aeb57600080fd5b810190808051906020019092919050505090505b9291505056fea265627a7a7231582014bd5fd030ff737e59255d9fa6f83c502a9822c8743b9de6b077101da834e23064736f6c634300050c0032") - - syntax Bytes ::= "DSValue_bin_runtime" [macro] - // ---------------------------------------------- - rule DSValue_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106100885760003560e01c80637a9e5e4b1161005b5780637a9e5e4b146101465780638da5cb5b1461018a578063ac4c25b2146101d4578063bf7e214f146101de57610088565b806313af40351461008d5780631504460f146100d157806357de26a4146100ff57806359e02dd71461011d575b600080fd5b6100cf600480360360208110156100a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610228565b005b6100fd600480360360208110156100e757600080fd5b8101908080359060200190929190505050610371565b005b6101076104f2565b6040518082815260200191505060405180910390f35b610125610582565b60405180838152602001821515151581526020019250505060405180910390f35b6101886004803603602081101561015c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105a0565b005b6101926106e7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101dc61070d565b005b6101e6610887565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610256336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b6102c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a4610459336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b6104cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b8360028190555060018060146101000a81548160ff02191690831515021790555050505050565b60008060006104ff610582565b80925081935050508061057a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f68617a2d6e6f740000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b819250505090565b600080600254600160149054906101000a900460ff16915091509091565b6105ce336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b610640576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46107f5336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b610867576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b6000600160146101000a81548160ff021916908315150217905550505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108eb5760019050610aff565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561094a5760019050610aff565b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156109a95760009050610aff565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015610ac157600080fd5b505afa158015610ad5573d6000803e3d6000fd5b505050506040513d6020811015610aeb57600080fd5b810190808051906020019092919050505090505b9291505056fea265627a7a7231582014bd5fd030ff737e59255d9fa6f83c502a9822c8743b9de6b077101da834e23064736f6c634300050c0032") - - syntax Bytes ::= "Spotter_bin" [macro] - // -------------------------------------- - rule Spotter_bin => #parseByteStack("0x608060405234801561001057600080fd5b506040516111893803806111898339818101604052602081101561003357600080fd5b810190808051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506b033b2e3c9fd0803ce8000000600381905550600160048190555050611095806100f46000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80636924500911610071578063692450091461020d578063957aa58c146102175780639c52a7f114610235578063bf353dbb14610279578063d9638d36146102d1578063ebecb39d14610346576100b4565b80631504460f146100b95780631a0b287e146100e757806329ae81141461012957806336569e7714610161578063495d32cb146101ab57806365fae35e146101c9575b600080fd5b6100e5600480360360208110156100cf57600080fd5b810190808035906020019092919050505061039e565b005b610127600480360360608110156100fd57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506105bd565b005b61015f6004803603604081101561013f57600080fd5b8101908080359060200190929190803590602001909291905050506107d7565b005b6101696109dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101b3610a02565b6040518082815260200191505060405180910390f35b61020b600480360360208110156101df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a08565b005b610215610b36565b005b61021f610c27565b6040518082815260200191505060405180910390f35b6102776004803603602081101561024b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c2d565b005b6102bb6004803603602081101561028f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d5b565b6040518082815260200191505060405180910390f35b6102fd600480360360208110156102e757600080fd5b8101908080359060200190929190505050610d73565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b61039c6004803603606081101561035c57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610db7565b005b6000806001600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359e02dd76040518163ffffffff1660e01b81526004016040805180830381600087803b15801561041e57600080fd5b505af1158015610432573d6000803e3d6000fd5b505050506040513d604081101561044857600080fd5b810190808051906020019092919080519060200190929190505050915091506000816104755760006104b1565b6104b061049461048c8560001c633b9aca0061100b565b600354611037565b6001600087815260200190815260200160002060010154611037565b5b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a0b287e85836040518363ffffffff1660e01b815260040180838152602001807f73706f740000000000000000000000000000000000000000000000000000000081525060200182815260200192505050600060405180830381600087803b15801561055857600080fd5b505af115801561056c573d6000803e3d6000fd5b505050507fdfd7467e425a8107cfd368d159957692c25085aacbcf5228ce08f10f2146486e84848360405180848152602001838152602001828152602001935050505060405180910390a150505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610671576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b6001600454146106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f53706f747465722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7f6d617400000000000000000000000000000000000000000000000000000000008214156107315780600160008581526020019081526020016000206001018190555061079f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53706f747465722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461088b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160045414610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f53706f747465722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7f706172000000000000000000000000000000000000000000000000000000000082141561093757806003819055506109a5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53706f747465722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610abc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610bea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60006004819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60045481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610ce1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160045414610ee3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f53706f747465722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7f7069700000000000000000000000000000000000000000000000000000000000821415610f6557806001600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fd3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53706f747465722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600080821480611028575082828385029250828161102557fe5b04145b61103157600080fd5b92915050565b600081611050846b033b2e3c9fd0803ce800000061100b565b8161105757fe5b0490509291505056fea265627a7a72315820b999c6bc8140aa3d6542c1d3f42a7064630777fe8352e66ff244c3e2d8969cfe64736f6c634300050c0032") - - syntax Bytes ::= "Spotter_bin_runtime" [macro] - // ---------------------------------------------- - rule Spotter_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80636924500911610071578063692450091461020d578063957aa58c146102175780639c52a7f114610235578063bf353dbb14610279578063d9638d36146102d1578063ebecb39d14610346576100b4565b80631504460f146100b95780631a0b287e146100e757806329ae81141461012957806336569e7714610161578063495d32cb146101ab57806365fae35e146101c9575b600080fd5b6100e5600480360360208110156100cf57600080fd5b810190808035906020019092919050505061039e565b005b610127600480360360608110156100fd57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506105bd565b005b61015f6004803603604081101561013f57600080fd5b8101908080359060200190929190803590602001909291905050506107d7565b005b6101696109dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101b3610a02565b6040518082815260200191505060405180910390f35b61020b600480360360208110156101df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a08565b005b610215610b36565b005b61021f610c27565b6040518082815260200191505060405180910390f35b6102776004803603602081101561024b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c2d565b005b6102bb6004803603602081101561028f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d5b565b6040518082815260200191505060405180910390f35b6102fd600480360360208110156102e757600080fd5b8101908080359060200190929190505050610d73565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b61039c6004803603606081101561035c57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610db7565b005b6000806001600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359e02dd76040518163ffffffff1660e01b81526004016040805180830381600087803b15801561041e57600080fd5b505af1158015610432573d6000803e3d6000fd5b505050506040513d604081101561044857600080fd5b810190808051906020019092919080519060200190929190505050915091506000816104755760006104b1565b6104b061049461048c8560001c633b9aca0061100b565b600354611037565b6001600087815260200190815260200160002060010154611037565b5b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a0b287e85836040518363ffffffff1660e01b815260040180838152602001807f73706f740000000000000000000000000000000000000000000000000000000081525060200182815260200192505050600060405180830381600087803b15801561055857600080fd5b505af115801561056c573d6000803e3d6000fd5b505050507fdfd7467e425a8107cfd368d159957692c25085aacbcf5228ce08f10f2146486e84848360405180848152602001838152602001828152602001935050505060405180910390a150505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610671576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b6001600454146106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f53706f747465722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7f6d617400000000000000000000000000000000000000000000000000000000008214156107315780600160008581526020019081526020016000206001018190555061079f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53706f747465722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461088b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160045414610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f53706f747465722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7f706172000000000000000000000000000000000000000000000000000000000082141561093757806003819055506109a5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53706f747465722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610abc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610bea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60006004819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60045481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610ce1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160045414610ee3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f53706f747465722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7f7069700000000000000000000000000000000000000000000000000000000000821415610f6557806001600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fd3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53706f747465722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600080821480611028575082828385029250828161102557fe5b04145b61103157600080fd5b92915050565b600081611050846b033b2e3c9fd0803ce800000061100b565b8161105757fe5b0490509291505056fea265627a7a72315820b999c6bc8140aa3d6542c1d3f42a7064630777fe8352e66ff244c3e2d8969cfe64736f6c634300050c0032") - -endmodule diff --git a/tests/specs/mcd/cat-exhaustiveness-spec.k b/tests/specs/mcd/cat-exhaustiveness-spec.k deleted file mode 100644 index fa2b7e1e9b..0000000000 --- a/tests/specs/mcd/cat-exhaustiveness-spec.k +++ /dev/null @@ -1,96 +0,0 @@ -requires "verification.k" - -module CAT-EXHAUSTIVENESS-SPEC - imports VERIFICATION - - // Cat__exhaustiveness - claim [Cat..exhaustiveness]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => ?_ - _ => EVMC_REVERT - _VCallStack - _ - _ => ?_ - - Cat_bin_runtime - #computeValidJumpDests(Cat_bin_runtime) - ACCT_ID - CALLER_ID - VCallData - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - _VStatic - VCallDepth - - - _VSelfDestruct - _ => ?_ - _ => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - _ - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool 1171202608 =/=Int #asWord(#range(VCallData, 0, 4) ) - andBool 1763987465 =/=Int #asWord(#range(VCallData, 0, 4) ) - andBool 2622662641 =/=Int #asWord(#range(VCallData, 0, 4) ) - andBool 436938878 =/=Int #asWord(#range(VCallData, 0, 4) ) - andBool 3572022915 =/=Int #asWord(#range(VCallData, 0, 4) ) - andBool 3958158237 =/=Int #asWord(#range(VCallData, 0, 4) ) - andBool 3647180086 =/=Int #asWord(#range(VCallData, 0, 4) ) - andBool 2507842956 =/=Int #asWord(#range(VCallData, 0, 4) ) - andBool 1710941022 =/=Int #asWord(#range(VCallData, 0, 4) ) - andBool 911646327 =/=Int #asWord(#range(VCallData, 0, 4) ) - andBool 1651291077 =/=Int #asWord(#range(VCallData, 0, 4) ) - andBool 3207937467 =/=Int #asWord(#range(VCallData, 0, 4) ) - andBool VGas >=Int 40000000 - -endmodule diff --git a/tests/specs/mcd/cat-file-addr-pass-rough-spec.k b/tests/specs/mcd/cat-file-addr-pass-rough-spec.k deleted file mode 100644 index a784fb2e6c..0000000000 --- a/tests/specs/mcd/cat-file-addr-pass-rough-spec.k +++ /dev/null @@ -1,113 +0,0 @@ -requires "verification.k" - -module CAT-FILE-ADDR-PASS-ROUGH-SPEC - imports VERIFICATION - - // Cat_file-addr - claim [Cat.file-addr.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Cat_bin_runtime - #computeValidJumpDests(Cat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("file", #bytes32(ABI_what), #address(ABI_data)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Cat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Cat.vow <- ABI_data ] - ACCT_ID_ORIG_STORAGE - Nonce_Cat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Cat) - - andBool (#rangeBytes(32, ABI_what) - andBool (#rangeAddress(ABI_data) - andBool (#rangeUInt(256, May) - andBool (#rangeAddress(Vow) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#notPrecompileAddress(Vow) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool ((May ==Int 1) - andBool ((VCallValue ==Int 0) - andBool ((ABI_what ==Int #string2Word("vow"))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Cat.wards[CALLER_ID]) ==Int May - andBool #lookup(ACCT_ID_STORAGE, #Cat.vow) ==Int Vow - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Cat.wards[CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Cat.vow) ==Int Junk_1 - andBool #Cat.wards[CALLER_ID] =/=Int #Cat.vow - -endmodule diff --git a/tests/specs/mcd/dai-adduu-fail-rough-spec.k b/tests/specs/mcd/dai-adduu-fail-rough-spec.k deleted file mode 100644 index c825676710..0000000000 --- a/tests/specs/mcd/dai-adduu-fail-rough-spec.k +++ /dev/null @@ -1,107 +0,0 @@ -requires "verification.k" - -module DAI-ADDUU-FAIL-ROUGH-SPEC - imports VERIFICATION - - // Dai_adduu - claim [Dai.adduu.fail.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => ?_ - _ => ?FAILURE:EndStatusCode - _VCallStack - _ - _ => ?_ - - Dai_bin_runtime - #computeValidJumpDests(Dai_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => ?_ - _ - 7825 => ?_ - #gas(VGas) => ?_ - VMemoryUsed - _ => ?_ - _ - VCallDepth => ?_ - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Dai_bin_runtime - ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_Dai - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Dai) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed))))) - - - andBool notBool ( - ((#rangeUInt(256, ABI_x:Int +Int ABI_y:Int))) - ) - ensures - ?FAILURE =/=K EVMC_SUCCESS - -endmodule diff --git a/tests/specs/mcd/dai-symbol-pass-spec.k b/tests/specs/mcd/dai-symbol-pass-spec.k deleted file mode 100644 index 2e31d33bfa..0000000000 --- a/tests/specs/mcd/dai-symbol-pass-spec.k +++ /dev/null @@ -1,99 +0,0 @@ -requires "verification.k" - -module DAI-SYMBOL-PASS-SPEC - imports VERIFICATION - - // Dai_symbol - claim [Dai.symbol.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => #asByteStackInWidthaux(32, 31, 32, #enc(#string("DAI"))) - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Dai_bin_runtime - #computeValidJumpDests(Dai_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("symbol", .TypedArgs) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( VGas +Int -672 ) ) - 0 => ?_ - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Dai_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Dai => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (lengthBytes(CD) <=Int 1250000000 - andBool ((VCallValue ==Int 0))) - - - -endmodule diff --git a/tests/specs/mcd/dstoken-approve-fail-rough-spec.k b/tests/specs/mcd/dstoken-approve-fail-rough-spec.k deleted file mode 100644 index f84e90fbc6..0000000000 --- a/tests/specs/mcd/dstoken-approve-fail-rough-spec.k +++ /dev/null @@ -1,116 +0,0 @@ -requires "verification.k" - -module DSTOKEN-APPROVE-FAIL-ROUGH-SPEC - imports VERIFICATION - - // DSToken_approve - claim [DSToken.approve.fail.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => ?_ - _ => ?FAILURE:EndStatusCode - _VCallStack - _ - _ => ?_ - - DSToken_bin_runtime - #computeValidJumpDests(DSToken_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("approve", #address(ABI_usr), #uint256(ABI_wad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth => ?_ - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - DSToken_bin_runtime - ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_DSToken => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeAddress(ABI_usr) - andBool (#rangeUInt(256, ABI_wad) - andBool (#rangeUInt(256, Allowed) - andBool (#rangeBool(Stopped) - andBool (#rangeAddress(Owner) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#notPrecompileAddress(Owner) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1)))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #DSToken.allowance[CALLER_ID][ABI_usr]) ==Int Allowed - andBool #lookup(ACCT_ID_STORAGE, #DSToken.owner_stopped) ==Int #WordPackAddrUInt8(Owner, Stopped) - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.allowance[CALLER_ID][ABI_usr]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.owner_stopped) ==Int Junk_1 - andBool #DSToken.allowance[CALLER_ID][ABI_usr] =/=Int #DSToken.owner_stopped - andBool notBool ( - ((Stopped:Int ==Int 0) - andBool ((VCallValue:Int ==Int 0))) - ) - ensures - ?FAILURE =/=K EVMC_SUCCESS - -endmodule diff --git a/tests/specs/mcd/dstoken-burn-self-fail-rough-spec.k b/tests/specs/mcd/dstoken-burn-self-fail-rough-spec.k deleted file mode 100644 index 9ee6168fb0..0000000000 --- a/tests/specs/mcd/dstoken-burn-self-fail-rough-spec.k +++ /dev/null @@ -1,135 +0,0 @@ -requires "verification.k" - -module DSTOKEN-BURN-SELF-FAIL-ROUGH-SPEC - imports VERIFICATION - - // DSToken_burn-self - claim [DSToken.burn-self.fail.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => ?_ - _ => ?FAILURE:EndStatusCode - _VCallStack - _ - _ => ?_ - - DSToken_bin_runtime - #computeValidJumpDests(DSToken_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("burn", #address(ABI_src), #uint256(ABI_wad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth => ?_ - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - DSToken_bin_runtime - ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_DSToken - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_DSToken) - - andBool (#rangeAddress(ABI_src) - andBool (#rangeUInt(256, ABI_wad) - andBool (#rangeUInt(256, Gem_s) - andBool (#rangeUInt(256, Supply) - andBool (#rangeUInt(256, Allowance) - andBool (#rangeBool(Stoppedd) - andBool (#rangeAddress(Owner) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Owner)) - andBool ((CALLER_ID ==Int Owner) - andBool ((CALLER_ID =/=Int ACCT_ID) - andBool ((CALLER_ID ==Int ABI_src) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #DSToken.allowance[ABI_src][CALLER_ID]) ==Int Allowance - andBool #lookup(ACCT_ID_STORAGE, #DSToken.balances[ABI_src]) ==Int Gem_s - andBool #lookup(ACCT_ID_STORAGE, #DSToken.supply) ==Int Supply - andBool #lookup(ACCT_ID_STORAGE, #DSToken.owner_stopped) ==Int #WordPackAddrUInt8(Owner, Stoppedd) - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.allowance[ABI_src][CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.balances[ABI_src]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.supply) ==Int Junk_2 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.owner_stopped) ==Int Junk_3 - andBool #DSToken.allowance[ABI_src][CALLER_ID] =/=Int #DSToken.balances[ABI_src] - andBool #DSToken.allowance[ABI_src][CALLER_ID] =/=Int #DSToken.supply - andBool #DSToken.allowance[ABI_src][CALLER_ID] =/=Int #DSToken.owner_stopped - andBool #DSToken.balances[ABI_src] =/=Int #DSToken.supply - andBool #DSToken.balances[ABI_src] =/=Int #DSToken.owner_stopped - andBool #DSToken.supply =/=Int #DSToken.owner_stopped - andBool notBool ( - (((#rangeUInt(256, Gem_s:Int -Int ABI_wad:Int))) - andBool (((#rangeUInt(256, Supply:Int -Int ABI_wad:Int))) - andBool ((VCallValue:Int ==Int 0) - andBool ((Stoppedd:Int ==Int 0))))) - ) - ensures - ?FAILURE =/=K EVMC_SUCCESS - -endmodule diff --git a/tests/specs/mcd/dstoken-transferfrom-fail-rough-spec.k b/tests/specs/mcd/dstoken-transferfrom-fail-rough-spec.k deleted file mode 100644 index 8c75bd108b..0000000000 --- a/tests/specs/mcd/dstoken-transferfrom-fail-rough-spec.k +++ /dev/null @@ -1,134 +0,0 @@ -requires "verification.k" - -module DSTOKEN-TRANSFERFROM-FAIL-ROUGH-SPEC - imports VERIFICATION - - // DSToken_transferFrom - claim [DSToken.transferFrom.fail.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => ?_ - _ => ?FAILURE:EndStatusCode - _VCallStack - _ - _ => ?_ - - DSToken_bin_runtime - #computeValidJumpDests(DSToken_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("transferFrom", #address(ABI_src), #address(ABI_dst), #uint256(ABI_wad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth => ?_ - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - DSToken_bin_runtime - ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_DSToken => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeAddress(ABI_src) - andBool (#rangeAddress(ABI_dst) - andBool (#rangeUInt(256, ABI_wad) - andBool (#rangeUInt(256, Gem_s) - andBool (#rangeUInt(256, Gem_d) - andBool (#rangeUInt(256, Allowance) - andBool (#rangeAddress(Owner) - andBool (#rangeBool(Stopped) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Owner)) - andBool ((ABI_src =/=Int ABI_dst) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3)))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #DSToken.allowance[ABI_src][CALLER_ID]) ==Int Allowance - andBool #lookup(ACCT_ID_STORAGE, #DSToken.balances[ABI_src]) ==Int Gem_s - andBool #lookup(ACCT_ID_STORAGE, #DSToken.balances[ABI_dst]) ==Int Gem_d - andBool #lookup(ACCT_ID_STORAGE, #DSToken.owner_stopped) ==Int #WordPackAddrUInt8(Owner, Stopped) - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.allowance[ABI_src][CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.balances[ABI_src]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.balances[ABI_dst]) ==Int Junk_2 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.owner_stopped) ==Int Junk_3 - andBool #DSToken.allowance[ABI_src][CALLER_ID] =/=Int #DSToken.balances[ABI_src] - andBool #DSToken.allowance[ABI_src][CALLER_ID] =/=Int #DSToken.balances[ABI_dst] - andBool #DSToken.allowance[ABI_src][CALLER_ID] =/=Int #DSToken.owner_stopped - andBool #DSToken.balances[ABI_src] =/=Int #DSToken.balances[ABI_dst] - andBool #DSToken.balances[ABI_src] =/=Int #DSToken.owner_stopped - andBool #DSToken.balances[ABI_dst] =/=Int #DSToken.owner_stopped - andBool notBool ( - (((#rangeUInt(256, Gem_s:Int -Int ABI_wad:Int))) - andBool (((#rangeUInt(256, Gem_d:Int +Int ABI_wad:Int))) - andBool (((Allowance:Int ==Int maxUInt256 orBool ABI_src:Int ==Int CALLER_ID:Int) orBool (ABI_wad:Int <=Int Allowance:Int)) - andBool ((VCallValue:Int ==Int 0) - andBool ((Stopped:Int ==Int 0)))))) - ) - ensures - ?FAILURE =/=K EVMC_SUCCESS - -endmodule diff --git a/tests/specs/mcd/dsvalue-peek-pass-rough-spec.k b/tests/specs/mcd/dsvalue-peek-pass-rough-spec.k deleted file mode 100644 index e5a3d7b18a..0000000000 --- a/tests/specs/mcd/dsvalue-peek-pass-rough-spec.k +++ /dev/null @@ -1,109 +0,0 @@ -requires "verification.k" - -module DSVALUE-PEEK-PASS-ROUGH-SPEC - imports VERIFICATION - - // DSValue_peek - claim [DSValue.peek.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => #buf(32, Value) +Bytes #buf(32, Ok) - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - DSValue_bin_runtime - #computeValidJumpDests(DSValue_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("peek", .TypedArgs) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - DSValue_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_DSValue => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeAddress(Owner) - andBool (#rangeBytes(32, Value) - andBool (#rangeBool(Ok) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#notPrecompileAddress(Owner) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool ((VCallValue ==Int 0))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #DSValue.owner_has) ==Int #WordPackAddrUInt8(Owner, Ok) - andBool #lookup(ACCT_ID_STORAGE, #DSValue.val) ==Int Value - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSValue.owner_has) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSValue.val) ==Int Junk_1 - andBool #DSValue.owner_has =/=Int #DSValue.val - -endmodule diff --git a/tests/specs/mcd/dsvalue-read-pass-spec.k b/tests/specs/mcd/dsvalue-read-pass-spec.k deleted file mode 100644 index 4ed827d2da..0000000000 --- a/tests/specs/mcd/dsvalue-read-pass-spec.k +++ /dev/null @@ -1,111 +0,0 @@ -requires "verification.k" - -module DSVALUE-READ-PASS-SPEC - imports VERIFICATION - - // DSValue_read - claim [DSValue.read.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => #buf(32, Value) - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - DSValue_bin_runtime - #computeValidJumpDests(DSValue_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("read", .TypedArgs) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( VGas +Int -2043 ) ) - 0 => ?_ - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - DSValue_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_DSValue - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeAddress(Owner) - andBool (#rangeBytes(32, Value) - andBool (#rangeBool(Ok) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#notPrecompileAddress(Owner) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool ((VCallValue ==Int 0) - andBool ((Ok ==Int 1)))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #DSValue.owner_has) ==Int #WordPackAddrUInt8(Owner, Ok) - andBool #lookup(ACCT_ID_STORAGE, #DSValue.val) ==Int Value - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSValue.owner_has) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSValue.val) ==Int Junk_1 - andBool #DSValue.owner_has =/=Int #DSValue.val - andBool #rangeNonce(Nonce_DSValue) - -endmodule diff --git a/tests/specs/mcd/dsvalue-read-pass-summarize-spec.k b/tests/specs/mcd/dsvalue-read-pass-summarize-spec.k deleted file mode 100644 index bd7882bfe1..0000000000 --- a/tests/specs/mcd/dsvalue-read-pass-summarize-spec.k +++ /dev/null @@ -1,140 +0,0 @@ -requires "verification.k" - -module DSVALUE-READ-PASS-SUMMARIZE-SPEC - imports VERIFICATION - -// Prove that all paths of execution for Dai.read fail -// 333s -// claim [DSValue.read.pass]: -// #execute => #halt ... -// ISTANBUL -// -// _ => ?FAILURE:EndStatusCode -// -// ACCT_ID -// DSValue_bin_runtime -// #computeValidJumpDests(DSValue_bin_runtime) -// #abiCallData("read", .TypedArgs) +Bytes CD => ?_ -// #gas(VGas) => ?_ -// 0 => ?_ -// .WordStack => ?_ -// .Bytes => ?_ -// 0 => ?_ -// (_ => ?_) -// -// (_ => ?_) -// -// -// ACCT_ID -// ACCT_STORAGE => ?_ -// (_ => ?_) -// -// ensures ?FAILURE =/=K EVMC_SUCCESS - -// Counter-example provided by prover -// #Not( { 255 &Int #lookup( ACCT_STORAGE , 1 ) /Int 1461501637330902918203684832716283019655932542976 #Equals 0 } ) -// #And -// -// -// #halt -// ~> _DotVar2 -// -// -// ISTANBUL -// -// -// -// -// #buf( 32 , #lookup( ACCT_STORAGE , 2 ) ) -// -// -// EVMC SUCCESS -// -// 284 -// -// DSValue_bin_runtime -// #computeValidJumpDests(DSValue_bin_runtime) -// -// ACCT_ID -// -// -// b"W\xde&\xa4" +Bytes CD -// -// -// 0 -// -// -// 1474176676 : .WordStack -// -// -// b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" [ 128 := #buf( 32 , #lookup( ACCT_STORAGE , 2 ) ) ] -// -// -// 284 -// -// -// #gas( VGas +Int -2043 ) -// -// -// 5 -// -// ... -// -// ... -// -// -// -// AccountCellMapItem( -// ACCT_ID -// , -// -// ACCT_ID -// -// -// ACCT_STORAGE -// -// ... -// ) _DotVar5 -// -// ... -// -// -// ... -// -// ... -// -// #And { false #Equals -// ACCT_ID -// in _DotVar5 keys( ) } - -// Converted to summary -// 313s - claim [DSValue.read.pass]: - #execute => #halt ... - ISTANBUL - - _ => #buf(32, #lookup(ACCT_STORAGE, 2)) // from counterexample - _ => EVMC_SUCCESS - - ACCT_ID - DSValue_bin_runtime - #computeValidJumpDests(DSValue_bin_runtime) - #abiCallData("read", .TypedArgs) +Bytes _CD => ?_ - 0 // from counterexample - #gas(VGas) => #gas(VGas +Int -2043) // from counterexample - 0 => ?_ - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - (_ => ?_) - - (_ => ?_) - - - ACCT_ID - ACCT_STORAGE => ?_ - (_ => ?_) - - requires notBool (255 &Int (#lookup( ACCT_STORAGE , 1 ) /Int 1461501637330902918203684832716283019655932542976)) ==Int 0 // from counterexample - -endmodule diff --git a/tests/specs/mcd/end-cash-pass-rough-spec.k b/tests/specs/mcd/end-cash-pass-rough-spec.k deleted file mode 100644 index 6125ff86ae..0000000000 --- a/tests/specs/mcd/end-cash-pass-rough-spec.k +++ /dev/null @@ -1,477 +0,0 @@ -requires "verification.k" - -module END-CASH-PASS-ROUGH-SPEC - imports VERIFICATION - - // End_cash - claim [End.cash.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - End_bin_runtime - #computeValidJumpDests(End_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("cash", #bytes32(ABI_ilk), #uint256(ABI_wad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - End_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #End.out[ABI_ilk][CALLER_ID] <- Out +Int ABI_wad ] - ACCT_ID_ORIG_STORAGE - Nonce_End - - - Vat - Vat_balance - Vat_bin_runtime - Vat_STORAGE => Vat_STORAGE [ #Vat.gem[ABI_ilk][ACCT_ID] <- Gem_e -Int #rmul(ABI_wad, Fix) ] [ #Vat.gem[ABI_ilk][CALLER_ID] <- Gem_c +Int #rmul(ABI_wad, Fix) ] - Vat_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_End) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeBytes(32, ABI_ilk) - andBool (#rangeUInt(256, ABI_wad) - andBool (#rangeAddress(Vat) - andBool (#rangeUInt(256, Fix) - andBool (#rangeUInt(256, Bag) - andBool (#rangeUInt(256, Out) - andBool (#rangeUInt(256, Gem_e) - andBool (#rangeUInt(256, Gem_c) - andBool (#rangeUInt(256, Vat_balance) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Vat)) - andBool ((ACCT_ID =/=Int Vat) - andBool ((ACCT_ID =/=Int CALLER_ID) - andBool ((Vat =/=Int 0) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool (#rangeUInt(256, Junk_6) - andBool (#rangeUInt(256, Junk_7) - andBool (((Fix =/=Int 0)) - andBool (((Out +Int ABI_wad <=Int Bag)) - andBool (((VCallValue ==Int 0)) - andBool (((VCallDepth #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - End_bin_runtime - #computeValidJumpDests(End_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS - _ - 14775 => 14800 - #gas(VGas) => #gas ( ( VGas +Int -54 ) ) - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - End_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_End - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_End) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) - - - [trusted] - - - // End_rmul - claim [End.rmul.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - End_bin_runtime - #computeValidJumpDests(End_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : (ABI_x *Int ABI_y) /Int #Ray : WS - _ - 14623 => 14663 - #gas(VGas) => #if ABI_y ==Int 0 - #then #gas ( ( VGas +Int -127 ) ) - #else #gas ( ( VGas +Int -179 ) ) - #fi - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - End_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_End - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_End) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1000) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x *Int ABI_y))))))) - - - [trusted] - - - // Vat_flux-diff - claim [Vat.flux-diff.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("flux", #bytes32(ABI_ilk), #address(ABI_src), #address(ABI_dst), #uint256(ABI_wad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Gem_src -Int ABI_wad ) , Gem_src , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Gem_dst +Int ABI_wad ) , Gem_dst , Junk_2 ) ) +Int -8307 ) ) - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Vat.gem[ABI_ilk][ABI_src] <- Gem_src -Int ABI_wad ] [ #Vat.gem[ABI_ilk][ABI_dst] <- Gem_dst +Int ABI_wad ] - ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeBytes(32, ABI_ilk) - andBool (#rangeAddress(ABI_src) - andBool (#rangeAddress(ABI_dst) - andBool (#rangeUInt(256, ABI_wad) - andBool (#rangeUInt(256, May) - andBool (#rangeUInt(256, Gem_src) - andBool (#rangeUInt(256, Gem_dst) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((ABI_src =/=Int ABI_dst) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool ((((May ==Int 1 orBool ABI_src ==Int CALLER_ID))) - andBool (((VCallValue ==Int 0)) - andBool ((#rangeUInt(256, Gem_src -Int ABI_wad)) - andBool ((#rangeUInt(256, Gem_dst +Int ABI_wad)))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.can[ABI_src][CALLER_ID]) ==Int May - andBool #lookup(ACCT_ID_STORAGE, #Vat.gem[ABI_ilk][ABI_src]) ==Int Gem_src - andBool #lookup(ACCT_ID_STORAGE, #Vat.gem[ABI_ilk][ABI_dst]) ==Int Gem_dst - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.can[ABI_src][CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.gem[ABI_ilk][ABI_src]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.gem[ABI_ilk][ABI_dst]) ==Int Junk_2 - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.gem[ABI_ilk][ABI_src] - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.gem[ABI_ilk][ABI_dst] - andBool #Vat.gem[ABI_ilk][ABI_src] =/=Int #Vat.gem[ABI_ilk][ABI_dst] - [trusted] - - -endmodule diff --git a/tests/specs/mcd/end-pack-pass-rough-spec.k b/tests/specs/mcd/end-pack-pass-rough-spec.k deleted file mode 100644 index 2a1e5db3e1..0000000000 --- a/tests/specs/mcd/end-pack-pass-rough-spec.k +++ /dev/null @@ -1,478 +0,0 @@ -requires "verification.k" - -module END-PACK-PASS-ROUGH-SPEC - imports VERIFICATION - - // End_pack - claim [End.pack.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - End_bin_runtime - #computeValidJumpDests(End_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("pack", #uint256(ABI_wad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - End_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #End.bag[CALLER_ID] <- Bag +Int ABI_wad ] - ACCT_ID_ORIG_STORAGE - Nonce_End - - - Vat - Vat_balance - Vat_bin_runtime - Vat_STORAGE => Vat_STORAGE [ #Vat.dai[CALLER_ID] <- Dai -Int ABI_wad *Int #Ray ] [ #Vat.dai[Vow] <- Joy +Int ABI_wad *Int #Ray ] - Vat_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_End) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeUInt(256, ABI_wad) - andBool (#rangeAddress(Vat) - andBool (#rangeAddress(Vow) - andBool (#rangeUInt(256, Debt) - andBool (#rangeUInt(256, Bag) - andBool (#rangeUInt(256, Joy) - andBool (#rangeUInt(256, Dai) - andBool (#rangeUInt(256, Can) - andBool (#rangeUInt(256, Vat_balance) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Vat)) - andBool ((#notPrecompileAddress(Vow)) - andBool ((ACCT_ID =/=Int Vat) - andBool ((CALLER_ID =/=Int Vow) - andBool ((CALLER_ID =/=Int ACCT_ID) - andBool ((Vat =/=Int 0) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool (#rangeUInt(256, Junk_6) - andBool (((Debt =/=Int 0)) - andBool (((Can ==Int 1)) - andBool (((VCallValue ==Int 0)) - andBool (((VCallDepth #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - End_bin_runtime - #computeValidJumpDests(End_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x *Int ABI_y : WS - _ - 14690 => 14733 - #gas(VGas) => #if ABI_y ==Int 0 - #then #gas ( ( VGas +Int -54 ) ) - #else #gas ( ( VGas +Int -106 ) ) - #fi - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - End_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_End - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_End) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1000) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x *Int ABI_y))))))) - - - [trusted] - - - // End_adduu - claim [End.adduu.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - End_bin_runtime - #computeValidJumpDests(End_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS - _ - 14775 => 14800 - #gas(VGas) => #gas ( ( VGas +Int -54 ) ) - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - End_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_End - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_End) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) - - - [trusted] - - - // Vat_move-diff - claim [Vat.move-diff.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("move", #address(ABI_src), #address(ABI_dst), #uint256(ABI_rad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Dai_src -Int ABI_rad ) , Dai_src , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Dai_dst +Int ABI_rad ) , Dai_dst , Junk_2 ) ) +Int -7943 ) ) - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Vat.dai[ABI_src] <- Dai_src -Int ABI_rad ] [ #Vat.dai[ABI_dst] <- Dai_dst +Int ABI_rad ] - ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeAddress(ABI_src) - andBool (#rangeAddress(ABI_dst) - andBool (#rangeUInt(256, ABI_rad) - andBool (#rangeUInt(256, Dai_dst) - andBool (#rangeUInt(256, Dai_src) - andBool (#rangeUInt(256, May) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((ABI_src =/=Int ABI_dst) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool ((((May ==Int 1 orBool ABI_src ==Int CALLER_ID))) - andBool (((VCallValue ==Int 0)) - andBool ((#rangeUInt(256, Dai_src -Int ABI_rad)) - andBool ((#rangeUInt(256, Dai_dst +Int ABI_rad))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.can[ABI_src][CALLER_ID]) ==Int May - andBool #lookup(ACCT_ID_STORAGE, #Vat.dai[ABI_src]) ==Int Dai_src - andBool #lookup(ACCT_ID_STORAGE, #Vat.dai[ABI_dst]) ==Int Dai_dst - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.can[ABI_src][CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.dai[ABI_src]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.dai[ABI_dst]) ==Int Junk_2 - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.dai[ABI_src] - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.dai[ABI_dst] - andBool #Vat.dai[ABI_src] =/=Int #Vat.dai[ABI_dst] - [trusted] - - -endmodule diff --git a/tests/specs/mcd/end-subuu-pass-spec.k b/tests/specs/mcd/end-subuu-pass-spec.k deleted file mode 100644 index ec5a234689..0000000000 --- a/tests/specs/mcd/end-subuu-pass-spec.k +++ /dev/null @@ -1,102 +0,0 @@ -requires "verification.k" - -module END-SUBUU-PASS-SPEC - imports VERIFICATION - - // End_subuu - claim [End.subuu.pass]: - #execute ~> CONTINUATION => JUMP JMPTO ~> #pc [ JUMP ] ~> #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - End_bin_runtime - #computeValidJumpDests(End_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO:Int : WS => ABI_x -Int ABI_y : WS - _ - 14664 => 14689 - #gas(VGas) => #gas ( ( VGas +Int -62 ) ) // -54 - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - End_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - _Nonce_End => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x -Int ABI_y))))))) - - - -endmodule diff --git a/tests/specs/mcd/flapper-tend-guy-diff-pass-rough-spec.k b/tests/specs/mcd/flapper-tend-guy-diff-pass-rough-spec.k deleted file mode 100644 index e920e5e717..0000000000 --- a/tests/specs/mcd/flapper-tend-guy-diff-pass-rough-spec.k +++ /dev/null @@ -1,551 +0,0 @@ -requires "verification.k" - -module FLAPPER-TEND-GUY-DIFF-PASS-ROUGH-SPEC - imports VERIFICATION - - // Flapper_tend-guy-diff - claim [Flapper.tend-guy-diff.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Flapper_bin_runtime - #computeValidJumpDests(Flapper_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("tend", #uint256(ABI_id), #uint256(ABI_lot), #uint256(ABI_bid)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flapper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Flapper.bids[ABI_id].bid <- ABI_bid ] [ #Flapper.bids[ABI_id].guy_tic_end <- #WordPackAddrUInt48UInt48(CALLER_ID, TIME +Int Ttl, End) ] - ACCT_ID_ORIG_STORAGE - Nonce_Flapper - - - DSToken - DSToken_balance - DSToken_bin_runtime - DSToken_STORAGE => DSToken_STORAGE [ #DSToken.allowance[CALLER_ID][ACCT_ID] <- #if (Allowed ==Int maxUInt256) #then Allowed #else Allowed -Int ABI_bid #fi ] [ #DSToken.balances[CALLER_ID] <- Gem_u -Int ABI_bid ] [ #DSToken.balances[Guy] <- Gem_g +Int Bid ] [ #DSToken.balances[ACCT_ID] <- Gem_a +Int (ABI_bid -Int Bid) ] - DSToken_ORIG_STORAGE - Nonce_DSToken - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Flapper) - andBool #rangeNonce(Nonce_DSToken) - - andBool (#rangeUInt(256, ABI_id) - andBool (#rangeUInt(256, ABI_lot) - andBool (#rangeUInt(256, ABI_bid) - andBool (#rangeAddress(DSToken) - andBool (#rangeUInt(256, Live) - andBool (#rangeUInt(48, Ttl) - andBool (#rangeUInt(48, Tau) - andBool (#rangeUInt(256, Beg) - andBool (#rangeUInt(256, Bid) - andBool (#rangeUInt(256, Lot) - andBool (#rangeAddress(Guy) - andBool (#rangeUInt(48, Tic) - andBool (#rangeUInt(48, End) - andBool (#rangeUInt(256, Allowed) - andBool (#rangeUInt(256, Gem_g) - andBool (#rangeUInt(256, Gem_a) - andBool (#rangeUInt(256, Gem_u) - andBool (#rangeAddress(Owner) - andBool (#rangeBool(Stopped) - andBool (#rangeUInt(256, DSToken_balance) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(DSToken)) - andBool ((#notPrecompileAddress(Guy)) - andBool ((#notPrecompileAddress(Owner)) - andBool ((ACCT_ID =/=Int DSToken) - andBool ((#rangeUInt(48, TIME)) - andBool ((CALLER_ID =/=Int ACCT_ID) - andBool ((CALLER_ID =/=Int Guy) - andBool ((ACCT_ID =/=Int Guy) - andBool ((DSToken =/=Int 0) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool (#rangeUInt(256, Junk_6) - andBool (#rangeUInt(256, Junk_7) - andBool (#rangeUInt(256, Junk_8) - andBool (#rangeUInt(256, Junk_9) - andBool (#rangeUInt(256, Junk_10) - andBool (#rangeUInt(256, Junk_11) - andBool (((VCallValue ==Int 0)) - andBool (((VCallDepth Int TIME orBool Tic ==Int 0)) - andBool (((End >Int TIME)) - andBool (((TIME +Int Ttl <=Int maxUInt48)) - andBool (((ABI_lot ==Int Lot)) - andBool (((ABI_bid >Int Bid)) - andBool (((ABI_bid *Int #Wad <=Int maxUInt256)) - andBool (((ABI_bid *Int #Wad >=Int Beg *Int Bid)) - andBool ((#rangeUInt(256, Gem_u -Int ABI_bid)) - andBool ((#rangeUInt(256, Gem_g +Int Bid)) - andBool ((#rangeUInt(256, Gem_a +Int (ABI_bid -Int Bid))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Flapper.gem) ==Int DSToken - andBool #lookup(ACCT_ID_STORAGE, #Flapper.live) ==Int Live - andBool #lookup(ACCT_ID_STORAGE, #Flapper.ttl_tau) ==Int #WordPackUInt48UInt48(Ttl, Tau) - andBool #lookup(ACCT_ID_STORAGE, #Flapper.beg) ==Int Beg - andBool #lookup(ACCT_ID_STORAGE, #Flapper.bids[ABI_id].bid) ==Int Bid - andBool #lookup(ACCT_ID_STORAGE, #Flapper.bids[ABI_id].lot) ==Int Lot - andBool #lookup(ACCT_ID_STORAGE, #Flapper.bids[ABI_id].guy_tic_end) ==Int #WordPackAddrUInt48UInt48(Guy, Tic, End) - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flapper.gem) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flapper.live) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flapper.ttl_tau) ==Int Junk_2 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flapper.beg) ==Int Junk_3 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flapper.bids[ABI_id].bid) ==Int Junk_4 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flapper.bids[ABI_id].lot) ==Int Junk_5 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flapper.bids[ABI_id].guy_tic_end) ==Int Junk_6 - andBool #Flapper.gem =/=Int #Flapper.live - andBool #Flapper.gem =/=Int #Flapper.ttl_tau - andBool #Flapper.gem =/=Int #Flapper.beg - andBool #Flapper.gem =/=Int #Flapper.bids[ABI_id].bid - andBool #Flapper.gem =/=Int #Flapper.bids[ABI_id].lot - andBool #Flapper.gem =/=Int #Flapper.bids[ABI_id].guy_tic_end - andBool #Flapper.live =/=Int #Flapper.ttl_tau - andBool #Flapper.live =/=Int #Flapper.beg - andBool #Flapper.live =/=Int #Flapper.bids[ABI_id].bid - andBool #Flapper.live =/=Int #Flapper.bids[ABI_id].lot - andBool #Flapper.live =/=Int #Flapper.bids[ABI_id].guy_tic_end - andBool #Flapper.ttl_tau =/=Int #Flapper.beg - andBool #Flapper.ttl_tau =/=Int #Flapper.bids[ABI_id].bid - andBool #Flapper.ttl_tau =/=Int #Flapper.bids[ABI_id].lot - andBool #Flapper.ttl_tau =/=Int #Flapper.bids[ABI_id].guy_tic_end - andBool #Flapper.beg =/=Int #Flapper.bids[ABI_id].bid - andBool #Flapper.beg =/=Int #Flapper.bids[ABI_id].lot - andBool #Flapper.beg =/=Int #Flapper.bids[ABI_id].guy_tic_end - andBool #Flapper.bids[ABI_id].bid =/=Int #Flapper.bids[ABI_id].lot - andBool #Flapper.bids[ABI_id].bid =/=Int #Flapper.bids[ABI_id].guy_tic_end - andBool #Flapper.bids[ABI_id].lot =/=Int #Flapper.bids[ABI_id].guy_tic_end - andBool #lookup(DSToken_STORAGE, #DSToken.allowance[CALLER_ID][ACCT_ID]) ==Int Allowed - andBool #lookup(DSToken_STORAGE, #DSToken.balances[CALLER_ID]) ==Int Gem_u - andBool #lookup(DSToken_STORAGE, #DSToken.balances[Guy]) ==Int Gem_g - andBool #lookup(DSToken_STORAGE, #DSToken.balances[ACCT_ID]) ==Int Gem_a - andBool #lookup(DSToken_STORAGE, #DSToken.owner_stopped) ==Int #WordPackAddrUInt8(Owner, Stopped) - andBool #lookup(DSToken_ORIG_STORAGE, #DSToken.allowance[CALLER_ID][ACCT_ID]) ==Int Junk_7 - andBool #lookup(DSToken_ORIG_STORAGE, #DSToken.balances[CALLER_ID]) ==Int Junk_8 - andBool #lookup(DSToken_ORIG_STORAGE, #DSToken.balances[Guy]) ==Int Junk_9 - andBool #lookup(DSToken_ORIG_STORAGE, #DSToken.balances[ACCT_ID]) ==Int Junk_10 - andBool #lookup(DSToken_ORIG_STORAGE, #DSToken.owner_stopped) ==Int Junk_11 - andBool #DSToken.allowance[CALLER_ID][ACCT_ID] =/=Int #DSToken.balances[CALLER_ID] - andBool #DSToken.allowance[CALLER_ID][ACCT_ID] =/=Int #DSToken.balances[Guy] - andBool #DSToken.allowance[CALLER_ID][ACCT_ID] =/=Int #DSToken.balances[ACCT_ID] - andBool #DSToken.allowance[CALLER_ID][ACCT_ID] =/=Int #DSToken.owner_stopped - andBool #DSToken.balances[CALLER_ID] =/=Int #DSToken.balances[Guy] - andBool #DSToken.balances[CALLER_ID] =/=Int #DSToken.balances[ACCT_ID] - andBool #DSToken.balances[CALLER_ID] =/=Int #DSToken.owner_stopped - andBool #DSToken.balances[Guy] =/=Int #DSToken.balances[ACCT_ID] - andBool #DSToken.balances[Guy] =/=Int #DSToken.owner_stopped - andBool #DSToken.balances[ACCT_ID] =/=Int #DSToken.owner_stopped - - // Flapper_addu48u48 - claim [Flapper.addu48u48.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Flapper_bin_runtime - #computeValidJumpDests(Flapper_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS - _ - 8945 => 8986 - #gas(VGas) => #gas ( ( VGas +Int -66 ) ) - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flapper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_Flapper - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Flapper) - - andBool (#rangeUInt(48, ABI_x) - andBool (#rangeUInt(48, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(48, ABI_x +Int ABI_y))))))) - - - [trusted] - - - // Flapper_muluu - claim [Flapper.muluu.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Flapper_bin_runtime - #computeValidJumpDests(Flapper_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x *Int ABI_y : WS - _ - 8901 => 8944 - #gas(VGas) => #if ABI_y ==Int 0 - #then #gas ( ( VGas +Int -54 ) ) - #else #gas ( ( VGas +Int -106 ) ) - #fi - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flapper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_Flapper - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Flapper) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1000) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x *Int ABI_y))))))) - - - [trusted] - - - // DSToken_move - claim [DSToken.move.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - DSToken_bin_runtime - #computeValidJumpDests(DSToken_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("move", #address(ABI_src), #address(ABI_dst), #uint256(ABI_wad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #if ( #lookup( ACCT_ID_STORAGE , #hashedLocation("Solidity", 2, ABI_src CALLER_ID .IntList) ) ==Int maxUInt256 andBool ( Allowance ==Int maxUInt256 andBool ( maxUInt256 ==Int maxUInt256 orBool ABI_wad <=Int maxUInt256 ) ) ) - #then #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Gem_s -Int ABI_wad ) , Gem_s , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Gem_d +Int ABI_wad ) , Gem_d , Junk_2 ) ) +Int -7281 ) ) - #else #gas ( ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Allowance -Int ABI_wad ) , Allowance , Junk_0 ) ) -Int Csstore( ISTANBUL , ( Gem_s -Int ABI_wad ) , Gem_s , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Gem_d +Int ABI_wad ) , Gem_d , Junk_2 ) ) +Int -9538 ) ) - #fi - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - DSToken_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #DSToken.allowance[ABI_src][CALLER_ID] <- #if (ABI_src ==Int CALLER_ID orBool Allowance ==Int maxUInt256) #then Allowance #else Allowance -Int ABI_wad #fi ] [ #DSToken.balances[ABI_src] <- Gem_s -Int ABI_wad ] [ #DSToken.balances[ABI_dst] <- Gem_d +Int ABI_wad ] - ACCT_ID_ORIG_STORAGE - Nonce_DSToken - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_DSToken) - - andBool (#rangeAddress(ABI_src) - andBool (#rangeAddress(ABI_dst) - andBool (#rangeUInt(256, ABI_wad) - andBool (#rangeUInt(256, Gem_s) - andBool (#rangeUInt(256, Gem_d) - andBool (#rangeUInt(256, Allowance) - andBool (#rangeAddress(Owner) - andBool (#rangeBool(Stopped) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Owner)) - andBool ((ABI_src =/=Int ABI_dst) - andBool ((ABI_src =/=Int CALLER_ID) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (((#rangeUInt(256, Gem_s -Int ABI_wad))) - andBool (((#rangeUInt(256, Gem_d +Int ABI_wad))) - andBool (((Allowance ==Int maxUInt256) orBool (ABI_wad <=Int Allowance)) - andBool ((VCallValue ==Int 0) - andBool ((Stopped ==Int 0)))))))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #DSToken.allowance[ABI_src][CALLER_ID]) ==Int Allowance - andBool #lookup(ACCT_ID_STORAGE, #DSToken.balances[ABI_src]) ==Int Gem_s - andBool #lookup(ACCT_ID_STORAGE, #DSToken.balances[ABI_dst]) ==Int Gem_d - andBool #lookup(ACCT_ID_STORAGE, #DSToken.owner_stopped) ==Int #WordPackAddrUInt8(Owner, Stopped) - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.allowance[ABI_src][CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.balances[ABI_src]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.balances[ABI_dst]) ==Int Junk_2 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.owner_stopped) ==Int Junk_3 - andBool #DSToken.allowance[ABI_src][CALLER_ID] =/=Int #DSToken.balances[ABI_src] - andBool #DSToken.allowance[ABI_src][CALLER_ID] =/=Int #DSToken.balances[ABI_dst] - andBool #DSToken.allowance[ABI_src][CALLER_ID] =/=Int #DSToken.owner_stopped - andBool #DSToken.balances[ABI_src] =/=Int #DSToken.balances[ABI_dst] - andBool #DSToken.balances[ABI_src] =/=Int #DSToken.owner_stopped - andBool #DSToken.balances[ABI_dst] =/=Int #DSToken.owner_stopped - [trusted] - - -endmodule diff --git a/tests/specs/mcd/flapper-yank-pass-rough-spec.k b/tests/specs/mcd/flapper-yank-pass-rough-spec.k deleted file mode 100644 index 6b7b63c53f..0000000000 --- a/tests/specs/mcd/flapper-yank-pass-rough-spec.k +++ /dev/null @@ -1,301 +0,0 @@ -requires "verification.k" - -module FLAPPER-YANK-PASS-ROUGH-SPEC - imports VERIFICATION - - // Flapper_yank - claim [Flapper.yank.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Flapper_bin_runtime - #computeValidJumpDests(Flapper_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("yank", #uint256(ABI_id)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flapper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Flapper.bids[ABI_id].bid <- 0 ] [ #Flapper.bids[ABI_id].lot <- 0 ] [ #Flapper.bids[ABI_id].guy_tic_end <- 0 ] - ACCT_ID_ORIG_STORAGE - Nonce_Flapper - - - DSToken - DSToken_balance - DSToken_bin_runtime - DSToken_STORAGE => DSToken_STORAGE [ #DSToken.balances[ACCT_ID] <- Gem_a -Int Bid ] [ #DSToken.balances[Guy] <- Gem_g +Int Bid ] - DSToken_ORIG_STORAGE - Nonce_DSToken - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_id) - andBool (#rangeUInt(256, Live) - andBool (#rangeAddress(DSToken) - andBool (#rangeUInt(256, Bid) - andBool (#rangeUInt(256, Lot) - andBool (#rangeAddress(Guy) - andBool (#rangeUInt(48, Tic) - andBool (#rangeUInt(48, End) - andBool (#rangeUInt(256, Gem_a) - andBool (#rangeUInt(256, Gem_g) - andBool (#rangeBool(Stopped) - andBool (#rangeAddress(Owner) - andBool (#rangeUInt(256, DSToken_balance) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(DSToken)) - andBool ((#notPrecompileAddress(Guy)) - andBool ((#notPrecompileAddress(Owner)) - andBool ((ACCT_ID =/=Int DSToken) - andBool (((DSToken =/=Int 0)) - andBool ((ACCT_ID =/=Int Guy) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool (#rangeUInt(256, Junk_6) - andBool (#rangeUInt(256, Junk_7) - andBool (((Live ==Int 0)) - andBool (((Guy =/=Int 0)) - andBool (((Stopped ==Int 0)) - andBool (((VCallDepth #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - DSToken_bin_runtime - #computeValidJumpDests(DSToken_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("move", #address(ABI_src), #address(ABI_dst), #uint256(ABI_wad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #if ( #lookup( ACCT_ID_STORAGE , #hashedLocation("Solidity", 2, ABI_src CALLER_ID .IntList) ) ==Int maxUInt256 andBool ( Allowance ==Int maxUInt256 andBool ( maxUInt256 ==Int maxUInt256 orBool ABI_wad <=Int maxUInt256 ) ) ) - #then #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Gem_s -Int ABI_wad ) , Gem_s , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Gem_d +Int ABI_wad ) , Gem_d , Junk_2 ) ) +Int -7281 ) ) - #else #gas ( ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Allowance -Int ABI_wad ) , Allowance , Junk_0 ) ) -Int Csstore( ISTANBUL , ( Gem_s -Int ABI_wad ) , Gem_s , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Gem_d +Int ABI_wad ) , Gem_d , Junk_2 ) ) +Int -9538 ) ) - #fi - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - DSToken_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #DSToken.allowance[ABI_src][CALLER_ID] <- #if (ABI_src ==Int CALLER_ID orBool Allowance ==Int maxUInt256) #then Allowance #else Allowance -Int ABI_wad #fi ] [ #DSToken.balances[ABI_src] <- Gem_s -Int ABI_wad ] [ #DSToken.balances[ABI_dst] <- Gem_d +Int ABI_wad ] - ACCT_ID_ORIG_STORAGE - Nonce_DSToken - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeAddress(ABI_src) - andBool (#rangeAddress(ABI_dst) - andBool (#rangeUInt(256, ABI_wad) - andBool (#rangeUInt(256, Gem_s) - andBool (#rangeUInt(256, Gem_d) - andBool (#rangeUInt(256, Allowance) - andBool (#rangeAddress(Owner) - andBool (#rangeBool(Stopped) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Owner)) - andBool ((ABI_src =/=Int ABI_dst) - andBool ((ABI_src =/=Int CALLER_ID) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (((#rangeUInt(256, Gem_s -Int ABI_wad))) - andBool (((#rangeUInt(256, Gem_d +Int ABI_wad))) - andBool (((Allowance ==Int maxUInt256) orBool (ABI_wad <=Int Allowance)) - andBool ((VCallValue ==Int 0) - andBool ((Stopped ==Int 0)))))))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #DSToken.allowance[ABI_src][CALLER_ID]) ==Int Allowance - andBool #lookup(ACCT_ID_STORAGE, #DSToken.balances[ABI_src]) ==Int Gem_s - andBool #lookup(ACCT_ID_STORAGE, #DSToken.balances[ABI_dst]) ==Int Gem_d - andBool #lookup(ACCT_ID_STORAGE, #DSToken.owner_stopped) ==Int #WordPackAddrUInt8(Owner, Stopped) - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.allowance[ABI_src][CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.balances[ABI_src]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.balances[ABI_dst]) ==Int Junk_2 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.owner_stopped) ==Int Junk_3 - andBool #DSToken.allowance[ABI_src][CALLER_ID] =/=Int #DSToken.balances[ABI_src] - andBool #DSToken.allowance[ABI_src][CALLER_ID] =/=Int #DSToken.balances[ABI_dst] - andBool #DSToken.allowance[ABI_src][CALLER_ID] =/=Int #DSToken.owner_stopped - andBool #DSToken.balances[ABI_src] =/=Int #DSToken.balances[ABI_dst] - andBool #DSToken.balances[ABI_src] =/=Int #DSToken.owner_stopped - andBool #DSToken.balances[ABI_dst] =/=Int #DSToken.owner_stopped - andBool #rangeNonce(Nonce_DSToken) - [trusted] - - -endmodule diff --git a/tests/specs/mcd/flipper-addu48u48-fail-rough-spec.k b/tests/specs/mcd/flipper-addu48u48-fail-rough-spec.k deleted file mode 100644 index 9c36e090a9..0000000000 --- a/tests/specs/mcd/flipper-addu48u48-fail-rough-spec.k +++ /dev/null @@ -1,107 +0,0 @@ -requires "verification.k" - -module FLIPPER-ADDU48U48-FAIL-ROUGH-SPEC - imports VERIFICATION - - // Flipper_addu48u48 - claim [Flipper.addu48u48.fail.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => ?_ - _ => ?FAILURE:EndStatusCode - _VCallStack - _ - _ => ?_ - - Flipper_bin_runtime - #computeValidJumpDests(Flipper_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => ?_ - _ - 11354 => ?_ - #gas(VGas) => ?_ - VMemoryUsed - _ => ?_ - _ - VCallDepth => ?_ - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flipper_bin_runtime - ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_Flipper - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Flipper) - - andBool (#rangeUInt(48, ABI_x) - andBool (#rangeUInt(48, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed))))) - - - andBool notBool ( - ((#rangeUInt(48, ABI_x:Int +Int ABI_y:Int))) - ) - ensures - ?FAILURE =/=K EVMC_SUCCESS - -endmodule diff --git a/tests/specs/mcd/flipper-bids-pass-rough-spec.k b/tests/specs/mcd/flipper-bids-pass-rough-spec.k deleted file mode 100644 index 053d164fb0..0000000000 --- a/tests/specs/mcd/flipper-bids-pass-rough-spec.k +++ /dev/null @@ -1,143 +0,0 @@ -requires "verification.k" - -module FLIPPER-BIDS-PASS-ROUGH-SPEC - imports VERIFICATION - - // Flipper_bids - claim [Flipper.bids.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => #buf(32, Bid) +Bytes #buf(32, Lot) +Bytes #buf(32, Guy) +Bytes #buf(32, Tic) +Bytes #buf(32, End) +Bytes #buf(32, Usr) +Bytes #buf(32, Gal) +Bytes #buf(32, Tab) - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Flipper_bin_runtime - #computeValidJumpDests(Flipper_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("bids", #uint256(ABI_n)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flipper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Flipper => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_n) - andBool (#rangeUInt(256, Bid) - andBool (#rangeUInt(256, Lot) - andBool (#rangeAddress(Guy) - andBool (#rangeUInt(48, Tic) - andBool (#rangeUInt(48, End) - andBool (#rangeAddress(Usr) - andBool (#rangeAddress(Gal) - andBool (#rangeUInt(256, Tab) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#notPrecompileAddress(Guy) - andBool (#notPrecompileAddress(Usr) - andBool (#notPrecompileAddress(Gal) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool ((VCallValue ==Int 0))))))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Flipper.bids[ABI_n].bid) ==Int Bid - andBool #lookup(ACCT_ID_STORAGE, #Flipper.bids[ABI_n].lot) ==Int Lot - andBool #lookup(ACCT_ID_STORAGE, #Flipper.bids[ABI_n].guy_tic_end) ==Int #WordPackAddrUInt48UInt48(Guy, Tic, End) - andBool #lookup(ACCT_ID_STORAGE, #Flipper.bids[ABI_n].usr) ==Int Usr - andBool #lookup(ACCT_ID_STORAGE, #Flipper.bids[ABI_n].gal) ==Int Gal - andBool #lookup(ACCT_ID_STORAGE, #Flipper.bids[ABI_n].tab) ==Int Tab - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flipper.bids[ABI_n].bid) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flipper.bids[ABI_n].lot) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flipper.bids[ABI_n].guy_tic_end) ==Int Junk_2 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flipper.bids[ABI_n].usr) ==Int Junk_3 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flipper.bids[ABI_n].gal) ==Int Junk_4 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flipper.bids[ABI_n].tab) ==Int Junk_5 - andBool #Flipper.bids[ABI_n].bid =/=Int #Flipper.bids[ABI_n].lot - andBool #Flipper.bids[ABI_n].bid =/=Int #Flipper.bids[ABI_n].guy_tic_end - andBool #Flipper.bids[ABI_n].bid =/=Int #Flipper.bids[ABI_n].usr - andBool #Flipper.bids[ABI_n].bid =/=Int #Flipper.bids[ABI_n].gal - andBool #Flipper.bids[ABI_n].bid =/=Int #Flipper.bids[ABI_n].tab - andBool #Flipper.bids[ABI_n].lot =/=Int #Flipper.bids[ABI_n].guy_tic_end - andBool #Flipper.bids[ABI_n].lot =/=Int #Flipper.bids[ABI_n].usr - andBool #Flipper.bids[ABI_n].lot =/=Int #Flipper.bids[ABI_n].gal - andBool #Flipper.bids[ABI_n].lot =/=Int #Flipper.bids[ABI_n].tab - andBool #Flipper.bids[ABI_n].guy_tic_end =/=Int #Flipper.bids[ABI_n].usr - andBool #Flipper.bids[ABI_n].guy_tic_end =/=Int #Flipper.bids[ABI_n].gal - andBool #Flipper.bids[ABI_n].guy_tic_end =/=Int #Flipper.bids[ABI_n].tab - andBool #Flipper.bids[ABI_n].usr =/=Int #Flipper.bids[ABI_n].gal - andBool #Flipper.bids[ABI_n].usr =/=Int #Flipper.bids[ABI_n].tab - andBool #Flipper.bids[ABI_n].gal =/=Int #Flipper.bids[ABI_n].tab - -endmodule diff --git a/tests/specs/mcd/flipper-tau-pass-spec.k b/tests/specs/mcd/flipper-tau-pass-spec.k deleted file mode 100644 index f33c1d190a..0000000000 --- a/tests/specs/mcd/flipper-tau-pass-spec.k +++ /dev/null @@ -1,104 +0,0 @@ -requires "verification.k" - -module FLIPPER-TAU-PASS-SPEC - imports VERIFICATION - - // Flipper_tau - claim [Flipper.tau.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => #buf(32, Tau) - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Flipper_bin_runtime - #computeValidJumpDests(Flipper_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("tau", .TypedArgs) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( VGas +Int -1169 ) ) - 0 => ?_ - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flipper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_Flipper - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(48, Ttl) - andBool (#rangeUInt(48, Tau) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#rangeUInt(256, Junk_0) - andBool ((VCallValue ==Int 0)))))) - - andBool #lookup(ACCT_ID_STORAGE, #Flipper.ttl_tau) ==Int #WordPackUInt48UInt48(Ttl, Tau) - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flipper.ttl_tau) ==Int Junk_0 - andBool #rangeNonce(Nonce_Flipper) - -endmodule diff --git a/tests/specs/mcd/flipper-ttl-pass-spec.k b/tests/specs/mcd/flipper-ttl-pass-spec.k deleted file mode 100644 index 39357db9b3..0000000000 --- a/tests/specs/mcd/flipper-ttl-pass-spec.k +++ /dev/null @@ -1,103 +0,0 @@ -requires "verification.k" - -module FLIPPER-TTL-PASS-SPEC - imports VERIFICATION - - // Flipper_ttl - claim [Flipper.ttl.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => #buf(32, Ttl) - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Flipper_bin_runtime - #computeValidJumpDests(Flipper_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("ttl", .TypedArgs) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( VGas +Int -1120 ) ) - 0 => ?_ - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flipper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Flipper => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(48, Ttl) - andBool (#rangeUInt(48, Tau) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#rangeUInt(256, Junk_0) - andBool ((VCallValue ==Int 0)))))) - - andBool #lookup(ACCT_ID_STORAGE, #Flipper.ttl_tau) ==Int #WordPackUInt48UInt48(Ttl, Tau) - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flipper.ttl_tau) ==Int Junk_0 - -endmodule diff --git a/tests/specs/mcd/flopper-cage-pass-spec.k b/tests/specs/mcd/flopper-cage-pass-spec.k deleted file mode 100644 index 5b8492eba7..0000000000 --- a/tests/specs/mcd/flopper-cage-pass-spec.k +++ /dev/null @@ -1,115 +0,0 @@ -requires "verification.k" - -module FLOPPER-CAGE-PASS-SPEC - imports VERIFICATION - - // Flopper_cage - claim [Flopper.cage.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Flopper_bin_runtime - #computeValidJumpDests(Flopper_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("cage", .TypedArgs) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , 0 , Live , Junk_1 ) ) -Int Csstore( ISTANBUL , CALLER_ID , Vow , Junk_2 ) ) +Int -6351 ) ) - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flopper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Flopper.live <- 0 ] [ #Flopper.vow <- CALLER_ID ] - ACCT_ID_ORIG_STORAGE - _Nonce_Flopper => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, Ward) - andBool (#rangeUInt(256, Live) - andBool (#rangeAddress(Vow) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#notPrecompileAddress(Vow) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool ((Ward ==Int 1) - andBool ((VCallValue ==Int 0))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Flopper.wards[CALLER_ID]) ==Int Ward - andBool #lookup(ACCT_ID_STORAGE, #Flopper.live) ==Int Live - andBool #lookup(ACCT_ID_STORAGE, #Flopper.vow) ==Int Vow - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.wards[CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.live) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.vow) ==Int Junk_2 - andBool #Flopper.wards[CALLER_ID] =/=Int #Flopper.live - andBool #Flopper.wards[CALLER_ID] =/=Int #Flopper.vow - andBool #Flopper.live =/=Int #Flopper.vow - -endmodule diff --git a/tests/specs/mcd/flopper-dent-guy-diff-tic-not-0-pass-rough-spec.k b/tests/specs/mcd/flopper-dent-guy-diff-tic-not-0-pass-rough-spec.k deleted file mode 100644 index bec4b984d6..0000000000 --- a/tests/specs/mcd/flopper-dent-guy-diff-tic-not-0-pass-rough-spec.k +++ /dev/null @@ -1,517 +0,0 @@ -requires "verification.k" - -module FLOPPER-DENT-GUY-DIFF-TIC-NOT-0-PASS-ROUGH-SPEC - imports VERIFICATION - - // Flopper_dent-guy-diff-tic-not-0 - claim [Flopper.dent-guy-diff-tic-not-0.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Flopper_bin_runtime - #computeValidJumpDests(Flopper_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("dent", #uint256(ABI_id), #uint256(ABI_lot), #uint256(ABI_bid)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flopper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Flopper.bids[ABI_id].lot <- ABI_lot ] [ #Flopper.bids[ABI_id].guy_tic_end <- #WordPackAddrUInt48UInt48(CALLER_ID, TIME +Int Ttl, End) ] - ACCT_ID_ORIG_STORAGE - Nonce_Flopper - - - Vat - Vat_balance - Vat_bin_runtime - Vat_STORAGE => Vat_STORAGE [ #Vat.dai[CALLER_ID] <- Dai_a -Int ABI_bid ] [ #Vat.dai[Guy] <- Dai_g +Int ABI_bid ] - Vat_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Flopper) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeUInt(256, ABI_id) - andBool (#rangeUInt(256, ABI_lot) - andBool (#rangeUInt(256, ABI_bid) - andBool (#rangeUInt(256, Live) - andBool (#rangeAddress(Vat) - andBool (#rangeUInt(256, Beg) - andBool (#rangeUInt(48, Ttl) - andBool (#rangeUInt(48, Tau) - andBool (#rangeUInt(256, Bid) - andBool (#rangeUInt(256, Lot) - andBool (#rangeAddress(Guy) - andBool (#rangeUInt(48, Tic) - andBool (#rangeUInt(48, End) - andBool (#rangeUInt(256, CanMove) - andBool (#rangeUInt(256, Dai_a) - andBool (#rangeUInt(256, Dai_g) - andBool (#rangeUInt(256, Vat_balance) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Vat)) - andBool ((#notPrecompileAddress(Guy)) - andBool ((ACCT_ID =/=Int Vat) - andBool ((CALLER_ID =/=Int ACCT_ID) - andBool ((CALLER_ID =/=Int Guy) - andBool ((#rangeUInt(48, TIME)) - andBool ((Tic =/=Int 0) - andBool ((Vat =/=Int 0) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool (#rangeUInt(256, Junk_6) - andBool (#rangeUInt(256, Junk_7) - andBool (#rangeUInt(256, Junk_8) - andBool (#rangeUInt(256, Junk_9) - andBool ((((Live ==Int 1))) - andBool ((((Guy =/=Int 0))) - andBool ((((Tic >Int TIME))) - andBool ((((End >Int TIME))) - andBool ((((ABI_bid ==Int Bid))) - andBool ((((ABI_lot #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Flopper_bin_runtime - #computeValidJumpDests(Flopper_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x *Int ABI_y : WS - _ - 8685 => 8728 - #gas(VGas) => #if ABI_y ==Int 0 - #then #gas ( ( VGas +Int -54 ) ) - #else #gas ( ( VGas +Int -106 ) ) - #fi - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flopper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_Flopper - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Flopper) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1000) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x *Int ABI_y))))))) - - - [trusted] - - - // Flopper_addu48u48 - claim [Flopper.addu48u48.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Flopper_bin_runtime - #computeValidJumpDests(Flopper_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS - _ - 8757 => 8798 - #gas(VGas) => #gas ( ( VGas +Int -66 ) ) - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flopper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_Flopper - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Flopper) - - andBool (#rangeUInt(48, ABI_x) - andBool (#rangeUInt(48, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(48, ABI_x +Int ABI_y))))))) - - [trusted] - - - // Vat_move-diff - claim [Vat.move-diff.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("move", #address(ABI_src), #address(ABI_dst), #uint256(ABI_rad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Dai_src -Int ABI_rad ) , Dai_src , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Dai_dst +Int ABI_rad ) , Dai_dst , Junk_2 ) ) +Int -7943 ) ) - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Vat.dai[ABI_src] <- Dai_src -Int ABI_rad ] [ #Vat.dai[ABI_dst] <- Dai_dst +Int ABI_rad ] - ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeAddress(ABI_src) - andBool (#rangeAddress(ABI_dst) - andBool (#rangeUInt(256, ABI_rad) - andBool (#rangeUInt(256, Dai_dst) - andBool (#rangeUInt(256, Dai_src) - andBool (#rangeUInt(256, May) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((ABI_src =/=Int ABI_dst) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool ((((May ==Int 1 orBool ABI_src ==Int CALLER_ID))) - andBool (((VCallValue ==Int 0)) - andBool ((#rangeUInt(256, Dai_src -Int ABI_rad)) - andBool ((#rangeUInt(256, Dai_dst +Int ABI_rad))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.can[ABI_src][CALLER_ID]) ==Int May - andBool #lookup(ACCT_ID_STORAGE, #Vat.dai[ABI_src]) ==Int Dai_src - andBool #lookup(ACCT_ID_STORAGE, #Vat.dai[ABI_dst]) ==Int Dai_dst - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.can[ABI_src][CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.dai[ABI_src]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.dai[ABI_dst]) ==Int Junk_2 - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.dai[ABI_src] - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.dai[ABI_dst] - andBool #Vat.dai[ABI_src] =/=Int #Vat.dai[ABI_dst] - [trusted] - - -endmodule diff --git a/tests/specs/mcd/flopper-dent-guy-same-pass-rough-spec.k b/tests/specs/mcd/flopper-dent-guy-same-pass-rough-spec.k deleted file mode 100644 index 139621a905..0000000000 --- a/tests/specs/mcd/flopper-dent-guy-same-pass-rough-spec.k +++ /dev/null @@ -1,366 +0,0 @@ -requires "verification.k" - -module FLOPPER-DENT-GUY-SAME-PASS-ROUGH-SPEC - imports VERIFICATION - - // Flopper_dent-guy-same - claim [Flopper.dent-guy-same.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Flopper_bin_runtime - #computeValidJumpDests(Flopper_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("dent", #uint256(ABI_id), #uint256(ABI_lot), #uint256(ABI_bid)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flopper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Flopper.bids[ABI_id].lot <- ABI_lot ] [ #Flopper.bids[ABI_id].guy_tic_end <- #WordPackAddrUInt48UInt48(Guy, TIME +Int Ttl, End) ] - ACCT_ID_ORIG_STORAGE - _Nonce_Flopper => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_id) - andBool (#rangeUInt(256, ABI_lot) - andBool (#rangeUInt(256, ABI_bid) - andBool (#rangeUInt(256, Live) - andBool (#rangeAddress(Vat) - andBool (#rangeUInt(256, Beg) - andBool (#rangeUInt(48, Ttl) - andBool (#rangeUInt(48, Tau) - andBool (#rangeUInt(256, Bid) - andBool (#rangeUInt(256, Lot) - andBool (#rangeAddress(Guy) - andBool (#rangeUInt(48, Tic) - andBool (#rangeUInt(48, End) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Vat)) - andBool ((#notPrecompileAddress(Guy)) - andBool ((CALLER_ID =/=Int ACCT_ID) - andBool ((CALLER_ID ==Int Guy) - andBool ((#rangeUInt(48, TIME)) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool (#rangeUInt(256, Junk_6) - andBool (((Live ==Int 1)) - andBool (((Guy =/=Int 0)) - andBool (((Tic >Int TIME orBool Tic ==Int 0)) - andBool (((End >Int TIME)) - andBool (((ABI_bid ==Int Bid)) - andBool (((ABI_lot #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Flopper_bin_runtime - #computeValidJumpDests(Flopper_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x *Int ABI_y : WS - _ - 8685 => 8728 - #gas(VGas) => #if ABI_y ==Int 0 - #then #gas ( ( VGas +Int -54 ) ) - #else #gas ( ( VGas +Int -106 ) ) - #fi - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flopper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Flopper => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1000) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x *Int ABI_y))))))) - - - [trusted] - - - // Flopper_addu48u48 - claim [Flopper.addu48u48.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Flopper_bin_runtime - #computeValidJumpDests(Flopper_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS - _ - 8757 => 8798 - #gas(VGas) => #gas ( ( VGas +Int -66 ) ) - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flopper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Flopper => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(48, ABI_x) - andBool (#rangeUInt(48, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(48, ABI_x +Int ABI_y))))))) - - - [trusted] - - -endmodule diff --git a/tests/specs/mcd/flopper-file-pass-rough-spec.k b/tests/specs/mcd/flopper-file-pass-rough-spec.k deleted file mode 100644 index 957ff41905..0000000000 --- a/tests/specs/mcd/flopper-file-pass-rough-spec.k +++ /dev/null @@ -1,124 +0,0 @@ -requires "verification.k" - -module FLOPPER-FILE-PASS-ROUGH-SPEC - imports VERIFICATION - - // Flopper_file - claim [Flopper.file.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Flopper_bin_runtime - #computeValidJumpDests(Flopper_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("file", #bytes32(ABI_what), #uint256(ABI_data)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flopper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Flopper.beg <- (#if ABI_what ==Int #string2Word("beg") #then ABI_data #else Beg #fi) ] [ #Flopper.pad <- (#if ABI_what ==Int #string2Word("pad") #then ABI_data #else Pad #fi) ] [ #Flopper.ttl_tau <- (#if ABI_what ==Int #string2Word("ttl") #then #WordPackUInt48UInt48(maxUInt48 &Int ABI_data, Tau) #else (#if ABI_what ==Int #string2Word("tau") #then #WordPackUInt48UInt48(Ttl, maxUInt48 &Int ABI_data) #else #WordPackUInt48UInt48(Ttl, Tau) #fi) #fi) ] - ACCT_ID_ORIG_STORAGE - _Nonce_Flopper => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeBytes(32, ABI_what) - andBool (#rangeUInt(256, ABI_data) - andBool (#rangeUInt(256, May) - andBool (#rangeUInt(256, Beg) - andBool (#rangeUInt(256, Pad) - andBool (#rangeUInt(48, Ttl) - andBool (#rangeUInt(48, Tau) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool ((May ==Int 1) - andBool ((VCallValue ==Int 0) - andBool (((ABI_what ==Int #string2Word("beg")) orBool (ABI_what ==Int #string2Word("pad")) orBool (ABI_what ==Int #string2Word("ttl")) orBool (ABI_what ==Int #string2Word("tau")))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Flopper.wards[CALLER_ID]) ==Int May - andBool #lookup(ACCT_ID_STORAGE, #Flopper.beg) ==Int Beg - andBool #lookup(ACCT_ID_STORAGE, #Flopper.pad) ==Int Pad - andBool #lookup(ACCT_ID_STORAGE, #Flopper.ttl_tau) ==Int #WordPackUInt48UInt48(Ttl, Tau) - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.wards[CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.beg) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.pad) ==Int Junk_2 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.ttl_tau) ==Int Junk_3 - andBool #Flopper.wards[CALLER_ID] =/=Int #Flopper.beg - andBool #Flopper.wards[CALLER_ID] =/=Int #Flopper.pad - andBool #Flopper.wards[CALLER_ID] =/=Int #Flopper.ttl_tau - andBool #Flopper.beg =/=Int #Flopper.pad - andBool #Flopper.beg =/=Int #Flopper.ttl_tau - andBool #Flopper.pad =/=Int #Flopper.ttl_tau -endmodule \ No newline at end of file diff --git a/tests/specs/mcd/flopper-kick-pass-rough-spec.k b/tests/specs/mcd/flopper-kick-pass-rough-spec.k deleted file mode 100644 index d2a1839979..0000000000 --- a/tests/specs/mcd/flopper-kick-pass-rough-spec.k +++ /dev/null @@ -1,257 +0,0 @@ -requires "verification.k" - -module FLOPPER-KICK-PASS-ROUGH-SPEC - imports VERIFICATION - - // Flopper_kick - claim [Flopper.kick.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => #buf(32, 1 +Int Kicks) - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Flopper_bin_runtime - #computeValidJumpDests(Flopper_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("kick", #address(ABI_gal), #uint256(ABI_lot), #uint256(ABI_bid)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flopper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Flopper.kicks <- 1 +Int Kicks ] [ #Flopper.bids[1 +Int Kicks].bid <- ABI_bid ] [ #Flopper.bids[1 +Int Kicks].lot <- ABI_lot ] [ #Flopper.bids[1 +Int Kicks].guy_tic_end <- #WordPackAddrUInt48UInt48(ABI_gal, Old_tic, TIME +Int Tau) ] - ACCT_ID_ORIG_STORAGE - _Nonce_Flopper => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeAddress(ABI_gal) - andBool (#rangeUInt(256, ABI_lot) - andBool (#rangeUInt(256, ABI_bid) - andBool (#rangeUInt(256, Live) - andBool (#rangeUInt(256, Kicks) - andBool (#rangeUInt(48, Ttl) - andBool (#rangeUInt(48, Tau) - andBool (#rangeUInt(256, Old_lot) - andBool (#rangeUInt(256, Old_bid) - andBool (#rangeAddress(Old_guy) - andBool (#rangeUInt(48, Old_tic) - andBool (#rangeUInt(48, Old_end) - andBool (#rangeUInt(256, Ward) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Old_guy)) - andBool ((#rangeUInt(48, TIME)) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool (#rangeUInt(256, Junk_6) - andBool ((((Ward ==Int 1))) - andBool ((((Live ==Int 1))) - andBool ((((VCallValue ==Int 0))) - andBool (((#rangeUInt(256, Kicks +Int 1))) - andBool ((#rangeUInt(48, TIME +Int Tau)))))))))))))))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Flopper.wards[CALLER_ID]) ==Int Ward - andBool #lookup(ACCT_ID_STORAGE, #Flopper.live) ==Int Live - andBool #lookup(ACCT_ID_STORAGE, #Flopper.kicks) ==Int Kicks - andBool #lookup(ACCT_ID_STORAGE, #Flopper.ttl_tau) ==Int #WordPackUInt48UInt48(Ttl, Tau) - andBool #lookup(ACCT_ID_STORAGE, #Flopper.bids[1 +Int Kicks].bid) ==Int Old_bid - andBool #lookup(ACCT_ID_STORAGE, #Flopper.bids[1 +Int Kicks].lot) ==Int Old_lot - andBool #lookup(ACCT_ID_STORAGE, #Flopper.bids[1 +Int Kicks].guy_tic_end) ==Int #WordPackAddrUInt48UInt48(Old_guy, Old_tic, Old_end) - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.wards[CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.live) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.kicks) ==Int Junk_2 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.ttl_tau) ==Int Junk_3 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.bids[1 +Int Kicks].bid) ==Int Junk_4 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.bids[1 +Int Kicks].lot) ==Int Junk_5 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.bids[1 +Int Kicks].guy_tic_end) ==Int Junk_6 - andBool #Flopper.wards[CALLER_ID] =/=Int #Flopper.live - andBool #Flopper.wards[CALLER_ID] =/=Int #Flopper.kicks - andBool #Flopper.wards[CALLER_ID] =/=Int #Flopper.ttl_tau - andBool #Flopper.wards[CALLER_ID] =/=Int #Flopper.bids[1 +Int Kicks].bid - andBool #Flopper.wards[CALLER_ID] =/=Int #Flopper.bids[1 +Int Kicks].lot - andBool #Flopper.wards[CALLER_ID] =/=Int #Flopper.bids[1 +Int Kicks].guy_tic_end - andBool #Flopper.live =/=Int #Flopper.kicks - andBool #Flopper.live =/=Int #Flopper.ttl_tau - andBool #Flopper.live =/=Int #Flopper.bids[1 +Int Kicks].bid - andBool #Flopper.live =/=Int #Flopper.bids[1 +Int Kicks].lot - andBool #Flopper.live =/=Int #Flopper.bids[1 +Int Kicks].guy_tic_end - andBool #Flopper.kicks =/=Int #Flopper.ttl_tau - andBool #Flopper.kicks =/=Int #Flopper.bids[1 +Int Kicks].bid - andBool #Flopper.kicks =/=Int #Flopper.bids[1 +Int Kicks].lot - andBool #Flopper.kicks =/=Int #Flopper.bids[1 +Int Kicks].guy_tic_end - andBool #Flopper.ttl_tau =/=Int #Flopper.bids[1 +Int Kicks].bid - andBool #Flopper.ttl_tau =/=Int #Flopper.bids[1 +Int Kicks].lot - andBool #Flopper.ttl_tau =/=Int #Flopper.bids[1 +Int Kicks].guy_tic_end - andBool #Flopper.bids[1 +Int Kicks].bid =/=Int #Flopper.bids[1 +Int Kicks].lot - andBool #Flopper.bids[1 +Int Kicks].bid =/=Int #Flopper.bids[1 +Int Kicks].guy_tic_end - andBool #Flopper.bids[1 +Int Kicks].lot =/=Int #Flopper.bids[1 +Int Kicks].guy_tic_end - - // Flopper_addu48u48 - claim [Flopper.addu48u48.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Flopper_bin_runtime - #computeValidJumpDests(Flopper_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS - _ - 8757 => 8798 - #gas(VGas) => #gas ( ( VGas +Int -66 ) ) - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flopper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Flopper => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(48, ABI_x) - andBool (#rangeUInt(48, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(48, ABI_x +Int ABI_y))))))) - - - [trusted] - - -endmodule diff --git a/tests/specs/mcd/flopper-tick-pass-rough-spec.k b/tests/specs/mcd/flopper-tick-pass-rough-spec.k deleted file mode 100644 index f4d50ee95e..0000000000 --- a/tests/specs/mcd/flopper-tick-pass-rough-spec.k +++ /dev/null @@ -1,228 +0,0 @@ -requires "verification.k" - -module FLOPPER-TICK-PASS-ROUGH-SPEC - imports VERIFICATION - - // Flopper_tick - claim [Flopper.tick.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Flopper_bin_runtime - #computeValidJumpDests(Flopper_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("tick", #uint256(ABI_id)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flopper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Flopper.bids[ABI_id].lot <- (Pad *Int Lot) /Int #Wad ] [ #Flopper.bids[ABI_id].guy_tic_end <- #WordPackAddrUInt48UInt48(Guy, Tic, TIME +Int Tau) ] - ACCT_ID_ORIG_STORAGE - _Nonce_Flopper => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_id) - andBool (#rangeUInt(256, Pad) - andBool (#rangeUInt(48, Ttl) - andBool (#rangeUInt(48, Tau) - andBool (#rangeUInt(256, Lot) - andBool (#rangeAddress(Guy) - andBool (#rangeUInt(48, Tic) - andBool (#rangeUInt(48, End) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Guy)) - andBool ((#rangeUInt(48, TIME)) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (((VCallValue ==Int 0)) - andBool (((Tic ==Int 0)) - andBool (((End #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Flopper_bin_runtime - #computeValidJumpDests(Flopper_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS - _ - 8757 => 8798 - #gas(VGas) => #gas ( ( VGas +Int -66 ) ) - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flopper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Flopper => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(48, ABI_x) - andBool (#rangeUInt(48, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(48, ABI_x +Int ABI_y))))))) - - - [trusted] - - -endmodule diff --git a/tests/specs/mcd/functional-spec.k b/tests/specs/mcd/functional-spec.k deleted file mode 100644 index 9877d677f4..0000000000 --- a/tests/specs/mcd/functional-spec.k +++ /dev/null @@ -1,142 +0,0 @@ -requires "verification.k" - -module FUNCTIONAL-SPEC-SYNTAX - imports VERIFICATION - - syntax KItem ::= runLemma ( Step ) | doneLemma ( Step ) - // ------------------------------------------------------- - rule runLemma(S) => doneLemma(S) ... - - syntax Step ::= Bool | Int | Bytes - // ---------------------------------- - -endmodule - -module FUNCTIONAL-SPEC - imports FUNCTIONAL-SPEC-SYNTAX - - // Arithmetic - - claim ((X +Int pow256) -Int chop(Y)) => (X -Int Y) - requires #rangeUInt(256, X) - andBool #rangeSInt(256, Y) - andBool Y (chop(Art_i *Int ABI_rate)) - requires #rangeUInt(256, Art_i) - andBool Art_i <=Int maxSInt256 - andBool #rangeSInt(256, Art_i *Int ABI_rate) - - claim (maxUInt48 &Int ABI_x <=Int maxUInt48 &Int ABI_x +Int ABI_y) => (false) - requires #rangeUInt(48, ABI_x) - andBool #rangeUInt(48, ABI_y) - andBool notBool #rangeUInt(48, ABI_x +Int ABI_y) - - claim ( (maxUInt48 &Int W1) +Int (maxUInt160 &Int W2) ) - => ( X +Int Y ) - requires (W1 ==Int #WordPackUInt48UInt48(X, _)) - andBool (W2 ==Int #WordPackAddrUInt48UInt48(Y, _, _)) - - claim (bool2Word(ABI_src:Int ==Int CALLER_ID:Int) |Int bool2Word(X)) => (bool2Word(ABI_src ==Int CALLER_ID orBool X)) - requires #rangeUInt(256, ABI_src) - andBool #rangeUInt(256, CALLER_ID) - - claim (bool2Word(ABI_src ==Int CALLER_ID orBool X) ==Int 0) => (notBool(ABI_src ==Int CALLER_ID orBool X)) - requires #rangeUInt(256, ABI_src) - andBool #rangeUInt(256, CALLER_ID) - - claim ( chop( A -Int B ) <=Int A ) => ( false ) - requires #rangeUInt(256, A) andBool #rangeUInt(256, B) andBool A -Int B (GAL |Int (notMaxUInt160 &Int GUY_TIC_END)) - requires #rangeUInt(256, GUY_TIC_END) - andBool #rangeAddress(GAL) - - claim (TIME +Int (TTL_TAU /Int pow48)) => (TIME +Int TAU) - requires TTL_TAU ==Int #WordPackUInt48UInt48(TTL, TAU) - andBool #rangeUInt(48, TIME +Int TAU) - - claim (maxUInt48 &Int ((GAL |Int (notMaxUInt160 &Int GUY_TIC_END)) /Int pow160)) => (TIC) - requires GUY_TIC_END ==Int #WordPackAddrUInt48UInt48(GUY, TIC, END) - andBool #rangeAddress(GAL) - - claim (maxUInt160 &Int (GAL |Int (notMaxUInt160 &Int GUY_TIC_END))) => (GAL) - requires GUY_TIC_END ==Int #WordPackAddrUInt48UInt48(GUY, TIC, END) - andBool #rangeAddress(GAL) - - claim [wordPackSimplify1]: runLemma((((TIME +Int (maxUInt48 &Int (TTL_TAU /Int pow48))) *Int pow208) |Int (maxUInt208 &Int - (GAL |Int (notMaxUInt160 &Int GUY_TIC_END))))) => doneLemma(#WordPackAddrUInt48UInt48(GAL, TIC, TIME +Int TAU)) - ... - requires TTL_TAU ==Int #WordPackUInt48UInt48(TTL, TAU) - andBool GUY_TIC_END ==Int #WordPackAddrUInt48UInt48(GUY, TIC, END) - andBool #rangeAddress(GAL) - andBool #rangeUInt(48, TIME +Int TAU) - - claim [wordPackSimplify2]: runLemma((((TIME +Int (maxUInt48 &Int TTL_TAU)) *Int pow160) |Int - (maskWordPackAddrUInt48UInt48_2 &Int GUY_TIC_END))) => doneLemma(#WordPackAddrUInt48UInt48(GUY, TIME +Int TTL, - END)) ... - requires TTL_TAU ==Int #WordPackUInt48UInt48(TTL, TAU) - andBool GUY_TIC_END ==Int #WordPackAddrUInt48UInt48(GUY, TIC, END) - andBool #rangeUInt(48, TIME +Int TTL) - - claim (maxUInt48 &Int ((CALLER_ID |Int (notMaxUInt160 &Int #lookup(M, KX))) /Int pow208)) => (maxUInt48 &Int (#lookup(M, KX) /Int pow208)) - requires #rangeAddress(CALLER_ID) - - claim (TIME +Int ( maxUInt48 &Int #lookup ( ACCT_ID_STORAGE [ keccak ( #buf ( 32 , ABI_id ) +Bytes X ) +Int 1 <- #lookup ( ACCT_ID_STORAGE , 5 ) *Int #lookup ( ACCT_ID_STORAGE , keccak ( #buf ( 32 , ABI_id ) +Bytes X ) +Int 1 ) /Int 1000000000000000000 ] , 6 ) /Int pow48 ) (true) - requires #lookup(ACCT_ID_STORAGE, 6) ==Int #WordPackUInt48UInt48(_, Tau) - andBool #rangeUInt(48, TIME +Int Tau) - - claim [bytesDisjointSetCommutative1]: runLemma( ACCT_ID_STORAGE [ keccak ( #buf ( 32 , ABI_id ) +Bytes X) +Int 1 <- ABI_lot:Int ] [ keccak ( #buf ( 32 , ABI_id ) +Bytes X) +Int 2 <- #WordPackAddrUInt48UInt48 ( CALLER_ID , TIME +Int ( maxUInt48 &Int #lookup ( ACCT_ID_STORAGE , 6 ) ) , #lookup ( ACCT_ID_STORAGE , keccak ( #buf ( 32 , ABI_id ) +Bytes X) +Int 2 ) /Int pow208 ) ] - ==K - ACCT_ID_STORAGE [ keccak ( #buf ( 32 , ABI_id ) +Bytes X) +Int 2 <- #WordPackAddrUInt48UInt48 ( CALLER_ID , TIME +Int ( maxUInt48 &Int #lookup ( ACCT_ID_STORAGE , 6 ) ) , #lookup ( ACCT_ID_STORAGE , keccak ( #buf ( 32 , ABI_id ) +Bytes X) +Int 2 ) /Int pow208 ) ] [ keccak ( #buf ( 32 , ABI_id ) +Bytes X) +Int 1 <- ABI_lot:Int ]) - => doneLemma(true) ... - - - claim (#lookup( M:Map [ keccak(_) <- _ ], I:Int )) - => (#lookup( M , I )) - requires #rangeSmall(I) - - // Memory operations - - claim [bufferRangeSelectSymbolic]: runLemma(#range(M:Bytes [ 0 := #buf(4, X) ] [ 0 <- 10 ] [ 1 <- 11 ] [ 2 <- 12 ] [ 3 <- 13 ], 0, 4)) => - doneLemma(10 : 11 : 12 : 13 : .Bytes) ... - - claim ( M:Bytes [ 132 := #buf(32, B11) ] [ 128 := #buf(32, B21) +Bytes #buf(32, B22) ] ) => ( M [ 128 := (#buf(32, B21) +Bytes #buf(32, B22)) ] ) - requires #rangeUInt(256, B11) andBool #rangeUInt(256, B21) andBool #rangeUInt(256, B22) - - claim ( M:Bytes [ 128 := #buf(32, B31) +Bytes #buf(32, B32) ] [ 128 := #buf(32, B41) ] ) => ( M [ 128 := #buf(32, B41) ] [ 160 := #buf(32, B32) ] ) - requires #rangeUInt(256, B31) andBool #rangeUInt(256, B32) andBool #rangeUInt(256, B41) - - claim ( M:Bytes [ 128 := 217 : 99 : 141 : 54 : .Bytes ] - [ 132 := #buf(32, B11) ] - [ 128 := #buf(32, B21) +Bytes #buf(32, B22) +Bytes #buf(32, B23) +Bytes #buf(32, B24) +Bytes #buf(32, B25) ] - [ 128 := 217 : 99 : 141 : 54 : .Bytes ] - [ 132 := #buf(32, B11) ] - [ 128 := #buf(32, B31) +Bytes #buf(32, B32) ] - [ 128 := #buf(32, B41) ] ) - => ( M [ 128 := #buf(32, B41) ] - [ 160 := #buf(32, B32) ] - [ 192 := #buf(32, B23) +Bytes #buf(32, B24) +Bytes #buf(32, B25) ] ) - - - requires #rangeUInt(256, B11) - andBool #rangeUInt(256, B21) andBool #rangeUInt(256, B22) andBool #rangeUInt(256, B23) andBool #rangeUInt(256, B24) andBool #rangeUInt(256, B25) - andBool #rangeUInt(256, B31) andBool #rangeUInt(256, B32) - andBool #rangeUInt(256, B41) - - claim (maxUInt48 &Int (maxUInt48 -Int 1) (true) - claim (maxUInt160 &Int (maxUInt160 -Int 1) (true) - - claim ((maxUInt48 &Int maxUInt48) /Int maxUInt48) => (1) - claim ((maxUInt160 &Int maxUInt160) /Int maxUInt160) => (1) - - claim ((maxUInt48 &Int M) /Int (maxUInt48 +Int 1)) => (0) - requires M >Int 0 - - claim ((maxUInt160 &Int M) /Int (maxUInt160 +Int 1)) => (0) - requires M >Int 0 - -endmodule diff --git a/tests/specs/mcd/gemjoin-exit-pass-rough-spec.k b/tests/specs/mcd/gemjoin-exit-pass-rough-spec.k deleted file mode 100644 index 4d8196a589..0000000000 --- a/tests/specs/mcd/gemjoin-exit-pass-rough-spec.k +++ /dev/null @@ -1,409 +0,0 @@ -requires "verification.k" - -module GEMJOIN-EXIT-PASS-ROUGH-SPEC - imports VERIFICATION - - // GemJoin_exit - claim [GemJoin.exit.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - GemJoin_bin_runtime - #computeValidJumpDests(GemJoin_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("exit", #address(ABI_usr), #uint256(ABI_wad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - GemJoin_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_GemJoin - - - Vat - Vat_balance - Vat_bin_runtime - Vat_STORAGE => Vat_STORAGE [ #Vat.gem[Ilk][CALLER_ID] <- Wad -Int ABI_wad ] - Vat_ORIG_STORAGE - Nonce_Vat - - - DSToken - DSToken_balance - DSToken_bin_runtime - DSToken_STORAGE => DSToken_STORAGE [ #DSToken.balances[ACCT_ID] <- Bal_adapter -Int ABI_wad ] [ #DSToken.balances[ABI_usr] <- Bal_usr +Int ABI_wad ] - DSToken_ORIG_STORAGE - Nonce_DSToken - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_GemJoin) - andBool #rangeNonce(Nonce_Vat) - andBool #rangeNonce(Nonce_DSToken) - - andBool (#rangeAddress(ABI_usr) - andBool (#rangeUInt(256, ABI_wad) - andBool (#rangeAddress(Vat) - andBool (#rangeBytes(32, Ilk) - andBool (#rangeAddress(DSToken) - andBool (#rangeUInt(256, May) - andBool (#rangeUInt(256, Wad) - andBool (#rangeUInt(256, Bal_usr) - andBool (#rangeUInt(256, Bal_adapter) - andBool (#rangeAddress(Owner) - andBool (#rangeBool(Stopped) - andBool (#rangeUInt(256, Vat_balance) - andBool (#rangeUInt(256, DSToken_balance) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Vat)) - andBool ((#notPrecompileAddress(DSToken)) - andBool ((#notPrecompileAddress(Owner)) - andBool ((ACCT_ID =/=Int Vat) - andBool ((ACCT_ID =/=Int DSToken) - andBool ((ACCT_ID =/=Int ABI_usr) - andBool ((Vat =/=Int 0) - andBool ((DSToken =/=Int 0) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool (#rangeUInt(256, Junk_6) - andBool (#rangeUInt(256, Junk_7) - andBool (((VCallValue ==Int 0)) - andBool (((VCallDepth #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("slip", #bytes32(ABI_ilk), #address(ABI_usr), #int256(ABI_wad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #if ( ABI_wad - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Vat.gem[ABI_ilk][ABI_usr] <- Gem +Int ABI_wad ] - ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeBytes(32, ABI_ilk) - andBool (#rangeAddress(ABI_usr) - andBool (#rangeSInt(256, ABI_wad) - andBool (#rangeUInt(256, May) - andBool (#rangeUInt(256, Gem) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (((May ==Int 1)) - andBool (((VCallValue ==Int 0)) - andBool ((#rangeUInt(256, Gem +Int ABI_wad))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.wards[CALLER_ID]) ==Int May - andBool #lookup(ACCT_ID_STORAGE, #Vat.gem[ABI_ilk][ABI_usr]) ==Int Gem - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.wards[CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.gem[ABI_ilk][ABI_usr]) ==Int Junk_1 - andBool #Vat.wards[CALLER_ID] =/=Int #Vat.gem[ABI_ilk][ABI_usr] - [trusted] - - - // DSToken_transfer - claim [DSToken.transfer.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => #buf(32, 1) - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - DSToken_bin_runtime - #computeValidJumpDests(DSToken_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("transfer", #address(ABI_usr), #uint256(ABI_wad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Gem_c -Int ABI_wad ) , Gem_c , Junk_0 ) ) -Int Csstore( ISTANBUL , ( Gem_u +Int ABI_wad ) , Gem_u , Junk_1 ) ) +Int -6391 ) ) - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - DSToken_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #DSToken.balances[CALLER_ID] <- Gem_c -Int ABI_wad ] [ #DSToken.balances[ABI_usr] <- Gem_u +Int ABI_wad ] - ACCT_ID_ORIG_STORAGE - Nonce_DSToken - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_DSToken) - - andBool (#rangeAddress(ABI_usr) - andBool (#rangeUInt(256, ABI_wad) - andBool (#rangeUInt(256, Gem_c) - andBool (#rangeUInt(256, Gem_u) - andBool (#rangeAddress(Owner) - andBool (#rangeBool(Stopped) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Owner)) - andBool ((ABI_usr =/=Int CALLER_ID) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (((#rangeUInt(256, Gem_c -Int ABI_wad))) - andBool (((#rangeUInt(256, Gem_u +Int ABI_wad))) - andBool ((Stopped ==Int 0) - andBool ((VCallValue ==Int 0))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #DSToken.balances[CALLER_ID]) ==Int Gem_c - andBool #lookup(ACCT_ID_STORAGE, #DSToken.balances[ABI_usr]) ==Int Gem_u - andBool #lookup(ACCT_ID_STORAGE, #DSToken.owner_stopped) ==Int #WordPackAddrUInt8(Owner, Stopped) - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.balances[CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.balances[ABI_usr]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #DSToken.owner_stopped) ==Int Junk_2 - andBool #DSToken.balances[CALLER_ID] =/=Int #DSToken.balances[ABI_usr] - andBool #DSToken.balances[CALLER_ID] =/=Int #DSToken.owner_stopped - andBool #DSToken.balances[ABI_usr] =/=Int #DSToken.owner_stopped - [trusted] - - -endmodule diff --git a/tests/specs/mcd/pot-join-pass-rough-spec.k b/tests/specs/mcd/pot-join-pass-rough-spec.k deleted file mode 100644 index 459f84fc32..0000000000 --- a/tests/specs/mcd/pot-join-pass-rough-spec.k +++ /dev/null @@ -1,485 +0,0 @@ -requires "verification.k" - -module POT-JOIN-PASS-ROUGH-SPEC - imports VERIFICATION - - // Pot_join - claim [Pot.join.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Pot_bin_runtime - #computeValidJumpDests(Pot_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("join", #uint256(ABI_wad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Pot_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Pot.pie[CALLER_ID] <- Pie_u +Int ABI_wad ] [ #Pot.Pie <- Pie_tot +Int ABI_wad ] - ACCT_ID_ORIG_STORAGE - Nonce_Pot - - - Vat - Vat_balance - Vat_bin_runtime - Vat_STORAGE => Vat_STORAGE [ #Vat.dai[CALLER_ID] <- Dai_u -Int Chi *Int ABI_wad ] [ #Vat.dai[ACCT_ID] <- Dai_p +Int Chi *Int ABI_wad ] - Vat_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Pot) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeUInt(256, ABI_wad) - andBool (#rangeUInt(256, Pie_u) - andBool (#rangeUInt(256, Pie_tot) - andBool (#rangeUInt(256, Chi) - andBool (#rangeUInt(256, Rho) - andBool (#rangeAddress(Vat) - andBool (#rangeUInt(256, Can) - andBool (#rangeUInt(256, Dai_u) - andBool (#rangeUInt(256, Dai_p) - andBool (#rangeUInt(256, Vat_balance) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Vat)) - andBool ((ACCT_ID =/=Int Vat) - andBool ((ACCT_ID =/=Int CALLER_ID) - andBool ((Vat =/=Int 0) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool (#rangeUInt(256, Junk_6) - andBool (#rangeUInt(256, Junk_7) - andBool (((VCallValue ==Int 0)) - andBool (((VCallDepth #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Pot_bin_runtime - #computeValidJumpDests(Pot_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS - _ - 4851 => 4876 - #gas(VGas) => #gas ( ( VGas +Int -54 ) ) - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Pot_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_Pot - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Pot) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) - - - [trusted] - - - // Pot_muluu - claim [Pot.muluu.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Pot_bin_runtime - #computeValidJumpDests(Pot_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x *Int ABI_y : WS - _ - 4877 => 4920 - #gas(VGas) => #if ABI_y ==Int 0 - #then #gas ( ( VGas +Int -54 ) ) - #else #gas ( ( VGas +Int -106 ) ) - #fi - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Pot_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_Pot - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Pot) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1000) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x *Int ABI_y))))))) - - - [trusted] - - - // Vat_move-diff - claim [Vat.move-diff.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("move", #address(ABI_src), #address(ABI_dst), #uint256(ABI_rad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Dai_src -Int ABI_rad ) , Dai_src , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Dai_dst +Int ABI_rad ) , Dai_dst , Junk_2 ) ) +Int -7943 ) ) - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Vat.dai[ABI_src] <- Dai_src -Int ABI_rad ] [ #Vat.dai[ABI_dst] <- Dai_dst +Int ABI_rad ] - ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeAddress(ABI_src) - andBool (#rangeAddress(ABI_dst) - andBool (#rangeUInt(256, ABI_rad) - andBool (#rangeUInt(256, Dai_dst) - andBool (#rangeUInt(256, Dai_src) - andBool (#rangeUInt(256, May) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((ABI_src =/=Int ABI_dst) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool ((((May ==Int 1 orBool ABI_src ==Int CALLER_ID))) - andBool (((VCallValue ==Int 0)) - andBool ((#rangeUInt(256, Dai_src -Int ABI_rad)) - andBool ((#rangeUInt(256, Dai_dst +Int ABI_rad))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.can[ABI_src][CALLER_ID]) ==Int May - andBool #lookup(ACCT_ID_STORAGE, #Vat.dai[ABI_src]) ==Int Dai_src - andBool #lookup(ACCT_ID_STORAGE, #Vat.dai[ABI_dst]) ==Int Dai_dst - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.can[ABI_src][CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.dai[ABI_src]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.dai[ABI_dst]) ==Int Junk_2 - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.dai[ABI_src] - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.dai[ABI_dst] - andBool #Vat.dai[ABI_src] =/=Int #Vat.dai[ABI_dst] - [trusted] - - -endmodule diff --git a/tests/specs/mcd/storage.k b/tests/specs/mcd/storage.k deleted file mode 100644 index 534eb0c84f..0000000000 --- a/tests/specs/mcd/storage.k +++ /dev/null @@ -1,375 +0,0 @@ -requires "edsl.md" - -module DSS-STORAGE - imports EDSL - - // ### Vat - // ------- - - syntax Int ::= "#Vat.wards" "[" Int "]" [macro] - | "#Vat.can" "[" Int "][" Int "]" [macro] - | "#Vat.ilks" "[" Int "].Art" [macro] - | "#Vat.ilks" "[" Int "].rate" [macro] - | "#Vat.ilks" "[" Int "].spot" [macro] - | "#Vat.ilks" "[" Int "].line" [macro] - | "#Vat.ilks" "[" Int "].dust" [macro] - | "#Vat.urns" "[" Int "][" Int "].ink" [macro] - | "#Vat.urns" "[" Int "][" Int "].art" [macro] - | "#Vat.gem" "[" Int "][" Int "]" [macro] - | "#Vat.dai" "[" Int "]" [macro] - | "#Vat.sin" "[" Int "]" [macro] - | "#Vat.debt" [macro] - | "#Vat.vice" [macro] - | "#Vat.Line" [macro] - | "#Vat.live" [macro] - // ----------------------------------------------------------- - rule #Vat.wards[A] => #hashedLocation("Solidity", 0, A) - rule #Vat.can[A][B] => #hashedLocation("Solidity", 1, A B) - rule #Vat.ilks[ILK].Art => #hashedLocation("Solidity", 2, ILK) +Int 0 - rule #Vat.ilks[ILK].rate => #hashedLocation("Solidity", 2, ILK) +Int 1 - rule #Vat.ilks[ILK].spot => #hashedLocation("Solidity", 2, ILK) +Int 2 - rule #Vat.ilks[ILK].line => #hashedLocation("Solidity", 2, ILK) +Int 3 - rule #Vat.ilks[ILK].dust => #hashedLocation("Solidity", 2, ILK) +Int 4 - rule #Vat.urns[ILK][USR].ink => #hashedLocation("Solidity", 3, ILK USR) - rule #Vat.urns[ILK][USR].art => #hashedLocation("Solidity", 3, ILK USR) +Int 1 - rule #Vat.gem[ILK][USR] => #hashedLocation("Solidity", 4, ILK USR) - rule #Vat.dai[A] => #hashedLocation("Solidity", 5, A) - rule #Vat.sin[A] => #hashedLocation("Solidity", 6, A) - rule #Vat.debt => 7 - rule #Vat.vice => 8 - rule #Vat.Line => 9 - rule #Vat.live => 10 - - // ### Dai - // ------- - - syntax Int ::= "#Dai.wards" "[" Int "]" [macro] - | "#Dai.totalSupply" [macro] - | "#Dai.balanceOf" "[" Int "]" [macro] - | "#Dai.allowance" "[" Int "][" Int "]" [macro] - | "#Dai.nonces" "[" Int "]" [macro] - | "#Dai.DOMAIN_SEPARATOR" [macro] - // ------------------------------------------------------------ - rule #Dai.wards[A] => #hashedLocation("Solidity", 0, A) - rule #Dai.totalSupply => 1 - rule #Dai.balanceOf[A] => #hashedLocation("Solidity", 2, A) - rule #Dai.allowance[A][B] => #hashedLocation("Solidity", 3, A B) - rule #Dai.nonces[A] => #hashedLocation("Solidity", 4, A) - rule #Dai.DOMAIN_SEPARATOR => 5 - - // ### Jug - // ------- - - syntax Int ::= "#Jug.wards" "[" Int "]" [macro] - | "#Jug.ilks" "[" Int "].duty" [macro] - | "#Jug.ilks" "[" Int "].rho" [macro] - | "#Jug.vat" [macro] - | "#Jug.vow" [macro] - | "#Jug.base" [macro] - // --------------------------------------------------- - rule #Jug.wards[A] => #hashedLocation("Solidity", 0, A) - rule #Jug.ilks[ILK].duty => #hashedLocation("Solidity", 1, ILK) +Int 0 - rule #Jug.ilks[ILK].rho => #hashedLocation("Solidity", 1, ILK) +Int 1 - rule #Jug.vat => 2 - rule #Jug.vow => 3 - rule #Jug.base => 4 - - // ### Drip - // -------- - - syntax Int ::= "#Drip.wards" "[" Int "]" [macro] - | "#Drip.ilks" "[" Int "].tax" [macro] - | "#Drip.ilks" "[" Int "].rho" [macro] - | "#Drip.vat" [macro] - | "#Drip.vow" [macro] - | "#Drip.repo" [macro] - // --------------------------------------------------- - rule #Drip.wards[A] => #hashedLocation("Solidity", 0, A) - rule #Drip.ilks[ILK].tax => #hashedLocation("Solidity", 1, ILK) +Int 0 - rule #Drip.ilks[ILK].rho => #hashedLocation("Solidity", 1, ILK) +Int 1 - rule #Drip.vat => 2 - rule #Drip.vow => 3 - rule #Drip.repo => 4 - - // ### Vow - // ------- - - syntax Int ::= "#Vow.wards" "[" Int "]" [macro] - | "#Vow.vat" [macro] - | "#Vow.flapper" [macro] - | "#Vow.flopper" [macro] - | "#Vow.sin" "[" Int "]" [macro] - | "#Vow.Sin" [macro] - | "#Vow.Ash" [macro] - | "#Vow.wait" [macro] - | "#Vow.dump" [macro] - | "#Vow.sump" [macro] - | "#Vow.bump" [macro] - | "#Vow.hump" [macro] - | "#Vow.live" [macro] - // ----------------------------------------------- - rule #Vow.wards[A] => #hashedLocation("Solidity", 0, A) - rule #Vow.vat => 1 - rule #Vow.flapper => 2 - rule #Vow.flopper => 3 - rule #Vow.sin[A] => #hashedLocation("Solidity", 4, A) - rule #Vow.Sin => 5 - rule #Vow.Ash => 6 - rule #Vow.wait => 7 - rule #Vow.dump => 8 - rule #Vow.sump => 9 - rule #Vow.bump => 10 - rule #Vow.hump => 11 - rule #Vow.live => 12 - - // ### Cat - // ------- - - syntax Int ::= "#Cat.wards" "[" Int "]" [macro] - | "#Cat.ilks" "[" Int "].flip" [macro] - | "#Cat.ilks" "[" Int "].chop" [macro] - | "#Cat.ilks" "[" Int "].lump" [macro] - | "#Cat.live" [macro] - | "#Cat.vat" [macro] - | "#Cat.vow" [macro] - // --------------------------------------------------- - rule #Cat.wards[A] => #hashedLocation("Solidity", 0, A) - rule #Cat.ilks[ILK].flip => #hashedLocation("Solidity", 1, ILK) +Int 0 - rule #Cat.ilks[ILK].chop => #hashedLocation("Solidity", 1, ILK) +Int 1 - rule #Cat.ilks[ILK].lump => #hashedLocation("Solidity", 1, ILK) +Int 2 - rule #Cat.live => 2 - rule #Cat.vat => 3 - rule #Cat.vow => 4 - - // ### GemJoin - // ----------- - - syntax Int ::= "#GemJoin.wards" "[" Int "]" [macro] - | "#GemJoin.vat" [macro] - | "#GemJoin.ilk" [macro] - | "#GemJoin.gem" [macro] - | "#GemJoin.dec" [macro] - | "#GemJoin.live" [macro] - // --------------------------------------------------- - rule #GemJoin.wards[A] => #hashedLocation("Solidity", 0, A) - rule #GemJoin.vat => 1 - rule #GemJoin.ilk => 2 - rule #GemJoin.gem => 3 - rule #GemJoin.dec => 4 - rule #GemJoin.live => 5 - - // ### DaiJoin - // ----------- - - syntax Int ::= "#DaiJoin.wards" "[" Int "]" [macro] - | "#DaiJoin.vat" [macro] - | "#DaiJoin.dai" [macro] - | "#DaiJoin.live" [macro] - // --------------------------------------------------- - rule #DaiJoin.wards[A] => #hashedLocation("Solidity", 0, A) - rule #DaiJoin.vat => 1 - rule #DaiJoin.dai => 2 - rule #DaiJoin.live => 3 - - // ### Flip - // -------- - - syntax Int ::= "#Flipper.wards" "[" Int "]" [macro] - | "#Flipper.bids" "[" Int "].bid" [macro] - | "#Flipper.bids" "[" Int "].lot" [macro] - | "#Flipper.bids" "[" Int "].guy_tic_end" [macro] - | "#Flipper.bids" "[" Int "].usr" [macro] - | "#Flipper.bids" "[" Int "].gal" [macro] - | "#Flipper.bids" "[" Int "].tab" [macro] - | "#Flipper.vat" [macro] - | "#Flipper.ilk" [macro] - | "#Flipper.beg" [macro] - | "#Flipper.ttl_tau" [macro] - | "#Flipper.kicks" [macro] - // -------------------------------------------------------------- - rule #Flipper.wards[A] => #hashedLocation("Solidity", 0, A) - rule #Flipper.bids[N].bid => #hashedLocation("Solidity", 1, N) +Int 0 - rule #Flipper.bids[N].lot => #hashedLocation("Solidity", 1, N) +Int 1 - rule #Flipper.bids[N].guy_tic_end => #hashedLocation("Solidity", 1, N) +Int 2 - rule #Flipper.bids[N].usr => #hashedLocation("Solidity", 1, N) +Int 3 - rule #Flipper.bids[N].gal => #hashedLocation("Solidity", 1, N) +Int 4 - rule #Flipper.bids[N].tab => #hashedLocation("Solidity", 1, N) +Int 5 - rule #Flipper.vat => 2 - rule #Flipper.ilk => 3 - rule #Flipper.beg => 4 - rule #Flipper.ttl_tau => 5 - rule #Flipper.kicks => 6 - - // ### Flop - // -------- - - syntax Int ::= "#Flopper.wards" "[" Int "]" [macro] - | "#Flopper.bids" "[" Int "].bid" [macro] - | "#Flopper.bids" "[" Int "].lot" [macro] - | "#Flopper.bids" "[" Int "].guy_tic_end" [macro] - | "#Flopper.vat" [macro] - | "#Flopper.gem" [macro] - | "#Flopper.beg" [macro] - | "#Flopper.pad" [macro] - | "#Flopper.ttl_tau" [macro] - | "#Flopper.kicks" [macro] - | "#Flopper.live" [macro] - | "#Flopper.vow" [macro] - // -------------------------------------------------------------- - rule #Flopper.wards[A] => #hashedLocation("Solidity", 0, A) - rule #Flopper.bids[N].bid => #hashedLocation("Solidity", 1, N) +Int 0 - rule #Flopper.bids[N].lot => #hashedLocation("Solidity", 1, N) +Int 1 - rule #Flopper.bids[N].guy_tic_end => #hashedLocation("Solidity", 1, N) +Int 2 - rule #Flopper.vat => 2 - rule #Flopper.gem => 3 - rule #Flopper.beg => 4 - rule #Flopper.pad => 5 - rule #Flopper.ttl_tau => 6 - rule #Flopper.kicks => 7 - rule #Flopper.live => 8 - rule #Flopper.vow => 9 - - // ### Flap - // -------- - - syntax Int ::= "#Flapper.wards" "[" Int "]" [macro] - | "#Flapper.bids" "[" Int "].bid" [macro] - | "#Flapper.bids" "[" Int "].lot" [macro] - | "#Flapper.bids" "[" Int "].guy_tic_end" [macro] - | "#Flapper.vat" [macro] - | "#Flapper.gem" [macro] - | "#Flapper.beg" [macro] - | "#Flapper.ttl_tau" [macro] - | "#Flapper.kicks" [macro] - | "#Flapper.live" [macro] - // -------------------------------------------------------------- - rule #Flapper.wards[A] => #hashedLocation("Solidity", 0, A) - rule #Flapper.bids[N].bid => #hashedLocation("Solidity", 1, N) +Int 0 - rule #Flapper.bids[N].lot => #hashedLocation("Solidity", 1, N) +Int 1 - rule #Flapper.bids[N].guy_tic_end => #hashedLocation("Solidity", 1, N) +Int 2 - rule #Flapper.vat => 2 - rule #Flapper.gem => 3 - rule #Flapper.beg => 4 - rule #Flapper.ttl_tau => 5 - rule #Flapper.kicks => 6 - rule #Flapper.live => 7 - - // ### GemLike - // ----------- - - syntax Int ::= "#Gem.balances" "[" Int "]" [macro] - | "#Gem.stopped" [macro] - | "#Gem.allowance" "[" Int "][" Int "]" [macro] - // ------------------------------------------------------------ - rule #Gem.balances[A] => #hashedLocation("Solidity", 3, A) - rule #Gem.stopped => 4 - rule #Gem.allowance[A][B] => #hashedLocation("Solidity", 8, A B) - - // ### End - // ------- - - syntax Int ::= "#End.wards" "[" Int "]" [macro] - | "#End.vat" [macro] - | "#End.cat" [macro] - | "#End.vow" [macro] - | "#End.pot" [macro] - | "#End.spot" [macro] - | "#End.live" [macro] - | "#End.when" [macro] - | "#End.wait" [macro] - | "#End.debt" [macro] - | "#End.tag" "[" Int "]" [macro] - | "#End.gap" "[" Int "]" [macro] - | "#End.Art" "[" Int "]" [macro] - | "#End.fix" "[" Int "]" [macro] - | "#End.bag" "[" Int "]" [macro] - | "#End.out" "[" Int "][" Int "]" [macro] - // ------------------------------------------------------ - rule #End.wards[A] => #hashedLocation("Solidity", 0, A) - rule #End.vat => 1 - rule #End.cat => 2 - rule #End.vow => 3 - rule #End.pot => 4 - rule #End.spot => 5 - rule #End.live => 6 - rule #End.when => 7 - rule #End.wait => 8 - rule #End.debt => 9 - rule #End.tag[ILK] => #hashedLocation("Solidity", 10, ILK) - rule #End.gap[ILK] => #hashedLocation("Solidity", 11, ILK) - rule #End.Art[ILK] => #hashedLocation("Solidity", 12, ILK) - rule #End.fix[ILK] => #hashedLocation("Solidity", 13, ILK) - rule #End.bag[USR] => #hashedLocation("Solidity", 14, USR) - rule #End.out[ILK][USR] => #hashedLocation("Solidity", 15, ILK USR) - - // ### Pot - // ------- - - syntax Int ::= "#Pot.wards" "[" Int "]" [macro] - | "#Pot.pie" "[" Int "]" [macro] - | "#Pot.Pie" [macro] - | "#Pot.dsr" [macro] - | "#Pot.chi" [macro] - | "#Pot.vat" [macro] - | "#Pot.vow" [macro] - | "#Pot.rho" [macro] - | "#Pot.live" [macro] - // ----------------------------------------------- - rule #Pot.wards[A] => #hashedLocation("Solidity", 0, A) - rule #Pot.pie[USR] => #hashedLocation("Solidity", 1, USR) - rule #Pot.Pie => 2 - rule #Pot.dsr => 3 - rule #Pot.chi => 4 - rule #Pot.vat => 5 - rule #Pot.vow => 6 - rule #Pot.rho => 7 - rule #Pot.live => 8 - - // ### DSToken - // ----------- - - syntax Int ::= "#DSToken.supply" [macro] - | "#DSToken.balances" "[" Int "]" [macro] - | "#DSToken.allowance" "[" Int "][" Int "]" [macro] - | "#DSToken.authority" [macro] - | "#DSToken.owner_stopped" [macro] - | "#DSToken.symbol" [macro] - | "#DSToken.decimals" [macro] - // ---------------------------------------------------------------- - rule #DSToken.supply => 0 - rule #DSToken.balances[A] => #hashedLocation("Solidity", 1, A) - rule #DSToken.allowance[A][B] => #hashedLocation("Solidity", 2, A B) - rule #DSToken.authority => 3 - rule #DSToken.owner_stopped => 4 - rule #DSToken.symbol => 5 - rule #DSToken.decimals => 6 - - // ### DSValue - // ----------- - - syntax Int ::= "#DSValue.authority" [macro] - | "#DSValue.owner_has" [macro] - | "#DSValue.val" [macro] - // ------------------------------------------- - rule #DSValue.authority => 0 - rule #DSValue.owner_has => 1 - rule #DSValue.val => 2 - - // ### Spotter - // ----------- - - syntax Int ::= "#Spotter.wards" "[" Int "]" [macro] - | "#Spotter.ilks" "[" Int "].pip" [macro] - | "#Spotter.ilks" "[" Int "].mat" [macro] - | "#Spotter.vat" [macro] - | "#Spotter.par" [macro] - | "#Spotter.live" [macro] - // ------------------------------------------------------ - rule #Spotter.wards[A] => #hashedLocation("Solidity", 0, A) - rule #Spotter.ilks[ILK].pip => #hashedLocation("Solidity", 1, ILK) +Int 0 - rule #Spotter.ilks[ILK].mat => #hashedLocation("Solidity", 1, ILK) +Int 1 - rule #Spotter.vat => 2 - rule #Spotter.par => 3 - rule #Spotter.live => 4 - -endmodule diff --git a/tests/specs/mcd/vat-addui-fail-rough-spec.k b/tests/specs/mcd/vat-addui-fail-rough-spec.k deleted file mode 100644 index 1c331f18ae..0000000000 --- a/tests/specs/mcd/vat-addui-fail-rough-spec.k +++ /dev/null @@ -1,107 +0,0 @@ -requires "verification.k" - -module VAT-ADDUI-FAIL-ROUGH-SPEC - imports VERIFICATION - - // Vat_addui - claim [Vat.addui.fail.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => ?_ - _ => ?FAILURE:EndStatusCode - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - chop(ABI_y) : ABI_x : JMPTO : WS => ?_ - _ - 13112 => ?_ - #gas(VGas) => ?_ - VMemoryUsed - _ => ?_ - _ - VCallDepth => ?_ - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeSInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1015) - andBool (#rangeUInt(256, VMemoryUsed))))) - - - andBool notBool ( - ((#rangeUInt(256, ABI_x:Int +Int ABI_y:Int))) - ) - ensures - ?FAILURE =/=K EVMC_SUCCESS - -endmodule diff --git a/tests/specs/mcd/vat-addui-pass-spec.k b/tests/specs/mcd/vat-addui-pass-spec.k deleted file mode 100644 index e2f5fb1d11..0000000000 --- a/tests/specs/mcd/vat-addui-pass-spec.k +++ /dev/null @@ -1,106 +0,0 @@ -requires "verification.k" - -module VAT-ADDUI-PASS-SPEC - imports VERIFICATION - - // Vat_addui - claim [Vat.addui.pass]: - #execute ~> CONTINUATION => JUMP JMPTO ~> #pc [ JUMP ] ~> #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - chop(ABI_y) : ABI_x : JMPTO : WS => ABI_x +Int ABI_y : WS - _ - 13112 => 13174 - #gas(VGas) => #if ( ABI_y - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeSInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1015) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) - -endmodule \ No newline at end of file diff --git a/tests/specs/mcd/vat-deny-diff-fail-rough-spec.k b/tests/specs/mcd/vat-deny-diff-fail-rough-spec.k deleted file mode 100644 index 6c4949be29..0000000000 --- a/tests/specs/mcd/vat-deny-diff-fail-rough-spec.k +++ /dev/null @@ -1,122 +0,0 @@ -requires "verification.k" - -module VAT-DENY-DIFF-FAIL-ROUGH-SPEC - imports VERIFICATION - - // Vat_deny-diff - claim [Vat.deny-diff.fail.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => ?_ - _ => ?FAILURE:EndStatusCode - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("deny", #address(ABI_usr)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth => ?_ - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeAddress(ABI_usr) - andBool (#rangeUInt(256, May) - andBool (#rangeUInt(256, Live) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((CALLER_ID =/=Int ABI_usr) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3)))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.wards[CALLER_ID]) ==Int May - andBool #lookup(ACCT_ID_STORAGE, #Vat.wards[ABI_usr]) ==Int Junk_0 - andBool #lookup(ACCT_ID_STORAGE, #Vat.live) ==Int Live - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.wards[CALLER_ID]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.wards[ABI_usr]) ==Int Junk_2 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.live) ==Int Junk_3 - andBool #Vat.wards[CALLER_ID] =/=Int #Vat.wards[ABI_usr] - andBool #Vat.wards[CALLER_ID] =/=Int #Vat.live - andBool #Vat.wards[ABI_usr] =/=Int #Vat.live - andBool notBool ( - ((May:Int ==Int 1) - andBool ((Live:Int ==Int 1) - andBool ((VCallValue:Int ==Int 0)))) - ) - ensures - ?FAILURE =/=K EVMC_SUCCESS - -endmodule diff --git a/tests/specs/mcd/vat-flux-diff-pass-rough-spec.k b/tests/specs/mcd/vat-flux-diff-pass-rough-spec.k deleted file mode 100644 index ea7c50ae72..0000000000 --- a/tests/specs/mcd/vat-flux-diff-pass-rough-spec.k +++ /dev/null @@ -1,317 +0,0 @@ -requires "verification.k" - -module VAT-FLUX-DIFF-PASS-ROUGH-SPEC - imports VERIFICATION - - // Vat_flux-diff - claim [Vat.flux-diff.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("flux", #bytes32(ABI_ilk), #address(ABI_src), #address(ABI_dst), #uint256(ABI_wad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Vat.gem[ABI_ilk][ABI_src] <- Gem_src -Int ABI_wad ] [ #Vat.gem[ABI_ilk][ABI_dst] <- Gem_dst +Int ABI_wad ] - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeBytes(32, ABI_ilk) - andBool (#rangeAddress(ABI_src) - andBool (#rangeAddress(ABI_dst) - andBool (#rangeUInt(256, ABI_wad) - andBool (#rangeUInt(256, May) - andBool (#rangeUInt(256, Gem_src) - andBool (#rangeUInt(256, Gem_dst) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((ABI_src =/=Int ABI_dst) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool ((((May ==Int 1 orBool ABI_src ==Int CALLER_ID))) - andBool (((VCallValue ==Int 0)) - andBool ((#rangeUInt(256, Gem_src -Int ABI_wad)) - andBool ((#rangeUInt(256, Gem_dst +Int ABI_wad)))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.can[ABI_src][CALLER_ID]) ==Int May - andBool #lookup(ACCT_ID_STORAGE, #Vat.gem[ABI_ilk][ABI_src]) ==Int Gem_src - andBool #lookup(ACCT_ID_STORAGE, #Vat.gem[ABI_ilk][ABI_dst]) ==Int Gem_dst - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.can[ABI_src][CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.gem[ABI_ilk][ABI_src]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.gem[ABI_ilk][ABI_dst]) ==Int Junk_2 - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.gem[ABI_ilk][ABI_src] - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.gem[ABI_ilk][ABI_dst] - andBool #Vat.gem[ABI_ilk][ABI_src] =/=Int #Vat.gem[ABI_ilk][ABI_dst] - - // Vat_subuu - claim [Vat.subuu.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x -Int ABI_y : WS - _ - 13060 => 13085 - #gas(VGas) => #gas ( ( VGas +Int -54 ) ) - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x -Int ABI_y))))))) - - - [trusted] - - - // Vat_adduu - claim [Vat.adduu.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS - _ - 13086 => 13111 - #gas(VGas) => #gas ( ( VGas +Int -54 ) ) - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) - - - [trusted] - - -endmodule diff --git a/tests/specs/mcd/vat-fold-pass-rough-spec.k b/tests/specs/mcd/vat-fold-pass-rough-spec.k deleted file mode 100644 index de3b4387bb..0000000000 --- a/tests/specs/mcd/vat-fold-pass-rough-spec.k +++ /dev/null @@ -1,352 +0,0 @@ -requires "verification.k" - -module VAT-FOLD-PASS-ROUGH-SPEC - imports VERIFICATION - - // Vat_fold - claim [Vat.fold.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("fold", #bytes32(ABI_i), #address(ABI_u), #int256(ABI_rate)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Vat.ilks[ABI_i].rate <- Rate_i +Int ABI_rate ] [ #Vat.dai[ABI_u] <- Dai_u +Int Art_i *Int ABI_rate ] [ #Vat.debt <- Debt +Int Art_i *Int ABI_rate ] - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeBytes(32, ABI_i) - andBool (#rangeAddress(ABI_u) - andBool (#rangeSInt(256, ABI_rate) - andBool (#rangeUInt(256, May) - andBool (#rangeUInt(256, Rate_i) - andBool (#rangeUInt(256, Dai_u) - andBool (#rangeUInt(256, Art_i) - andBool (#rangeUInt(256, Debt) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool ((((VCallValue ==Int 0))) - andBool ((((May ==Int 1))) - andBool ((((Live ==Int 1))) - andBool ((((Art_i <=Int maxSInt256))) - andBool (((#rangeSInt(256, Art_i *Int ABI_rate))) - andBool ((#rangeUInt(256, Rate_i +Int ABI_rate)) - andBool ((#rangeUInt(256, Dai_u +Int (Art_i *Int ABI_rate))) - andBool ((#rangeUInt(256, Debt +Int (Art_i *Int ABI_rate)))))))))))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.wards[CALLER_ID]) ==Int May - andBool #lookup(ACCT_ID_STORAGE, #Vat.ilks[ABI_i].Art) ==Int Art_i - andBool #lookup(ACCT_ID_STORAGE, #Vat.live) ==Int Live - andBool #lookup(ACCT_ID_STORAGE, #Vat.ilks[ABI_i].rate) ==Int Rate_i - andBool #lookup(ACCT_ID_STORAGE, #Vat.dai[ABI_u]) ==Int Dai_u - andBool #lookup(ACCT_ID_STORAGE, #Vat.debt) ==Int Debt - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.wards[CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.ilks[ABI_i].Art) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.live) ==Int Junk_2 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.ilks[ABI_i].rate) ==Int Junk_3 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.dai[ABI_u]) ==Int Junk_4 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.debt) ==Int Junk_5 - andBool #Vat.wards[CALLER_ID] =/=Int #Vat.ilks[ABI_i].Art - andBool #Vat.wards[CALLER_ID] =/=Int #Vat.live - andBool #Vat.wards[CALLER_ID] =/=Int #Vat.ilks[ABI_i].rate - andBool #Vat.wards[CALLER_ID] =/=Int #Vat.dai[ABI_u] - andBool #Vat.wards[CALLER_ID] =/=Int #Vat.debt - andBool #Vat.ilks[ABI_i].Art =/=Int #Vat.live - andBool #Vat.ilks[ABI_i].Art =/=Int #Vat.ilks[ABI_i].rate - andBool #Vat.ilks[ABI_i].Art =/=Int #Vat.dai[ABI_u] - andBool #Vat.ilks[ABI_i].Art =/=Int #Vat.debt - andBool #Vat.live =/=Int #Vat.ilks[ABI_i].rate - andBool #Vat.live =/=Int #Vat.dai[ABI_u] - andBool #Vat.live =/=Int #Vat.debt - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.dai[ABI_u] - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.debt - andBool #Vat.dai[ABI_u] =/=Int #Vat.debt - - // Vat_addui - claim [Vat.addui.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - chop(ABI_y) : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS - _ - 13112 => 13174 - #gas(VGas) => #if ( ABI_y - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeSInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1015) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) - - - [trusted] - - - // Vat_mului - claim [Vat.mului.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - chop(ABI_y) : ABI_x : JMPTO : WS => JMPTO : chop(ABI_x *Int ABI_y) : WS - _ - 13175 => 13233 - #gas(VGas) => #if ABI_y ==Int 0 - #then #gas ( ( VGas +Int -96 ) ) - #else #gas ( ( VGas +Int -132 ) ) - #fi - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeSInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1000) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeSInt(256, ABI_x)) - andBool ((#rangeSInt(256, ABI_x *Int ABI_y)))))))) - - - [trusted] - - -endmodule diff --git a/tests/specs/mcd/vat-fork-diff-pass-rough-spec.k b/tests/specs/mcd/vat-fork-diff-pass-rough-spec.k deleted file mode 100644 index 8eab85e032..0000000000 --- a/tests/specs/mcd/vat-fork-diff-pass-rough-spec.k +++ /dev/null @@ -1,497 +0,0 @@ -requires "verification.k" - -module VAT-FORK-DIFF-PASS-ROUGH-SPEC - imports VERIFICATION - - // Vat_fork-diff - claim [Vat.fork-diff.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("fork", #bytes32(ABI_ilk), #address(ABI_src), #address(ABI_dst), #int256(ABI_dink), #int256(ABI_dart)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Vat.urns[ABI_ilk][ABI_src].ink <- Ink_u -Int ABI_dink ] [ #Vat.urns[ABI_ilk][ABI_src].art <- Art_u -Int ABI_dart ] [ #Vat.urns[ABI_ilk][ABI_dst].ink <- Ink_v +Int ABI_dink ] [ #Vat.urns[ABI_ilk][ABI_dst].art <- Art_v +Int ABI_dart ] - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeBytes(32, ABI_ilk) - andBool (#rangeAddress(ABI_src) - andBool (#rangeAddress(ABI_dst) - andBool (#rangeSInt(256, ABI_dink) - andBool (#rangeSInt(256, ABI_dart) - andBool (#rangeUInt(256, Can_src) - andBool (#rangeUInt(256, Can_dst) - andBool (#rangeUInt(256, Rate) - andBool (#rangeUInt(256, Spot) - andBool (#rangeUInt(256, Dust) - andBool (#rangeUInt(256, Ink_u) - andBool (#rangeUInt(256, Art_u) - andBool (#rangeUInt(256, Ink_v) - andBool (#rangeUInt(256, Art_v) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((ABI_src =/=Int ABI_dst) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool (#rangeUInt(256, Junk_6) - andBool (#rangeUInt(256, Junk_7) - andBool (#rangeUInt(256, Junk_8) - andBool (((VCallValue ==Int 0)) - andBool ((((ABI_src ==Int CALLER_ID) orBool (Can_src ==Int 1))) - andBool ((((ABI_dst ==Int CALLER_ID) orBool (Can_dst ==Int 1))) - andBool ((((Art_u -Int ABI_dart) *Int Rate <=Int (Ink_u -Int ABI_dink) *Int Spot)) - andBool ((((Art_v +Int ABI_dart) *Int Rate <=Int (Ink_v +Int ABI_dink) *Int Spot)) - andBool (((((Art_u -Int ABI_dart) *Int Rate >=Int Dust) orBool (Art_u -Int ABI_dart ==Int 0))) - andBool (((((Art_v +Int ABI_dart) *Int Rate >=Int Dust) orBool (Art_v +Int ABI_dart ==Int 0))) - andBool ((#rangeUInt(256, Ink_u -Int ABI_dink)) - andBool ((#rangeUInt(256, Ink_v +Int ABI_dink)) - andBool ((#rangeUInt(256, Art_u -Int ABI_dart)) - andBool ((#rangeUInt(256, Art_v +Int ABI_dart)) - andBool ((#rangeUInt(256, (Ink_u -Int ABI_dink) *Int Spot)) - andBool ((#rangeUInt(256, (Ink_v +Int ABI_dink) *Int Spot)))))))))))))))))))))))))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.can[ABI_src][CALLER_ID]) ==Int Can_src - andBool #lookup(ACCT_ID_STORAGE, #Vat.can[ABI_dst][CALLER_ID]) ==Int Can_dst - andBool #lookup(ACCT_ID_STORAGE, #Vat.ilks[ABI_ilk].rate) ==Int Rate - andBool #lookup(ACCT_ID_STORAGE, #Vat.ilks[ABI_ilk].spot) ==Int Spot - andBool #lookup(ACCT_ID_STORAGE, #Vat.ilks[ABI_ilk].dust) ==Int Dust - andBool #lookup(ACCT_ID_STORAGE, #Vat.urns[ABI_ilk][ABI_src].ink) ==Int Ink_u - andBool #lookup(ACCT_ID_STORAGE, #Vat.urns[ABI_ilk][ABI_src].art) ==Int Art_u - andBool #lookup(ACCT_ID_STORAGE, #Vat.urns[ABI_ilk][ABI_dst].ink) ==Int Ink_v - andBool #lookup(ACCT_ID_STORAGE, #Vat.urns[ABI_ilk][ABI_dst].art) ==Int Art_v - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.can[ABI_src][CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.can[ABI_dst][CALLER_ID]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.ilks[ABI_ilk].rate) ==Int Junk_2 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.ilks[ABI_ilk].spot) ==Int Junk_3 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.ilks[ABI_ilk].dust) ==Int Junk_4 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.urns[ABI_ilk][ABI_src].ink) ==Int Junk_5 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.urns[ABI_ilk][ABI_src].art) ==Int Junk_6 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.urns[ABI_ilk][ABI_dst].ink) ==Int Junk_7 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.urns[ABI_ilk][ABI_dst].art) ==Int Junk_8 - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.can[ABI_dst][CALLER_ID] - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.ilks[ABI_ilk].rate - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.ilks[ABI_ilk].spot - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.ilks[ABI_ilk].dust - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.urns[ABI_ilk][ABI_src].ink - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.urns[ABI_ilk][ABI_src].art - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.urns[ABI_ilk][ABI_dst].ink - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.urns[ABI_ilk][ABI_dst].art - andBool #Vat.can[ABI_dst][CALLER_ID] =/=Int #Vat.ilks[ABI_ilk].rate - andBool #Vat.can[ABI_dst][CALLER_ID] =/=Int #Vat.ilks[ABI_ilk].spot - andBool #Vat.can[ABI_dst][CALLER_ID] =/=Int #Vat.ilks[ABI_ilk].dust - andBool #Vat.can[ABI_dst][CALLER_ID] =/=Int #Vat.urns[ABI_ilk][ABI_src].ink - andBool #Vat.can[ABI_dst][CALLER_ID] =/=Int #Vat.urns[ABI_ilk][ABI_src].art - andBool #Vat.can[ABI_dst][CALLER_ID] =/=Int #Vat.urns[ABI_ilk][ABI_dst].ink - andBool #Vat.can[ABI_dst][CALLER_ID] =/=Int #Vat.urns[ABI_ilk][ABI_dst].art - andBool #Vat.ilks[ABI_ilk].rate =/=Int #Vat.ilks[ABI_ilk].spot - andBool #Vat.ilks[ABI_ilk].rate =/=Int #Vat.ilks[ABI_ilk].dust - andBool #Vat.ilks[ABI_ilk].rate =/=Int #Vat.urns[ABI_ilk][ABI_src].ink - andBool #Vat.ilks[ABI_ilk].rate =/=Int #Vat.urns[ABI_ilk][ABI_src].art - andBool #Vat.ilks[ABI_ilk].rate =/=Int #Vat.urns[ABI_ilk][ABI_dst].ink - andBool #Vat.ilks[ABI_ilk].rate =/=Int #Vat.urns[ABI_ilk][ABI_dst].art - andBool #Vat.ilks[ABI_ilk].spot =/=Int #Vat.ilks[ABI_ilk].dust - andBool #Vat.ilks[ABI_ilk].spot =/=Int #Vat.urns[ABI_ilk][ABI_src].ink - andBool #Vat.ilks[ABI_ilk].spot =/=Int #Vat.urns[ABI_ilk][ABI_src].art - andBool #Vat.ilks[ABI_ilk].spot =/=Int #Vat.urns[ABI_ilk][ABI_dst].ink - andBool #Vat.ilks[ABI_ilk].spot =/=Int #Vat.urns[ABI_ilk][ABI_dst].art - andBool #Vat.ilks[ABI_ilk].dust =/=Int #Vat.urns[ABI_ilk][ABI_src].ink - andBool #Vat.ilks[ABI_ilk].dust =/=Int #Vat.urns[ABI_ilk][ABI_src].art - andBool #Vat.ilks[ABI_ilk].dust =/=Int #Vat.urns[ABI_ilk][ABI_dst].ink - andBool #Vat.ilks[ABI_ilk].dust =/=Int #Vat.urns[ABI_ilk][ABI_dst].art - andBool #Vat.urns[ABI_ilk][ABI_src].ink =/=Int #Vat.urns[ABI_ilk][ABI_src].art - andBool #Vat.urns[ABI_ilk][ABI_src].ink =/=Int #Vat.urns[ABI_ilk][ABI_dst].ink - andBool #Vat.urns[ABI_ilk][ABI_src].ink =/=Int #Vat.urns[ABI_ilk][ABI_dst].art - andBool #Vat.urns[ABI_ilk][ABI_src].art =/=Int #Vat.urns[ABI_ilk][ABI_dst].ink - andBool #Vat.urns[ABI_ilk][ABI_src].art =/=Int #Vat.urns[ABI_ilk][ABI_dst].art - andBool #Vat.urns[ABI_ilk][ABI_dst].ink =/=Int #Vat.urns[ABI_ilk][ABI_dst].art - - // Vat_addui - claim [Vat.addui.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - chop(ABI_y) : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS - _ - 13112 => 13174 - #gas(VGas) => #if ( ABI_y - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeSInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1015) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) - - - [trusted] - - - // Vat_subui - claim [Vat.subui.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - chop(ABI_y) : ABI_x : JMPTO : WS => JMPTO : ABI_x -Int ABI_y : WS - _ - 13304 => 13366 - #gas(VGas) => #if ( ABI_y =/=Int 0 andBool 0 <=Int ABI_y ) - #then #gas ( ( VGas +Int -128 ) ) - #else #if 0 <=Int ABI_y - #then #gas ( ( VGas +Int -114 ) ) - #else #gas ( ( VGas +Int -128 ) ) - #fi - #fi - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeSInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1015) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x -Int ABI_y))))))) - - - [trusted] - - - // Vat_muluu - claim [Vat.muluu.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x *Int ABI_y : WS - _ - 13234 => 13277 - #gas(VGas) => #if ABI_y ==Int 0 - #then #gas ( ( VGas +Int -54 ) ) - #else #gas ( ( VGas +Int -106 ) ) - #fi - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1000) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x *Int ABI_y))))))) - - - [trusted] - - -endmodule diff --git a/tests/specs/mcd/vat-frob-diff-zero-dart-pass-rough-spec.k b/tests/specs/mcd/vat-frob-diff-zero-dart-pass-rough-spec.k deleted file mode 100644 index 8426cc1a40..0000000000 --- a/tests/specs/mcd/vat-frob-diff-zero-dart-pass-rough-spec.k +++ /dev/null @@ -1,387 +0,0 @@ -requires "verification.k" - -module VAT-FROB-DIFF-ZERO-DART-PASS-ROUGH-SPEC - imports VERIFICATION - - // Vat_frob-diff-zero-dart - claim [Vat.frob-diff-zero-dart.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("frob", #bytes32(ABI_i), #address(ABI_u), #address(ABI_v), #address(ABI_w), #int256(ABI_dink), #int256(ABI_dart)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Vat.gem[ABI_i][ABI_v] <- Gem_iv -Int ABI_dink ] [ #Vat.urns[ABI_i][ABI_u].ink <- Urn_ink +Int ABI_dink ] - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeBytes(32, ABI_i) - andBool (#rangeAddress(ABI_u) - andBool (#rangeAddress(ABI_v) - andBool (#rangeAddress(ABI_w) - andBool (#rangeSInt(256, ABI_dink) - andBool (#rangeSInt(256, ABI_dart) - andBool (#rangeUInt(256, Ilk_rate) - andBool (#rangeUInt(256, Ilk_line) - andBool (#rangeUInt(256, Ilk_spot) - andBool (#rangeUInt(256, Ilk_dust) - andBool (#rangeUInt(256, Ilk_Art) - andBool (#rangeUInt(256, Urn_ink) - andBool (#rangeUInt(256, Urn_art) - andBool (#rangeUInt(256, Gem_iv) - andBool (#rangeUInt(256, Dai_w) - andBool (#rangeUInt(256, Debt) - andBool (#rangeUInt(256, Line) - andBool (#rangeUInt(256, Can_u) - andBool (#rangeUInt(256, Can_v) - andBool (#rangeUInt(256, Can_w) - andBool (#rangeUInt(256, Live) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((ABI_u =/=Int ABI_v) - andBool ((ABI_v =/=Int ABI_w) - andBool ((ABI_u =/=Int ABI_w) - andBool ((ABI_dink =/=Int 0) - andBool ((ABI_dart ==Int 0) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool (#rangeUInt(256, Junk_6) - andBool (#rangeUInt(256, Junk_7) - andBool (#rangeUInt(256, Junk_8) - andBool (#rangeUInt(256, Junk_9) - andBool (#rangeUInt(256, Junk_10) - andBool (#rangeUInt(256, Junk_11) - andBool (#rangeUInt(256, Junk_12) - andBool (#rangeUInt(256, Junk_13) - andBool (#rangeUInt(256, Junk_14) - andBool ((((#rangeUInt(256, Urn_ink +Int ABI_dink)))) - andBool ((((#rangeUInt(256, Gem_iv -Int ABI_dink)))) - andBool ((((#rangeUInt(256, (Urn_ink +Int ABI_dink) *Int Ilk_spot)))) - andBool ((((#rangeUInt(256, Urn_art *Int Ilk_rate)))) - andBool ((((#rangeUInt(256, Ilk_Art *Int Ilk_rate)))) - andBool (((#rangeSInt(256, Ilk_rate))) - andBool ((VCallValue ==Int 0) - andBool ((Live ==Int 1) - andBool ((Ilk_rate =/=Int 0) - andBool (((ABI_dink >=Int 0) orBool (((Urn_art *Int Ilk_rate) <=Int ((Urn_ink +Int ABI_dink) *Int Ilk_spot)))) - andBool (((ABI_dink >=Int 0) orBool (ABI_u ==Int CALLER_ID orBool Can_u ==Int 1)) - andBool (((ABI_dink <=Int 0) orBool (ABI_v ==Int CALLER_ID orBool Can_v ==Int 1)) - andBool (((Urn_art ==Int 0) orBool ((Urn_art *Int Ilk_rate) >=Int Ilk_dust))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.ilks[ABI_i].rate) ==Int Ilk_rate - andBool #lookup(ACCT_ID_STORAGE, #Vat.ilks[ABI_i].line) ==Int Ilk_line - andBool #lookup(ACCT_ID_STORAGE, #Vat.ilks[ABI_i].spot) ==Int Ilk_spot - andBool #lookup(ACCT_ID_STORAGE, #Vat.ilks[ABI_i].dust) ==Int Ilk_dust - andBool #lookup(ACCT_ID_STORAGE, #Vat.Line) ==Int Line - andBool #lookup(ACCT_ID_STORAGE, #Vat.can[ABI_u][CALLER_ID]) ==Int Can_u - andBool #lookup(ACCT_ID_STORAGE, #Vat.can[ABI_v][CALLER_ID]) ==Int Can_v - andBool #lookup(ACCT_ID_STORAGE, #Vat.can[ABI_w][CALLER_ID]) ==Int Can_w - andBool #lookup(ACCT_ID_STORAGE, #Vat.debt) ==Int Debt - andBool #lookup(ACCT_ID_STORAGE, #Vat.gem[ABI_i][ABI_v]) ==Int Gem_iv - andBool #lookup(ACCT_ID_STORAGE, #Vat.dai[ABI_w]) ==Int Dai_w - andBool #lookup(ACCT_ID_STORAGE, #Vat.urns[ABI_i][ABI_u].ink) ==Int Urn_ink - andBool #lookup(ACCT_ID_STORAGE, #Vat.urns[ABI_i][ABI_u].art) ==Int Urn_art - andBool #lookup(ACCT_ID_STORAGE, #Vat.ilks[ABI_i].Art) ==Int Ilk_Art - andBool #lookup(ACCT_ID_STORAGE, #Vat.live) ==Int Live - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.ilks[ABI_i].rate) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.ilks[ABI_i].line) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.ilks[ABI_i].spot) ==Int Junk_2 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.ilks[ABI_i].dust) ==Int Junk_3 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.Line) ==Int Junk_4 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.can[ABI_u][CALLER_ID]) ==Int Junk_5 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.can[ABI_v][CALLER_ID]) ==Int Junk_6 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.can[ABI_w][CALLER_ID]) ==Int Junk_7 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.debt) ==Int Junk_8 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.gem[ABI_i][ABI_v]) ==Int Junk_9 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.dai[ABI_w]) ==Int Junk_10 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.urns[ABI_i][ABI_u].ink) ==Int Junk_11 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.urns[ABI_i][ABI_u].art) ==Int Junk_12 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.ilks[ABI_i].Art) ==Int Junk_13 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.live) ==Int Junk_14 - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.ilks[ABI_i].line - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.ilks[ABI_i].spot - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.ilks[ABI_i].dust - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.Line - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.can[ABI_u][CALLER_ID] - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.can[ABI_v][CALLER_ID] - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.can[ABI_w][CALLER_ID] - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.debt - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.gem[ABI_i][ABI_v] - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.dai[ABI_w] - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.urns[ABI_i][ABI_u].ink - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.urns[ABI_i][ABI_u].art - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.ilks[ABI_i].Art - andBool #Vat.ilks[ABI_i].rate =/=Int #Vat.live - andBool #Vat.ilks[ABI_i].line =/=Int #Vat.ilks[ABI_i].spot - andBool #Vat.ilks[ABI_i].line =/=Int #Vat.ilks[ABI_i].dust - andBool #Vat.ilks[ABI_i].line =/=Int #Vat.Line - andBool #Vat.ilks[ABI_i].line =/=Int #Vat.can[ABI_u][CALLER_ID] - andBool #Vat.ilks[ABI_i].line =/=Int #Vat.can[ABI_v][CALLER_ID] - andBool #Vat.ilks[ABI_i].line =/=Int #Vat.can[ABI_w][CALLER_ID] - andBool #Vat.ilks[ABI_i].line =/=Int #Vat.debt - andBool #Vat.ilks[ABI_i].line =/=Int #Vat.gem[ABI_i][ABI_v] - andBool #Vat.ilks[ABI_i].line =/=Int #Vat.dai[ABI_w] - andBool #Vat.ilks[ABI_i].line =/=Int #Vat.urns[ABI_i][ABI_u].ink - andBool #Vat.ilks[ABI_i].line =/=Int #Vat.urns[ABI_i][ABI_u].art - andBool #Vat.ilks[ABI_i].line =/=Int #Vat.ilks[ABI_i].Art - andBool #Vat.ilks[ABI_i].line =/=Int #Vat.live - andBool #Vat.ilks[ABI_i].spot =/=Int #Vat.ilks[ABI_i].dust - andBool #Vat.ilks[ABI_i].spot =/=Int #Vat.Line - andBool #Vat.ilks[ABI_i].spot =/=Int #Vat.can[ABI_u][CALLER_ID] - andBool #Vat.ilks[ABI_i].spot =/=Int #Vat.can[ABI_v][CALLER_ID] - andBool #Vat.ilks[ABI_i].spot =/=Int #Vat.can[ABI_w][CALLER_ID] - andBool #Vat.ilks[ABI_i].spot =/=Int #Vat.debt - andBool #Vat.ilks[ABI_i].spot =/=Int #Vat.gem[ABI_i][ABI_v] - andBool #Vat.ilks[ABI_i].spot =/=Int #Vat.dai[ABI_w] - andBool #Vat.ilks[ABI_i].spot =/=Int #Vat.urns[ABI_i][ABI_u].ink - andBool #Vat.ilks[ABI_i].spot =/=Int #Vat.urns[ABI_i][ABI_u].art - andBool #Vat.ilks[ABI_i].spot =/=Int #Vat.ilks[ABI_i].Art - andBool #Vat.ilks[ABI_i].spot =/=Int #Vat.live - andBool #Vat.ilks[ABI_i].dust =/=Int #Vat.Line - andBool #Vat.ilks[ABI_i].dust =/=Int #Vat.can[ABI_u][CALLER_ID] - andBool #Vat.ilks[ABI_i].dust =/=Int #Vat.can[ABI_v][CALLER_ID] - andBool #Vat.ilks[ABI_i].dust =/=Int #Vat.can[ABI_w][CALLER_ID] - andBool #Vat.ilks[ABI_i].dust =/=Int #Vat.debt - andBool #Vat.ilks[ABI_i].dust =/=Int #Vat.gem[ABI_i][ABI_v] - andBool #Vat.ilks[ABI_i].dust =/=Int #Vat.dai[ABI_w] - andBool #Vat.ilks[ABI_i].dust =/=Int #Vat.urns[ABI_i][ABI_u].ink - andBool #Vat.ilks[ABI_i].dust =/=Int #Vat.urns[ABI_i][ABI_u].art - andBool #Vat.ilks[ABI_i].dust =/=Int #Vat.ilks[ABI_i].Art - andBool #Vat.ilks[ABI_i].dust =/=Int #Vat.live - andBool #Vat.Line =/=Int #Vat.can[ABI_u][CALLER_ID] - andBool #Vat.Line =/=Int #Vat.can[ABI_v][CALLER_ID] - andBool #Vat.Line =/=Int #Vat.can[ABI_w][CALLER_ID] - andBool #Vat.Line =/=Int #Vat.debt - andBool #Vat.Line =/=Int #Vat.gem[ABI_i][ABI_v] - andBool #Vat.Line =/=Int #Vat.dai[ABI_w] - andBool #Vat.Line =/=Int #Vat.urns[ABI_i][ABI_u].ink - andBool #Vat.Line =/=Int #Vat.urns[ABI_i][ABI_u].art - andBool #Vat.Line =/=Int #Vat.ilks[ABI_i].Art - andBool #Vat.Line =/=Int #Vat.live - andBool #Vat.can[ABI_u][CALLER_ID] =/=Int #Vat.can[ABI_v][CALLER_ID] - andBool #Vat.can[ABI_u][CALLER_ID] =/=Int #Vat.can[ABI_w][CALLER_ID] - andBool #Vat.can[ABI_u][CALLER_ID] =/=Int #Vat.debt - andBool #Vat.can[ABI_u][CALLER_ID] =/=Int #Vat.gem[ABI_i][ABI_v] - andBool #Vat.can[ABI_u][CALLER_ID] =/=Int #Vat.dai[ABI_w] - andBool #Vat.can[ABI_u][CALLER_ID] =/=Int #Vat.urns[ABI_i][ABI_u].ink - andBool #Vat.can[ABI_u][CALLER_ID] =/=Int #Vat.urns[ABI_i][ABI_u].art - andBool #Vat.can[ABI_u][CALLER_ID] =/=Int #Vat.ilks[ABI_i].Art - andBool #Vat.can[ABI_u][CALLER_ID] =/=Int #Vat.live - andBool #Vat.can[ABI_v][CALLER_ID] =/=Int #Vat.can[ABI_w][CALLER_ID] - andBool #Vat.can[ABI_v][CALLER_ID] =/=Int #Vat.debt - andBool #Vat.can[ABI_v][CALLER_ID] =/=Int #Vat.gem[ABI_i][ABI_v] - andBool #Vat.can[ABI_v][CALLER_ID] =/=Int #Vat.dai[ABI_w] - andBool #Vat.can[ABI_v][CALLER_ID] =/=Int #Vat.urns[ABI_i][ABI_u].ink - andBool #Vat.can[ABI_v][CALLER_ID] =/=Int #Vat.urns[ABI_i][ABI_u].art - andBool #Vat.can[ABI_v][CALLER_ID] =/=Int #Vat.ilks[ABI_i].Art - andBool #Vat.can[ABI_v][CALLER_ID] =/=Int #Vat.live - andBool #Vat.can[ABI_w][CALLER_ID] =/=Int #Vat.debt - andBool #Vat.can[ABI_w][CALLER_ID] =/=Int #Vat.gem[ABI_i][ABI_v] - andBool #Vat.can[ABI_w][CALLER_ID] =/=Int #Vat.dai[ABI_w] - andBool #Vat.can[ABI_w][CALLER_ID] =/=Int #Vat.urns[ABI_i][ABI_u].ink - andBool #Vat.can[ABI_w][CALLER_ID] =/=Int #Vat.urns[ABI_i][ABI_u].art - andBool #Vat.can[ABI_w][CALLER_ID] =/=Int #Vat.ilks[ABI_i].Art - andBool #Vat.can[ABI_w][CALLER_ID] =/=Int #Vat.live - andBool #Vat.debt =/=Int #Vat.gem[ABI_i][ABI_v] - andBool #Vat.debt =/=Int #Vat.dai[ABI_w] - andBool #Vat.debt =/=Int #Vat.urns[ABI_i][ABI_u].ink - andBool #Vat.debt =/=Int #Vat.urns[ABI_i][ABI_u].art - andBool #Vat.debt =/=Int #Vat.ilks[ABI_i].Art - andBool #Vat.debt =/=Int #Vat.live - andBool #Vat.gem[ABI_i][ABI_v] =/=Int #Vat.dai[ABI_w] - andBool #Vat.gem[ABI_i][ABI_v] =/=Int #Vat.urns[ABI_i][ABI_u].ink - andBool #Vat.gem[ABI_i][ABI_v] =/=Int #Vat.urns[ABI_i][ABI_u].art - andBool #Vat.gem[ABI_i][ABI_v] =/=Int #Vat.ilks[ABI_i].Art - andBool #Vat.gem[ABI_i][ABI_v] =/=Int #Vat.live - andBool #Vat.dai[ABI_w] =/=Int #Vat.urns[ABI_i][ABI_u].ink - andBool #Vat.dai[ABI_w] =/=Int #Vat.urns[ABI_i][ABI_u].art - andBool #Vat.dai[ABI_w] =/=Int #Vat.ilks[ABI_i].Art - andBool #Vat.dai[ABI_w] =/=Int #Vat.live - andBool #Vat.urns[ABI_i][ABI_u].ink =/=Int #Vat.urns[ABI_i][ABI_u].art - andBool #Vat.urns[ABI_i][ABI_u].ink =/=Int #Vat.ilks[ABI_i].Art - andBool #Vat.urns[ABI_i][ABI_u].ink =/=Int #Vat.live - andBool #Vat.urns[ABI_i][ABI_u].art =/=Int #Vat.ilks[ABI_i].Art - andBool #Vat.urns[ABI_i][ABI_u].art =/=Int #Vat.live - andBool #Vat.ilks[ABI_i].Art =/=Int #Vat.live - - // Vat_muluu - claim [Vat.muluu.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x *Int ABI_y : WS - _ - 13234 => 13277 - #gas(VGas) => #if ABI_y ==Int 0 - #then #gas ( ( VGas +Int -54 ) ) - #else #gas ( ( VGas +Int -106 ) ) - #fi - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1000) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x *Int ABI_y))))))) - - - [trusted] - - -endmodule diff --git a/tests/specs/mcd/vat-move-diff-rough-spec.k b/tests/specs/mcd/vat-move-diff-rough-spec.k deleted file mode 100644 index 80be500b16..0000000000 --- a/tests/specs/mcd/vat-move-diff-rough-spec.k +++ /dev/null @@ -1,315 +0,0 @@ -requires "verification.k" - -module VAT-MOVE-DIFF-ROUGH-SPEC - imports VERIFICATION - - // Vat_move-diff - claim [Vat.move-diff.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("move", #address(ABI_src), #address(ABI_dst), #uint256(ABI_rad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Vat.dai[ABI_src] <- Dai_src -Int ABI_rad ] [ #Vat.dai[ABI_dst] <- Dai_dst +Int ABI_rad ] - ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeAddress(ABI_src) - andBool (#rangeAddress(ABI_dst) - andBool (#rangeUInt(256, ABI_rad) - andBool (#rangeUInt(256, Dai_dst) - andBool (#rangeUInt(256, Dai_src) - andBool (#rangeUInt(256, May) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((ABI_src =/=Int ABI_dst) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool ((((May ==Int 1 orBool ABI_src ==Int CALLER_ID))) - andBool (((VCallValue ==Int 0)) - andBool ((#rangeUInt(256, Dai_src -Int ABI_rad)) - andBool ((#rangeUInt(256, Dai_dst +Int ABI_rad))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.can[ABI_src][CALLER_ID]) ==Int May - andBool #lookup(ACCT_ID_STORAGE, #Vat.dai[ABI_src]) ==Int Dai_src - andBool #lookup(ACCT_ID_STORAGE, #Vat.dai[ABI_dst]) ==Int Dai_dst - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.can[ABI_src][CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.dai[ABI_src]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.dai[ABI_dst]) ==Int Junk_2 - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.dai[ABI_src] - andBool #Vat.can[ABI_src][CALLER_ID] =/=Int #Vat.dai[ABI_dst] - andBool #Vat.dai[ABI_src] =/=Int #Vat.dai[ABI_dst] - - // Vat_adduu - claim [Vat.adduu.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS - _ - 13086 => 13111 - #gas(VGas) => #gas ( ( VGas +Int 54 ) ) - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) - [trusted] - - - // Vat_subuu - claim [Vat.subuu.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x -Int ABI_y : WS - _ - 13060 => 13085 - #gas(VGas) => #gas ( ( VGas +Int 54 ) ) - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x -Int ABI_y))))))) - [trusted] - - -endmodule diff --git a/tests/specs/mcd/vat-mului-pass-spec.k b/tests/specs/mcd/vat-mului-pass-spec.k deleted file mode 100644 index 798e4f3bf2..0000000000 --- a/tests/specs/mcd/vat-mului-pass-spec.k +++ /dev/null @@ -1,107 +0,0 @@ -requires "verification.k" - -module VAT-MULUI-PASS-SPEC - imports VERIFICATION - - // Vat_mului - claim [Vat.mului.pass]: - #execute ~> CONTINUATION => JUMP JMPTO ~> #pc [ JUMP ] ~> #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - chop(ABI_y) : ABI_x : JMPTO : WS => chop(ABI_x *Int ABI_y) : WS - _ - 13175 => 13233 - #gas(VGas) => #if ABI_y ==Int 0 - #then #gas ( ( VGas +Int -104 ) ) - #else #gas ( ( VGas +Int -140 ) ) - #fi - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeSInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1000) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeSInt(256, ABI_x)) - andBool ((#rangeSInt(256, ABI_x *Int ABI_y)))))))) - - - -endmodule diff --git a/tests/specs/mcd/vat-muluu-pass-spec.k b/tests/specs/mcd/vat-muluu-pass-spec.k deleted file mode 100644 index c7e65037bd..0000000000 --- a/tests/specs/mcd/vat-muluu-pass-spec.k +++ /dev/null @@ -1,104 +0,0 @@ - -requires "verification.k" - -module VAT-MULUU-PASS-SPEC - imports VERIFICATION - - // Vat_muluu - claim [Vat.muluu.pass]: - #execute ~> CONTINUATION => JUMP JMPTO ~> #pc [ JUMP ] ~> #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => ABI_x *Int ABI_y : WS - _ - 13234 => 13277 - #gas(VGas) => #if ABI_y ==Int 0 - #then #gas ( ( VGas +Int -62 ) ) - #else #gas ( ( VGas +Int -114 ) ) - #fi - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1000) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x *Int ABI_y))))))) - -endmodule \ No newline at end of file diff --git a/tests/specs/mcd/vat-slip-pass-rough-spec.k b/tests/specs/mcd/vat-slip-pass-rough-spec.k deleted file mode 100644 index e8d37d7eeb..0000000000 --- a/tests/specs/mcd/vat-slip-pass-rough-spec.k +++ /dev/null @@ -1,216 +0,0 @@ -requires "verification.k" - -module VAT-SLIP-PASS-ROUGH-SPEC - imports VERIFICATION - - // Vat_slip - claim [Vat.slip.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("slip", #bytes32(ABI_ilk), #address(ABI_usr), #int256(ABI_wad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Vat.gem[ABI_ilk][ABI_usr] <- Gem +Int ABI_wad ] - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeBytes(32, ABI_ilk) - andBool (#rangeAddress(ABI_usr) - andBool (#rangeSInt(256, ABI_wad) - andBool (#rangeUInt(256, May) - andBool (#rangeUInt(256, Gem) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (((May ==Int 1)) - andBool (((VCallValue ==Int 0)) - andBool ((#rangeUInt(256, Gem +Int ABI_wad))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.wards[CALLER_ID]) ==Int May - andBool #lookup(ACCT_ID_STORAGE, #Vat.gem[ABI_ilk][ABI_usr]) ==Int Gem - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.wards[CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.gem[ABI_ilk][ABI_usr]) ==Int Junk_1 - andBool #Vat.wards[CALLER_ID] =/=Int #Vat.gem[ABI_ilk][ABI_usr] - - // Vat_addui - claim [Vat.addui.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - chop(ABI_y) : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS - _ - 13112 => 13174 - #gas(VGas) => #if ( ABI_y - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - _Nonce_Vat => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeSInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1015) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) - - - [trusted] - - -endmodule diff --git a/tests/specs/mcd/vat-subui-fail-rough-spec.k b/tests/specs/mcd/vat-subui-fail-rough-spec.k deleted file mode 100644 index acaedc95e4..0000000000 --- a/tests/specs/mcd/vat-subui-fail-rough-spec.k +++ /dev/null @@ -1,107 +0,0 @@ -requires "verification.k" - -module VAT-SUBUI-FAIL-ROUGH-SPEC - imports VERIFICATION - - // Vat_subui - claim [Vat.subui.fail.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => ?_ - _ => ?FAILURE:EndStatusCode - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - chop(ABI_y) : ABI_x : JMPTO : WS => ?_ - _ - 13304 => ?_ - #gas(VGas) => ?_ - VMemoryUsed - _ => ?_ - _ - VCallDepth => ?_ - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeSInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1015) - andBool (#rangeUInt(256, VMemoryUsed))))) - andBool #rangeNonce(Nonce_Vat) - - - andBool notBool ( - ((#rangeUInt(256, ABI_x:Int -Int ABI_y:Int))) - ) - ensures - ?FAILURE =/=K EVMC_SUCCESS - -endmodule diff --git a/tests/specs/mcd/vat-subui-pass-rough-spec.k b/tests/specs/mcd/vat-subui-pass-rough-spec.k deleted file mode 100644 index 534d885516..0000000000 --- a/tests/specs/mcd/vat-subui-pass-rough-spec.k +++ /dev/null @@ -1,103 +0,0 @@ -requires "verification.k" - -module VAT-SUBUI-PASS-ROUGH-SPEC - imports VERIFICATION - - // Vat_subui - claim [Vat.subui.pass.rough]: - #execute ~> CONTINUATION => JUMP JMPTO ~> #pc [ JUMP ] ~> #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - chop(ABI_y) : ABI_x : JMPTO : WS => ABI_x -Int ABI_y : WS - _ - 13304 => 13366 - #gas(VGas) => ?_ - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeSInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1015) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x -Int ABI_y))))))) - - - -endmodule diff --git a/tests/specs/mcd/vat-subui-pass-spec.k b/tests/specs/mcd/vat-subui-pass-spec.k deleted file mode 100644 index ae2d2d7489..0000000000 --- a/tests/specs/mcd/vat-subui-pass-spec.k +++ /dev/null @@ -1,109 +0,0 @@ -requires "verification.k" - -module VAT-SUBUI-PASS-SPEC - imports VERIFICATION - - // Vat_subui - claim [Vat.subui.pass]: - #execute ~> CONTINUATION => JUMP JMPTO ~> #pc [ JUMP ] ~> #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - chop(ABI_y) : ABI_x : JMPTO : WS => ABI_x -Int ABI_y : WS - _ - 13304 => 13366 - #gas(VGas) => #if ( ABI_y =/=Int 0 andBool 0 <=Int ABI_y ) - #then #gas ( ( VGas +Int -136 ) ) - #else #if 0 <=Int ABI_y - #then #gas ( ( VGas +Int -122 ) ) - #else #gas ( ( VGas +Int -136 ) ) - #fi - #fi - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeSInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1015) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x -Int ABI_y))))))) - - - -endmodule diff --git a/tests/specs/mcd/verification.k b/tests/specs/mcd/verification.k deleted file mode 100644 index be07719dec..0000000000 --- a/tests/specs/mcd/verification.k +++ /dev/null @@ -1,483 +0,0 @@ -requires "lemmas/lemmas.k" -requires "bin_runtime.k" -requires "storage.k" -requires "word-pack.k" - -module VERIFICATION - imports DSS-BIN-RUNTIME - imports DSS-STORAGE - imports LEMMAS-MCD - -endmodule - -module LEMMAS-MCD - imports LEMMAS-MCD-HASKELL - -endmodule - -module LEMMAS-MCD-SYNTAX - imports LEMMAS - - // ######################## - // Constants - // ######################## - - syntax Int ::= "#Wad" [macro] - | "#Ray" [macro] - | "#Rad" [macro] - // ----------------------------- - rule #Wad => 1000000000000000000 - rule #Ray => 1000000000000000000000000000 - rule #Rad => 1000000000000000000000000000000000000000000000 - - // ######################## - // Word Reasoning - // ######################## - - syntax Bool ::= #notPrecompileAddress ( Int ) [function] - // -------------------------------------------------------- - rule #notPrecompileAddress ( X ) => 0 ==Int X orBool (10 <=Int X andBool #rangeAddress(X)) - - syntax Int ::= #string2Word ( String ) [function] - // ------------------------------------------------- - rule #string2Word(S) => #asWord(#padRightToWidth(32, #parseByteStackRaw(S))) - - syntax Int ::= nthbyteof ( Int , Int , Int ) [function, smtlib(smt_nthbyteof)] - // ------------------------------------------------------------------------------ - rule nthbyteof(V, I, N) => nthbyteof(V /Int 256, I, N -Int 1) when N >Int (I +Int 1) [concrete] - rule nthbyteof(V, I, N) => V modInt 256 when N ==Int (I +Int 1) [concrete] - - // ######################## - // Buffer Reasoning - // ######################## - - syntax Bytes ::= #asByteStackInWidth ( Int, Int ) [function] - | #asByteStackInWidthaux ( Int, Int, Int, Bytes ) [function] - // --------------------------------------------------------------------------- - rule #asByteStackInWidth(X, N) => #asByteStackInWidthaux(X, N -Int 1, N, .Bytes) - - rule #asByteStackInWidthaux(X, I, N, WS) => #asByteStackInWidthaux(X, I -Int 1, N, nthbyteof(X, I, N) : WS) when I >Int 0 - rule #asByteStackInWidthaux(X, 0, N, WS) => nthbyteof(X, 0, N) : WS - - // ######################## - // Arithmetic - // ######################## - - syntax Int ::= #rmul ( Int , Int ) [function, smtlib(smt_rmul)] - // --------------------------------------------------------------- - rule #rmul(X, Y) => (X *Int Y) /Int #Ray - -endmodule - -module LEMMAS-MCD-HASKELL [symbolic, kore] - imports LEMMAS-MCD-COMMON - - // ######################## - // Arithmetic - // ######################## - - rule chop(Y) => Y +Int pow256 requires #range( 0 -Int maxUInt256 <= Y < 0 ) [simplification] - - rule sgn(chop(X)) ==Int 1 => 0 <=Int X requires #rangeSInt(256, X) [simplification] - rule sgn(chop(X)) ==Int -1 => X X ==Int 0 requires #rangeSInt(256, X) [simplification] - - rule bool2Word( X:Bool ) |Int bool2Word( Y:Bool ) => bool2Word(X orBool Y) [simplification] - rule bool2Word( X:Bool ) ==Int 0 => notBool X [simplification] - - // ### vat-subui-fail-rough - // - // Via Z3 4.8.7 - // (declare-const pow256 Int) - // (assert (= pow256 115792089237316195423570985008687907853269984665640564039457584007913129639936)) - // - // ; 2^255 - // (declare-const pow255 Int) - // (assert (= pow255 57896044618658097711785492504343953926634992332820282019728792003956564819968)) - // - // ; chop - // (define-fun chop ((x Int)) Int (mod x pow256)) - // - // ; uint256 - // (define-fun uint256 ((x Int)) Bool (and (>= x 0) (< x pow256))) - // - // ; sint256 - // (define-fun sint256 ((x Int)) Bool (and (>= x (- pow255)) (< x pow255))) - // - // ;;;; proof - // - // (declare-const x Int) - // (declare-const y Int) - // - // (assert (uint256 x)) - // (assert (sint256 y)) - // (assert (<= y 0)) - // (assert (not (uint256 (- x y)))) - // - // (assert (not (= (chop (- x y)) (- x (+ y pow256))))) - // (check-sat) - rule chop ( X -Int Y ) => X -Int (Y +Int pow256) - requires #rangeUInt(256, X) - andBool #rangeSInt(256, Y) - andBool Y <=Int 0 - andBool notBool #rangeUInt(256, X -Int Y) [simplification] - - rule { chop(X) #Equals chop(Y) } => { X #Equals Y } - requires #rangeSInt(256, X) andBool #rangeSInt(256, Y) - [simplification] - - // ######################## - // Buffer Reasoning - // ######################## - - rule { #buf(32, BY:Int):Bytes #Equals #buf(32, BZ:Int):Bytes } => { BY #Equals BZ } - requires #rangeUInt(256, BY) andBool #rangeUInt(256, BZ) [simplification] - - rule { BA1:Bytes +Bytes (BA2:Bytes +Bytes BA3:Bytes) #Equals BA4:Bytes +Bytes BA3 } => { (BA1 +Bytes BA2) #Equals BA4 } [simplification] - - rule { BA1:Bytes +Bytes BA2:Bytes #Equals BA3:Bytes +Bytes BA4:Bytes } => - { true #Equals BA1 ==K BA3 andBool BA2 ==K BA4 } - requires (lengthBytes(BA1) ==Int lengthBytes(BA3)) - orBool (lengthBytes(BA2) ==Int lengthBytes(BA4)) - [simplification] - - rule { BA1:Bytes #Equals BA2:Bytes +Bytes BA3:Bytes } => - { true #Equals BA1 ==K BA2 andBool .Bytes ==K BA3 } - requires (lengthBytes(BA1) ==Int lengthBytes(BA2)) - [simplification] - - // ######################## - // Map - // ######################## - - rule #range(M:Bytes [ K <- V ] , START, WIDTH) => #range(M [ K := V : .Bytes ], START, WIDTH) requires K +Int 1 ==Int START +Int WIDTH andBool START <=Int K andBool 0 #range(M [ K := V : VS' ], START, WIDTH) requires K' +Int lengthBytes(VS') ==Int START +Int WIDTH andBool START <=Int K andBool 0 { V1 #Equals V2 } - [simplification] - -endmodule - - -module LEMMAS-MCD-COMMON - imports LEMMAS-MCD-SYNTAX - imports WORD-PACK - - // ######################## - // Buffer Reasoning - // ######################## - - rule #range( (W0 : WS) , 0 , WIDTH ) => W0 : ( #range(WS, 0, WIDTH -Int 1 )) requires 0 #range( WS, START -Int 1, WIDTH ) requires 0 #range(WS, START, WIDTH') requires WIDTH' <=Int WIDTH [simplification] - - // ### cat-exhaustiveness - - rule ( BA1:Bytes +Bytes BA2:Bytes ) +Bytes BA3:Bytes => BA1 +Bytes ( BA2 +Bytes BA3 ) [simplification] - - // ######################## - // Keccak - // ######################## - - rule keccak(_) ==Int I => false requires #rangeSmall(I) [simplification] - rule keccak(_) +Int I1 ==Int I2 => false - requires #rangeSmall(I1) andBool #rangeSmall(I2) [simplification] - - // ######################## - // Word Reasoning - // ######################## - - rule notMaxUInt160 &Int ADDR => 0 requires #rangeAddress(ADDR) [simplification] - - rule #sizeWordStack(WS, N) => #sizeWordStack(WS, 0) +Int N requires N =/=Int 0 [simplification] - - // ### vat-addui-fail-rough - // - // Proof: - // case sgn(X) ==Int 1 - // X s X bool2Word(false) // #rangeUInt(256, X) - // case sgn(X) ==Int -1 - // X s bool2Word(true) // sgn(X) ==Int -1 andBool sgn(0) ==Int 1 - // - // Via Z3 4.8.7: - // ; 2^256 - // (declare-const pow256 Int) - // (assert (= pow256 115792089237316195423570985008687907853269984665640564039457584007913129639936)) - // - // ; 2^255 - // (declare-const pow255 Int) - // (assert (= pow255 57896044618658097711785492504343953926634992332820282019728792003956564819968)) - // - // ; sgn - // (declare-fun sgn (Int) Int) - // (assert (forall ((x Int)) (=> (and (>= x 0) (< x pow255)) (= (sgn x) 1)))) - // (assert (forall ((x Int)) (=> (and (>= x pow255) (< x pow256)) (= (sgn x) -1)))) - // - // ; s (and (= (sgn x) 1) (= (sgn y) 1)) (= (slt x y) (< x y))))) - // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) 1) (= (sgn y) -1)) (= (slt x y) false)))) - // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) -1) (= (sgn y) 1)) (= (slt x y) true)))) - // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) -1) (= (sgn y) -1)) (= (slt x y) (> x y))))) - // - // ;;;; proof - // - // ; uint256 - // (declare-const x Int) - // (assert (and (>= x 0) (< x pow256))) - // - // (assert (not - // (= (slt x 0) (= (sgn x) -1)) - // )) - // (check-sat) - rule X s bool2Word(sgn(X) ==Int -1) requires #rangeUInt(256, X) [simplification] - - rule X -Word Y <=Int X => #rangeUInt(256, X -Int Y) requires #rangeUInt(256, X) andBool #rangeUInt(256, Y) [simplification] - - rule 0 <=Int X +Int Y => true requires 0 <=Int X andBool 0 <=Int Y [simplification] - - // ;(set-option :smt.mbqi true) - // - // ; 2^256 - // (declare-const pow256 Int) - // (assert (= pow256 115792089237316195423570985008687907853269984665640564039457584007913129639936)) - // - // ; 2^255 - // (declare-const pow255 Int) - // (assert (= pow255 57896044618658097711785492504343953926634992332820282019728792003956564819968)) - // - // ; sgn - // (declare-fun sgn (Int) Int) - // (assert (forall ((x Int)) (=> (and (>= x 0) (< x pow255)) (= (sgn x) 1)))) - // (assert (forall ((x Int)) (=> (and (>= x pow255) (< x pow256)) (= (sgn x) -1)))) - // - // ; s (and (= (sgn x) 1) (= (sgn y) 1)) (= (slt x y) (< x y))))) - // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) 1) (= (sgn y) -1)) (= (slt x y) false)))) - // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) -1) (= (sgn y) 1)) (= (slt x y) true)))) - // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) -1) (= (sgn y) -1)) (= (slt x y) (> x y))))) - // - // ; chop - // (define-fun chop ((x Int)) Int (mod x pow256)) - // ;(simplify (chop -1)) - // - // ; /Word - // (define-fun zdiv ((x Int) (y Int)) Int (ite (= y 0) 0 (div x y))) - // - // ; /sWord - // (declare-fun sdiv (Int Int) Int) - // (assert (forall ((x Int) (y Int)) (=> (> (* (sgn x) (sgn y)) 0) (= (sdiv x y) (zdiv (abs x) (abs y)) )))) - // (assert (forall ((x Int) (y Int)) (=> (< (* (sgn x) (sgn y)) 0) (= (sdiv x y) (- (zdiv (abs x) (abs y))))))) - // - // ; uint256 - // (define-fun uint256 ((x Int)) Bool (and (>= x 0) (< x pow256))) - // - // ; sint256 - // (define-fun sint256 ((x Int)) Bool (and (>= x (- pow255)) (< x pow255))) - // - // ;;;; - // - // (declare-const x Int) - // (declare-const y Int) - - // Via Z3 4.7.1: - // (push) - // (assert (not (=> (uint256 x) (= (slt 0 x) (and (= (sgn x) 1) (not (= x 0))) ) ) )) - // (check-sat) - // (pop) - rule 0 s bool2Word(sgn(X) ==Int 1 andBool X =/=Int 0) requires #rangeUInt(256, X) [simplification] - - // Via Z3 4.7.1: - // (push) - // (assert (not (=> true (= (chop (- x (chop y))) (chop (- x y)) ) ) )) - // (check-sat) - // (pop) - rule X -Word chop(Y) => chop(X -Int Y) [simplification] - - rule ADDR in (SetItem(I) REST) => ADDR in REST requires #notPrecompileAddress(ADDR) andBool notBool #notPrecompileAddress(I) [simplification] - - // This proof ends up with side-conditions which look like this: - // Tic ==K 0 andBool 0 ==K maxUInt48 &Int (#lookup(STORAGE, ADDR) /Int pow160) andBool Tic ==K maxUInt48 &Int (#lookup(STORAGE, ADDR) /Int pow160) - // So we need this rule to do the structural simplification because the Java backend will not use this string of equalities to do the simplification directly. - rule #WordPackAddrUInt48UInt48(ADDR, maxUInt48 &Int (ADDR_UINT48_UINT48 /Int pow160), UINT48_2) => #WordPackAddrUInt48UInt48(ADDR, 0, UINT48_2) requires maxUInt48 &Int (ADDR_UINT48_UINT48 /Int pow160) ==Int 0 [simplification] - - // ######################## - // Map - // ######################## - - rule M:Bytes [ K <- V ] [ K' <- V' ] => M [ K' <- V' ] [ K <- V ] requires K' M [ K' <- V' ] [ K := BUF ] requires K' M requires #lookup(M, K) ==Int V [simplification] - - rule M [ K := BUF:Bytes ] [ K' := BUF':Bytes ] => M [ K := (#range(BUF , 0 , K' -Int K )) ] [ K' := BUF' ] - requires K M [ K1 <- V1' ] [ K2 <- V2 ] requires K1 =/=Int K2 [simplification] - - rule M [ K1 := (BUF11 +Bytes BUF12) ] [ K2 := BUF2 ] => M [ K1 +Int lengthBytes(BUF11) := BUF12 ] [ K2 := BUF2 ] - requires K2 <=Int K1 - andBool K1 +Int lengthBytes(BUF11) <=Int K2 +Int lengthBytes(BUF2) - [simplification] - - // ######################## - // Arithmetic - // ######################## - - rule X <=Int maxUInt48 &Int (X +Int Y) => false - requires #rangeUInt(48, X) - andBool #rangeUInt(48, Y) - andBool notBool #rangeUInt(48, X +Int Y) [simplification] - - rule chop(N +Int M) true requires #rangeUInt(256, N) - andBool #rangeUInt(256, M) - andBool notBool #rangeUInt(256, N +Int M) - [simplification] - - // This lemma is considered "safe enough" because `keccak` is a hash function over a large range and is very unlikely to overflow. - // Note that this case comes from a solidity struct being accessed (hence the integer offsets), so it's an assumption built into the Solidity compiler anyway. - rule chop(keccak(BA) +Int N) => keccak(BA) +Int N requires 0 <=Int N andBool N chop(X *Int Y) [simplification] - - // Proof #rangeUInt(256, X) andBool #rangeSInt(256, Y) andBool #rangeSInt(256, X *Int Y) andBool Y =/=Int 0 - // chop(X *Int Y) /sWord chop(Y) - // => #sgnInterp(sgn(chop(X *Int Y)) *Int sgn(chop(Y)), abs(chop(X *Int Y)) /Word abs(chop(Y))) - // Focus: sgn(chop(X *Int Y)) *Int sgn(chop(Y)) - // case 0 <=Int Y - // sgn(chop(X *Int Y)) *Int sgn(chop(Y)) - // => sgn(chop(X *Int Y)) *Int sgn(Y) // chop(Y) ==Int Y - // => sgn(X *Int Y) *Int sgn(Y) // 0 <=Int X andBool 0 <=Int Y - // => 1 *Int 1 // 0 <=Int X *Int Y andBool 0 <=Int Y - // => 1 - // case Y sgn(X *Int Y +Int pow256) *Int sgn(Y +Int pow256) // chop(Y) ==Int Y +Int pow256 - // => -1 *Int -1 // X *Int Y 1 - // Focus: abs(chop(X *Int Y)) /Word abs(chop(Y)) - // case 0 <=Int Y - // abs(chop(X *Int Y)) /Word abs(chop(Y)) - // => abs(chop(X *Int Y)) /Int abs(chop(Y)) - // => abs(X *Int Y) /Int abs(Y) // 0 <=Int X andBool 0 <=Int Y andBool #rangeSigne andBool chop(Y) ==Int Y - // => X *Int Y /Int Y // #rangeSInt(256, X *Int Y) andBool 0 <=Int X *Int Y andBool #rangeSInt(256, Y) andBool 0 <=Int Y - // => X - // case Y abs(X *Int Y +Int pow256) /Int abs(Y +Int pow256) // #rangeSInt(256, X *Int Y) andBool chop(Y) ==Int Y +Int pow256 - // => (0 -Word (X *Int Y +Int pow256)) /Int (0 -Word (Y +Int pow256)) // #rangeSInt(256, X *Int Y) andBool X *Int Y (pow256 -Int (X *Int Y +Int pow256)) /Int (pow256 -Int (Y +Int pow256)) // 0 (X *Int Y) /Int Y - // => X - // - // Via Z3 4.7.1: - // ; 2^4 and 2^3 instead of 2^256 and 2^255 for small model proof - // (declare-const pow256 Int) - // (assert (= pow256 16)) - // (declare-const pow255 Int) - // (assert (= pow255 8)) - // - // ; sgn - // (declare-fun sgn (Int) Int) - // (assert (forall ((x Int)) (=> (and (>= x 0) (< x pow255)) (= (sgn x) 1)))) - // (assert (forall ((x Int)) (=> (and (>= x pow255) (< x pow256)) (= (sgn x) -1)))) - // - // ; s (and (= (sgn x) 1) (= (sgn y) 1)) (= (slt x y) (< x y))))) - // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) 1) (= (sgn y) -1)) (= (slt x y) false)))) - // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) -1) (= (sgn y) 1)) (= (slt x y) true)))) - // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) -1) (= (sgn y) -1)) (= (slt x y) (> x y))))) - // - // ; chop - // (define-fun chop ((x Int)) Int (mod x pow256)) - // - // ; /Word - // ;(define-fun zdiv ((x Int) (y Int)) Int (ite (= y 0) 0 (div x y))) - // (define-fun zdiv ((x Int) (y Int)) Int (div x y)) ; y is non-zero in the query below - // - // ; /sWord - // (declare-fun sdiv (Int Int) Int) - // (assert (forall ((x Int) (y Int)) (=> (> (* (sgn x) (sgn y)) 0) (= (sdiv x y) (zdiv (abs x) (abs y)) )))) - // (assert (forall ((x Int) (y Int)) (=> (< (* (sgn x) (sgn y)) 0) (= (sdiv x y) (- (zdiv (abs x) (abs y))))))) - // - // ; uint256 - // (define-fun uint256 ((x Int)) Bool (and (>= x 0) (< x pow256))) - // - // ; sint256 - // (define-fun sint256 ((x Int)) Bool (and (>= x (- pow255)) (< x pow255))) - // - // ;;;; proof - // - // (declare-const x Int) - // (declare-const y Int) - // - // (assert (uint256 x)) - // (assert (sint256 y)) - // (assert (sint256 (* x y))) - // (assert (not (= y 0))) - // - // (assert (not - // (= (sdiv (chop (* x y)) (chop y)) x) - // )) - // (check-sat) - rule chop(X *Int Y) /sWord chop(Y) => X requires #rangeUInt(256, X) andBool #rangeSInt(256, Y) andBool #rangeSInt(256, X *Int Y) andBool Y =/=Int 0 [simplification] - - rule chop(X +Int chop(Y)) => chop(X +Int Y) [simplification] - - rule maxUInt48 &Int (X +Int Y) true - requires #rangeUInt(48, X) - andBool #rangeUInt(48, Y) - andBool notBool (X +Int Y true requires 0 <=Int X andBool 0 <=Int Y [simplification] - rule 0 <=Int X &Int Y => true requires 0 <=Int X andBool 0 <=Int Y [simplification] - - rule X |Int Y true requires X true requires X (maxUInt160 &Int X) |Int (maxUInt160 &Int Y) [simplification] - - rule chop(X *Int Y) => X *Int Y requires 0 <=Int X andBool 0 <=Int Y andBool X *Int Y false requires 0 <=Int Y [simplification] - rule X +Int Y false requires 0 <=Int Y [simplification] - - rule ACCTID ==K ACCTID' => ACCTID ==Int ACCTID' [simplification] - rule ACCTID =/=K ACCTID' => ACCTID =/=Int ACCTID' [simplification] - - rule ((K |-> _) REST) [ K' <- undef ] => REST requires K ==K K' [simplification] - rule ((K |-> V) REST) [ K' <- undef ] => (K |-> V) (REST [ K' <- undef ]) requires K =/=K K' [simplification] - - rule chop( X -Int chop(Y)) => chop( X -Int Y) [simplification] - rule chop((X -Int chop(Y)) *Int Z) => chop((X -Int Y) *Int Z) [simplification] - - rule chop(X +Int pow256) => chop(X) [simplification] - rule chop(chop(X) *Int Y) => chop(X *Int Y) [simplification] - - rule (I1 +Int I2) -Int I1 => I2 [simplification] - - rule ((I1 -Int I2) -Int I3) +Int I2 => I1 -Int I3 [simplification] - - rule M:Map [ K1 <- _ ] [ K2 <- V2 ] [ K3 <- V3 ] [ K1 <- V4 ] => M [ K1 <- V4 ] [ K2 <- V2 ] [ K3 <- V3 ] requires K1 =/=Int K2 andBool K1 =/=Int K3 [simplification] - - rule chop(X *Int (Y +Int pow256)) => chop(X *Int Y) [simplification] - - // ######################## - // Boolean Logic - // ######################## - - rule X:Int ==Int A:Int orBool X ==Int B:Int orBool X ==Int C:Int orBool X ==Int D:Int => X ==Int D - requires X =/=Int A andBool X =/=Int B andBool X =/=Int C - [simplification] - -endmodule diff --git a/tests/specs/mcd/vow-cage-deficit-pass-rough-spec.k b/tests/specs/mcd/vow-cage-deficit-pass-rough-spec.k deleted file mode 100644 index 7845cea2c0..0000000000 --- a/tests/specs/mcd/vow-cage-deficit-pass-rough-spec.k +++ /dev/null @@ -1,950 +0,0 @@ -requires "verification.k" - -module VOW-CAGE-DEFICIT-PASS-ROUGH-SPEC - imports VERIFICATION - - // Vow_cage-deficit - claim [Vow.cage-deficit.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vow_bin_runtime - #computeValidJumpDests(Vow_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("cage", .TypedArgs) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vow_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Vow.live <- 0 ] [ #Vow.Sin <- 0 ] [ #Vow.Ash <- 0 ] - ACCT_ID_ORIG_STORAGE - Nonce_Vow - - - Vat - Vat_balance - Vat_bin_runtime - Vat_STORAGE => Vat_STORAGE [ #Vat.dai[Flapper] <- 0 ] [ #Vat.dai[ACCT_ID] <- 0 ] [ #Vat.sin[ACCT_ID] <- Sin_v -Int (Dai_v +Int Dai_f) ] [ #Vat.vice <- Vice -Int (Dai_v +Int Dai_f) ] [ #Vat.debt <- Debt -Int (Dai_v +Int Dai_f) ] - Vat_ORIG_STORAGE - Nonce_Vat - - - Flapper - Flapper_balance - Flapper_bin_runtime - Flapper_STORAGE => Flapper_STORAGE [ #Flapper.live <- 0 ] - Flapper_ORIG_STORAGE - Nonce_Flapper - - - Flopper - Flopper_balance - Flopper_bin_runtime - Flopper_STORAGE => Flopper_STORAGE [ #Flopper.live <- 0 ] [ #Flopper.vow <- ACCT_ID ] - Flopper_ORIG_STORAGE - Nonce_Flopper - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vow) - andBool #rangeNonce(Nonce_Vat) - andBool #rangeNonce(Nonce_Flapper) - andBool #rangeNonce(Nonce_Flopper) - - andBool (#rangeAddress(Vat) - andBool (#rangeAddress(Flapper) - andBool (#rangeAddress(Flopper) - andBool (#rangeAddress(FlapVat) - andBool (#rangeUInt(256, MayFlap) - andBool (#rangeUInt(256, MayFlop) - andBool (#rangeUInt(256, Dai_v) - andBool (#rangeUInt(256, Sin_v) - andBool (#rangeUInt(256, Dai_f) - andBool (#rangeUInt(256, Debt) - andBool (#rangeUInt(256, Vice) - andBool (#rangeUInt(256, Live) - andBool (#rangeUInt(256, Sin) - andBool (#rangeUInt(256, Ash) - andBool (#rangeUInt(256, FlapLive) - andBool (#rangeUInt(256, FlopLive) - andBool (#rangeAddress(FlopVow) - andBool (#rangeUInt(256, Vat_balance) - andBool (#rangeUInt(256, Flapper_balance) - andBool (#rangeUInt(256, Flopper_balance) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Vat)) - andBool ((#notPrecompileAddress(Flapper)) - andBool ((#notPrecompileAddress(Flopper)) - andBool ((#notPrecompileAddress(FlapVat)) - andBool ((#notPrecompileAddress(FlopVow)) - andBool ((ACCT_ID =/=Int Vat) - andBool ((ACCT_ID =/=Int Flapper) - andBool ((ACCT_ID =/=Int Flopper) - andBool ((Dai_v +Int Dai_f #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vow_bin_runtime - #computeValidJumpDests(Vow_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : #if ABI_x >Int ABI_y #then ABI_y #else ABI_x #fi : WS - _ - 9829 => 9854 - #gas(VGas) => #if ABI_x <=Int ABI_y - #then #gas ( ( VGas +Int -49 ) ) - #else #gas ( ( VGas +Int -59 ) ) - #fi - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vow_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_Vow - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vow) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1000) - andBool (#rangeUInt(256, VMemoryUsed))))) - - - [trusted] - - - // Vat_dai - claim [Vat.dai.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => #buf(32, Rad) - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("dai", #address(ABI_usr)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( VGas +Int -1236 ) ) - 0 => ?_ - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeAddress(ABI_usr) - andBool (#rangeUInt(256, Rad) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#rangeUInt(256, Junk_0) - andBool ((VCallValue ==Int 0)))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.dai[ABI_usr]) ==Int Rad - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.dai[ABI_usr]) ==Int Junk_0 - [trusted] - - - // Vat_sin - claim [Vat.sin.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => #buf(32, Rad) - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("sin", #address(ABI_usr)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( VGas +Int -1235 ) ) - 0 => ?_ - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeAddress(ABI_usr) - andBool (#rangeUInt(256, Rad) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#rangeUInt(256, Junk_0) - andBool ((VCallValue ==Int 0)))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.sin[ABI_usr]) ==Int Rad - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.sin[ABI_usr]) ==Int Junk_0 - [trusted] - - - // Vat_heal - claim [Vat.heal.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("heal", #uint256(ABI_rad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Sin -Int ABI_rad ) , Sin , Junk_0 ) ) -Int Csstore( ISTANBUL , ( Dai -Int ABI_rad ) , Dai , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Vice -Int ABI_rad ) , Vice , Junk_2 ) ) -Int Csstore( ISTANBUL , ( Debt -Int ABI_rad ) , Debt , Junk_3 ) ) +Int -8616 ) ) - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Vat.sin[CALLER_ID] <- Sin -Int ABI_rad ] [ #Vat.dai[CALLER_ID] <- Dai -Int ABI_rad ] [ #Vat.vice <- Vice -Int ABI_rad ] [ #Vat.debt <- Debt -Int ABI_rad ] - ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeUInt(256, ABI_rad) - andBool (#rangeUInt(256, Dai) - andBool (#rangeUInt(256, Sin) - andBool (#rangeUInt(256, Debt) - andBool (#rangeUInt(256, Vice) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (((VCallValue ==Int 0)) - andBool ((#rangeUInt(256, Dai -Int ABI_rad)) - andBool ((#rangeUInt(256, Sin -Int ABI_rad)) - andBool ((#rangeUInt(256, Debt -Int ABI_rad)) - andBool ((#rangeUInt(256, Vice -Int ABI_rad))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.sin[CALLER_ID]) ==Int Sin - andBool #lookup(ACCT_ID_STORAGE, #Vat.dai[CALLER_ID]) ==Int Dai - andBool #lookup(ACCT_ID_STORAGE, #Vat.vice) ==Int Vice - andBool #lookup(ACCT_ID_STORAGE, #Vat.debt) ==Int Debt - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.sin[CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.dai[CALLER_ID]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.vice) ==Int Junk_2 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.debt) ==Int Junk_3 - andBool #Vat.sin[CALLER_ID] =/=Int #Vat.dai[CALLER_ID] - andBool #Vat.sin[CALLER_ID] =/=Int #Vat.vice - andBool #Vat.sin[CALLER_ID] =/=Int #Vat.debt - andBool #Vat.dai[CALLER_ID] =/=Int #Vat.vice - andBool #Vat.dai[CALLER_ID] =/=Int #Vat.debt - andBool #Vat.vice =/=Int #Vat.debt - [trusted] - - - // Flapper_cage - claim [Flapper.cage.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Flapper_bin_runtime - #computeValidJumpDests(Flapper_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("cage", #uint256(ABI_rad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( ( ( ( VGas -Int Csstore( ISTANBUL , 0 , Live , Junk_2 ) ) -Int Csstore( ISTANBUL , ( Dai_a -Int ABI_rad ) , Dai_a , Junk_5 ) ) -Int Csstore( ISTANBUL , ( Dai_u +Int ABI_rad ) , Dai_u , Junk_6 ) ) +Int -15964 ) ) - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flapper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Flapper.live <- 0 ] - ACCT_ID_ORIG_STORAGE - Nonce_Flapper - - - Vat - Vat_balance - Vat_bin_runtime - Vat_STORAGE => Vat_STORAGE [ #Vat.dai[ACCT_ID] <- Dai_a -Int ABI_rad ] [ #Vat.dai[CALLER_ID] <- Dai_u +Int ABI_rad ] - Vat_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Flapper) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeUInt(256, ABI_rad) - andBool (#rangeAddress(Vat) - andBool (#rangeUInt(256, Ward) - andBool (#rangeUInt(256, Live) - andBool (#rangeUInt(256, Dai_a) - andBool (#rangeUInt(256, Dai_u) - andBool (#rangeUInt(256, Vat_balance) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Vat)) - andBool ((CALLER_ID =/=Int ACCT_ID) - andBool (ACCT_ID =/=Int Vat - andBool ((Vat =/=Int 0) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool (#rangeUInt(256, Junk_6) - andBool (((Ward ==Int 1)) - andBool (((VCallDepth #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Flopper_bin_runtime - #computeValidJumpDests(Flopper_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("cage", .TypedArgs) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , 0 , Live , Junk_1 ) ) -Int Csstore( ISTANBUL , CALLER_ID , Vow , Junk_2 ) ) +Int -6351 ) ) - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flopper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Flopper.live <- 0 ] [ #Flopper.vow <- CALLER_ID ] - ACCT_ID_ORIG_STORAGE - Nonce_Flopper - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Flopper) - - andBool (#rangeUInt(256, Ward) - andBool (#rangeUInt(256, Live) - andBool (#rangeAddress(Vow) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#notPrecompileAddress(Vow) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool ((Ward ==Int 1) - andBool ((VCallValue ==Int 0))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Flopper.wards[CALLER_ID]) ==Int Ward - andBool #lookup(ACCT_ID_STORAGE, #Flopper.live) ==Int Live - andBool #lookup(ACCT_ID_STORAGE, #Flopper.vow) ==Int Vow - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.wards[CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.live) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.vow) ==Int Junk_2 - andBool #Flopper.wards[CALLER_ID] =/=Int #Flopper.live - andBool #Flopper.wards[CALLER_ID] =/=Int #Flopper.vow - andBool #Flopper.live =/=Int #Flopper.vow - [trusted] - - -endmodule diff --git a/tests/specs/mcd/vow-cage-surplus-pass-rough-spec.k b/tests/specs/mcd/vow-cage-surplus-pass-rough-spec.k deleted file mode 100644 index c29e82f380..0000000000 --- a/tests/specs/mcd/vow-cage-surplus-pass-rough-spec.k +++ /dev/null @@ -1,951 +0,0 @@ -requires "verification.k" - -module VOW-CAGE-SURPLUS-PASS-ROUGH-SPEC - imports VERIFICATION - - // Vow_cage-surplus - claim [Vow.cage-surplus.pass.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vow_bin_runtime - #computeValidJumpDests(Vow_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("cage", .TypedArgs) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vow_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Vow.live <- 0 ] [ #Vow.Sin <- 0 ] [ #Vow.Ash <- 0 ] - ACCT_ID_ORIG_STORAGE - Nonce_Vow - - - Vat - Vat_balance - Vat_bin_runtime - Vat_STORAGE => Vat_STORAGE [ #Vat.dai[Flapper] <- 0 ] [ #Vat.dai[ACCT_ID] <- (Dai_v +Int Dai_f) -Int Sin_v ] [ #Vat.sin[ACCT_ID] <- 0 ] [ #Vat.vice <- Vice -Int Sin_v ] [ #Vat.debt <- Debt -Int Sin_v ] - Vat_ORIG_STORAGE - Nonce_Vat - - - Flapper - Flapper_balance - Flapper_bin_runtime - Flapper_STORAGE => Flapper_STORAGE [ #Flapper.live <- 0 ] - Flapper_ORIG_STORAGE - Nonce_Flapper - - - Flopper - Flopper_balance - Flopper_bin_runtime - Flopper_STORAGE => Flopper_STORAGE [ #Flopper.live <- 0 ] [ #Flopper.vow <- ACCT_ID ] - Flopper_ORIG_STORAGE - Nonce_Flopper - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeAddress(Vat) - andBool (#rangeAddress(Flapper) - andBool (#rangeAddress(Flopper) - andBool (#rangeAddress(FlapVat) - andBool (#rangeUInt(256, MayFlap) - andBool (#rangeUInt(256, MayFlop) - andBool (#rangeUInt(256, Dai_v) - andBool (#rangeUInt(256, Sin_v) - andBool (#rangeUInt(256, Dai_f) - andBool (#rangeUInt(256, Debt) - andBool (#rangeUInt(256, Vice) - andBool (#rangeUInt(256, Live) - andBool (#rangeUInt(256, Sin) - andBool (#rangeUInt(256, Ash) - andBool (#rangeUInt(256, FlapLive) - andBool (#rangeUInt(256, FlopLive) - andBool (#rangeAddress(FlopVow) - andBool (#rangeUInt(256, Vat_balance) - andBool (#rangeUInt(256, Flapper_balance) - andBool (#rangeUInt(256, Flopper_balance) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Vat)) - andBool ((#notPrecompileAddress(Flapper)) - andBool ((#notPrecompileAddress(Flopper)) - andBool ((#notPrecompileAddress(FlapVat)) - andBool ((#notPrecompileAddress(FlopVow)) - andBool ((ACCT_ID =/=Int Vat) - andBool ((ACCT_ID =/=Int Flapper) - andBool ((ACCT_ID =/=Int Flopper) - andBool ((Dai_v +Int Dai_f >Int Sin_v) - andBool ((Flapper =/=Int ACCT_ID) - andBool ((Flapper =/=Int Vat) - andBool ((Flopper =/=Int ACCT_ID) - andBool ((Flopper =/=Int Vat) - andBool ((Flopper =/=Int Flapper) - andBool ((FlapVat ==Int Vat) - andBool ((Vat =/=Int 0) - andBool ((Flapper =/=Int 0) - andBool ((Flopper =/=Int 0) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool (#rangeUInt(256, Junk_6) - andBool (#rangeUInt(256, Junk_7) - andBool (#rangeUInt(256, Junk_8) - andBool (#rangeUInt(256, Junk_9) - andBool (#rangeUInt(256, Junk_10) - andBool (#rangeUInt(256, Junk_11) - andBool (#rangeUInt(256, Junk_12) - andBool (#rangeUInt(256, Junk_13) - andBool (#rangeUInt(256, Junk_14) - andBool (#rangeUInt(256, Junk_15) - andBool (#rangeUInt(256, Junk_16) - andBool (#rangeUInt(256, Junk_17) - andBool (#rangeUInt(256, Junk_18) - andBool (#rangeUInt(256, Junk_19) - andBool (((VCallValue ==Int 0)) - andBool (((VCallDepth #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vow_bin_runtime - #computeValidJumpDests(Vow_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : #if ABI_x >Int ABI_y #then ABI_y #else ABI_x #fi : WS - _ - 9829 => 9854 - #gas(VGas) => #if ABI_x <=Int ABI_y - #then #gas ( ( VGas +Int -49 ) ) - #else #gas ( ( VGas +Int -59 ) ) - #fi - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vow_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - _ACCT_ID_ORIG_STORAGE - Nonce_Vow - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vow) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 1000) - andBool (#rangeUInt(256, VMemoryUsed))))) - - - [trusted] - - - // Vat_dai - claim [Vat.dai.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => #buf(32, Rad) - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("dai", #address(ABI_usr)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( VGas +Int -1236 ) ) - 0 => ?_ - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeAddress(ABI_usr) - andBool (#rangeUInt(256, Rad) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#rangeUInt(256, Junk_0) - andBool ((VCallValue ==Int 0)))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.dai[ABI_usr]) ==Int Rad - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.dai[ABI_usr]) ==Int Junk_0 - [trusted] - - - // Vat_sin - claim [Vat.sin.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => #buf(32, Rad) - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("sin", #address(ABI_usr)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( VGas +Int -1235 ) ) - 0 => ?_ - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeAddress(ABI_usr) - andBool (#rangeUInt(256, Rad) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#rangeUInt(256, Junk_0) - andBool ((VCallValue ==Int 0)))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.sin[ABI_usr]) ==Int Rad - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.sin[ABI_usr]) ==Int Junk_0 - [trusted] - - - // Vat_heal - claim [Vat.heal.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Vat_bin_runtime - #computeValidJumpDests(Vat_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("heal", #uint256(ABI_rad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Sin -Int ABI_rad ) , Sin , Junk_0 ) ) -Int Csstore( ISTANBUL , ( Dai -Int ABI_rad ) , Dai , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Vice -Int ABI_rad ) , Vice , Junk_2 ) ) -Int Csstore( ISTANBUL , ( Debt -Int ABI_rad ) , Debt , Junk_3 ) ) +Int -8616 ) ) - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vat_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Vat.sin[CALLER_ID] <- Sin -Int ABI_rad ] [ #Vat.dai[CALLER_ID] <- Dai -Int ABI_rad ] [ #Vat.vice <- Vice -Int ABI_rad ] [ #Vat.debt <- Debt -Int ABI_rad ] - ACCT_ID_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeUInt(256, ABI_rad) - andBool (#rangeUInt(256, Dai) - andBool (#rangeUInt(256, Sin) - andBool (#rangeUInt(256, Debt) - andBool (#rangeUInt(256, Vice) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (((VCallValue ==Int 0)) - andBool ((#rangeUInt(256, Dai -Int ABI_rad)) - andBool ((#rangeUInt(256, Sin -Int ABI_rad)) - andBool ((#rangeUInt(256, Debt -Int ABI_rad)) - andBool ((#rangeUInt(256, Vice -Int ABI_rad))))))))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vat.sin[CALLER_ID]) ==Int Sin - andBool #lookup(ACCT_ID_STORAGE, #Vat.dai[CALLER_ID]) ==Int Dai - andBool #lookup(ACCT_ID_STORAGE, #Vat.vice) ==Int Vice - andBool #lookup(ACCT_ID_STORAGE, #Vat.debt) ==Int Debt - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.sin[CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.dai[CALLER_ID]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.vice) ==Int Junk_2 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vat.debt) ==Int Junk_3 - andBool #Vat.sin[CALLER_ID] =/=Int #Vat.dai[CALLER_ID] - andBool #Vat.sin[CALLER_ID] =/=Int #Vat.vice - andBool #Vat.sin[CALLER_ID] =/=Int #Vat.debt - andBool #Vat.dai[CALLER_ID] =/=Int #Vat.vice - andBool #Vat.dai[CALLER_ID] =/=Int #Vat.debt - andBool #Vat.vice =/=Int #Vat.debt - [trusted] - - - // Flapper_cage - claim [Flapper.cage.pass]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Flapper_bin_runtime - #computeValidJumpDests(Flapper_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("cage", #uint256(ABI_rad)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( ( ( ( VGas -Int Csstore( ISTANBUL , 0 , Live , Junk_2 ) ) -Int Csstore( ISTANBUL , ( Dai_a -Int ABI_rad ) , Dai_a , Junk_5 ) ) -Int Csstore( ISTANBUL , ( Dai_u +Int ABI_rad ) , Dai_u , Junk_6 ) ) +Int -15964 ) ) - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flapper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Flapper.live <- 0 ] - ACCT_ID_ORIG_STORAGE - Nonce_Flapper - - - Vat - Vat_balance - Vat_bin_runtime - Vat_STORAGE => Vat_STORAGE [ #Vat.dai[ACCT_ID] <- Dai_a -Int ABI_rad ] [ #Vat.dai[CALLER_ID] <- Dai_u +Int ABI_rad ] - Vat_ORIG_STORAGE - Nonce_Vat - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Flapper) - andBool #rangeNonce(Nonce_Vat) - - andBool (#rangeUInt(256, ABI_rad) - andBool (#rangeAddress(Vat) - andBool (#rangeUInt(256, Ward) - andBool (#rangeUInt(256, Live) - andBool (#rangeUInt(256, Dai_a) - andBool (#rangeUInt(256, Dai_u) - andBool (#rangeUInt(256, Vat_balance) - andBool ((lengthBytes(CD) <=Int 1250000000) - andBool ((#notPrecompileAddress(Vat)) - andBool ((CALLER_ID =/=Int ACCT_ID) - andBool (ACCT_ID =/=Int Vat - andBool ((Vat =/=Int 0) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool (#rangeUInt(256, Junk_3) - andBool (#rangeUInt(256, Junk_4) - andBool (#rangeUInt(256, Junk_5) - andBool (#rangeUInt(256, Junk_6) - andBool (((Ward ==Int 1)) - andBool (((VCallDepth #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - .Bytes - _ => EVMC_SUCCESS - _VCallStack - _ - _ => ?_ - - Flopper_bin_runtime - #computeValidJumpDests(Flopper_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("cage", .TypedArgs) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , 0 , Live , Junk_1 ) ) -Int Csstore( ISTANBUL , CALLER_ID , Vow , Junk_2 ) ) +Int -6351 ) ) - 0 => ?_ - _ => ?_ - false - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Flopper_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE [ #Flopper.live <- 0 ] [ #Flopper.vow <- CALLER_ID ] - ACCT_ID_ORIG_STORAGE - Nonce_Flopper - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Flopper) - - andBool (#rangeUInt(256, Ward) - andBool (#rangeUInt(256, Live) - andBool (#rangeAddress(Vow) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#notPrecompileAddress(Vow) - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2) - andBool ((Ward ==Int 1) - andBool ((VCallValue ==Int 0))))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Flopper.wards[CALLER_ID]) ==Int Ward - andBool #lookup(ACCT_ID_STORAGE, #Flopper.live) ==Int Live - andBool #lookup(ACCT_ID_STORAGE, #Flopper.vow) ==Int Vow - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.wards[CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.live) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Flopper.vow) ==Int Junk_2 - andBool #Flopper.wards[CALLER_ID] =/=Int #Flopper.live - andBool #Flopper.wards[CALLER_ID] =/=Int #Flopper.vow - andBool #Flopper.live =/=Int #Flopper.vow - [trusted] - - -endmodule diff --git a/tests/specs/mcd/vow-fess-fail-rough-spec.k b/tests/specs/mcd/vow-fess-fail-rough-spec.k deleted file mode 100644 index c09036bd46..0000000000 --- a/tests/specs/mcd/vow-fess-fail-rough-spec.k +++ /dev/null @@ -1,221 +0,0 @@ -requires "verification.k" - -module VOW-FESS-FAIL-ROUGH-SPEC - imports VERIFICATION - - // Vow_fess - claim [Vow.fess.fail.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => ?_ - _ => ?FAILURE:EndStatusCode - _VCallStack - _ - _ => ?_ - - Vow_bin_runtime - #computeValidJumpDests(Vow_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("fess", #uint256(ABI_tab)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth => ?_ - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vow_bin_runtime - ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_Vow => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vow) - - andBool (#rangeUInt(256, ABI_tab) - andBool (#rangeUInt(256, May) - andBool (#rangeUInt(256, Sin_era) - andBool (#rangeUInt(256, Sin) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vow.wards[CALLER_ID]) ==Int May - andBool #lookup(ACCT_ID_STORAGE, #Vow.sin[TIME]) ==Int Sin_era - andBool #lookup(ACCT_ID_STORAGE, #Vow.Sin) ==Int Sin - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vow.wards[CALLER_ID]) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vow.sin[TIME]) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vow.Sin) ==Int Junk_2 - andBool #Vow.wards[CALLER_ID] =/=Int #Vow.sin[TIME] - andBool #Vow.wards[CALLER_ID] =/=Int #Vow.Sin - andBool #Vow.sin[TIME] =/=Int #Vow.Sin - andBool notBool ( - (((May:Int ==Int 1)) - andBool (((VCallValue:Int ==Int 0)) - andBool ((#rangeUInt(256, Sin_era:Int +Int ABI_tab:Int)) - andBool ((#rangeUInt(256, Sin:Int +Int ABI_tab:Int)))))) - ) - ensures - ?FAILURE =/=K EVMC_SUCCESS - - // Vow_adduu - claim [Vow.adduu.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vow_bin_runtime - #computeValidJumpDests(Vow_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS - _ - 9777 => 9802 - #gas(VGas) => #gas ( ( VGas +Int -54 ) ) - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vow_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_Vow => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vow) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) - - - [trusted] - - -endmodule diff --git a/tests/specs/mcd/vow-flog-fail-rough-spec.k b/tests/specs/mcd/vow-flog-fail-rough-spec.k deleted file mode 100644 index f8020f3403..0000000000 --- a/tests/specs/mcd/vow-flog-fail-rough-spec.k +++ /dev/null @@ -1,320 +0,0 @@ -requires "verification.k" - -module VOW-FLOG-FAIL-ROUGH-SPEC - imports VERIFICATION - - // Vow_flog - claim [Vow.flog.fail.rough]: - #execute ~> CONTINUATION => #halt ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - _ => ?_ - _ => ?FAILURE:EndStatusCode - _VCallStack - _ - _ => ?_ - - Vow_bin_runtime - #computeValidJumpDests(Vow_bin_runtime) - ACCT_ID - CALLER_ID - #abiCallData("flog", #uint256(ABI_t)) +Bytes CD => ?_ - VCallValue - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - #gas(VGas) => ?_ - 0 => ?_ - _ => ?_ - false - VCallDepth => ?_ - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vow_bin_runtime - ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_Vow => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vow) - - andBool (#rangeUInt(256, ABI_t) - andBool (#rangeUInt(256, Wait) - andBool (#rangeUInt(256, Sin_t) - andBool (#rangeUInt(256, Sin) - andBool (lengthBytes(CD) <=Int 1250000000 - andBool (#rangeUInt(256, Junk_0) - andBool (#rangeUInt(256, Junk_1) - andBool (#rangeUInt(256, Junk_2))))))))) - - andBool #lookup(ACCT_ID_STORAGE, #Vow.wait) ==Int Wait - andBool #lookup(ACCT_ID_STORAGE, #Vow.Sin) ==Int Sin - andBool #lookup(ACCT_ID_STORAGE, #Vow.sin[ABI_t]) ==Int Sin_t - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vow.wait) ==Int Junk_0 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vow.Sin) ==Int Junk_1 - andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vow.sin[ABI_t]) ==Int Junk_2 - andBool #Vow.wait =/=Int #Vow.Sin - andBool #Vow.wait =/=Int #Vow.sin[ABI_t] - andBool #Vow.Sin =/=Int #Vow.sin[ABI_t] - andBool notBool ( - (((ABI_t:Int +Int Wait:Int <=Int TIME:Int)) - andBool (((VCallValue:Int ==Int 0)) - andBool ((#rangeUInt(256, ABI_t:Int +Int Wait:Int)) - andBool ((#rangeUInt(256, Sin:Int -Int Sin_t:Int)))))) - ) - ensures - ?FAILURE =/=K EVMC_SUCCESS - - // Vow_adduu - claim [Vow.adduu.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vow_bin_runtime - #computeValidJumpDests(Vow_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS - _ - 9777 => 9802 - #gas(VGas) => #gas ( ( VGas +Int -54 ) ) - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vow_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_Vow => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) - andBool #rangeNonce(Nonce_Vow) - - - [trusted] - - - // Vow_subuu - claim [Vow.subuu.pass]: - #execute ~> CONTINUATION => #execute ~> CONTINUATION - 1 - NORMAL - ISTANBUL - - - VOutput => VOutput - _ => ?_ - _VCallStack - _ - _ => ?_ - - Vow_bin_runtime - #computeValidJumpDests(Vow_bin_runtime) - ACCT_ID - CALLER_ID - _ => ?_ - VCallValue - ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x -Int ABI_y : WS - _ - 9803 => 9828 - #gas(VGas) => #gas ( ( VGas +Int -54 ) ) - VMemoryUsed - _ => ?_ - _ - VCallDepth - - - _VSelfDestruct - _ => ?_ - _Vrefund => ?_ - _ => ?_ - _ => ?_ - - _ - ORIGIN_ID - _ - - _ - _ - _ - _ - _ - _ - _ - _ - _BLOCK_NUMBER - _ - _ - TIME - _ - _ - _ - _ - _ - - - - VChainId - - - ACCT_ID - ACCT_ID_balance - Vow_bin_runtime - ACCT_ID_STORAGE => ACCT_ID_STORAGE - ACCT_ID_ORIG_STORAGE - Nonce_Vow => ?_ - - ... - - _ - _ - _ - - - requires #rangeAddress(ACCT_ID) - andBool ACCT_ID =/=Int 0 - andBool #notPrecompileAddress(ACCT_ID) - andBool #rangeAddress(CALLER_ID) - andBool #rangeAddress(ORIGIN_ID) - andBool #rangeUInt(256, TIME) - andBool #rangeUInt(256, ACCT_ID_balance) - andBool VCallDepth <=Int 1024 - andBool #rangeUInt(256, VCallValue) - andBool #rangeUInt(256, VChainId) - andBool #rangeNonce(Nonce_Vow) - - andBool (#rangeUInt(256, ABI_x) - andBool (#rangeUInt(256, ABI_y) - andBool ((#sizeWordStack(WS) <=Int 100) - andBool (#rangeUInt(256, VMemoryUsed) - andBool ((#rangeUInt(256, ABI_x -Int ABI_y))))))) - - - [trusted] - - -endmodule diff --git a/tests/specs/mcd/word-pack.k b/tests/specs/mcd/word-pack.k deleted file mode 100644 index b62fdaa207..0000000000 --- a/tests/specs/mcd/word-pack.k +++ /dev/null @@ -1,175 +0,0 @@ -requires "evm-types.md" - - // - // The Solidity compiler sometimes packs together multiple arguments into one storage location, for optimized reads/writes. - // Because the packed variables are all smaller than a `uint256`, they can fit into one word. - // If you use the pattern `SOMETHING ==K #WordPack*(ARG1, ..., ARGN)` in your side-conditions, you're actually making several assertions about `SOMETHING` and `ARG1 ... ARGN`. - // First, you're asserting that each `ARGi` can be unpacked from the variable `SOMETHING` using the correct accessors. - // Second, you're asserting that `SOMETHING` contains no other values than the packed `ARGi` (so we add a range condition to `SOMETHING`). - // This allows us to turn the side-condition SOMETHING ==K #WordPack*(ARG1, ..., ARGN)` into the more useful side-conditions `ARG1 ==K access1(SOMETHING) andBool ... andBool ARGN ==K accessN(SOMETHING)`. - // The arguments are packed in reverse order, so that the highest bits are set by the last argument. - // - // When updating variables which originally contained `WordPack*`, the Solidity compiler will mask the original value everywhere _except_ where you're updating. - // Then the update will be bitwise `|Int` with the masked value, and the new value written back. - // Here we provide the masks which are used by the Solidity compiler, and rules which fold these bitwise updates back up into semantic `#WordPack*` arguments for the purposes of matching the RHS of proofs. - // - -module WORD-PACK - imports WORD-PACK-HASKELL -endmodule - -module WORD-PACK-HASKELL [kore] - imports WORD-PACK-COMMON - - rule { ADDR_UINT48_UINT48:Int #Equals #WordPackAddrUInt48UInt48(ADDR:Int, UINT48_1:Int, UINT48_2:Int) } - => { true #Equals ( - ADDR ==Int maxUInt160 &Int ADDR_UINT48_UINT48 - andBool UINT48_1 ==Int maxUInt48 &Int (ADDR_UINT48_UINT48 /Int pow160) - andBool UINT48_2 ==Int maxUInt48 &Int (ADDR_UINT48_UINT48 /Int pow208) - andBool #rangeUInt(256, ADDR_UINT48_UINT48) - ) } - [simplification] - - rule { #WordPackAddrUInt48UInt48(ADDR:Int, UINT48_1:Int, UINT48_2:Int) #Equals ADDR_UINT48_UINT48:Int } - => { true #Equals ( - ADDR ==Int maxUInt160 &Int ADDR_UINT48_UINT48 - andBool UINT48_1 ==Int maxUInt48 &Int (ADDR_UINT48_UINT48 /Int pow160) - andBool UINT48_2 ==Int maxUInt48 &Int (ADDR_UINT48_UINT48 /Int pow208) - andBool #rangeUInt(256, ADDR_UINT48_UINT48) - ) } - [simplification] - - rule { UINT48_UINT48 #Equals #WordPackUInt48UInt48(UINT48_1, UINT48_2) } - => { true #Equals ( - UINT48_1 ==Int maxUInt48 &Int UINT48_UINT48 - andBool UINT48_2 ==Int maxUInt48 &Int (UINT48_UINT48 /Int pow48) - andBool #rangeUInt(96, UINT48_UINT48) - ) } - [simplification] - - rule { #WordPackUInt48UInt48(UINT48_1, UINT48_2) #Equals UINT48_UINT48} - => { true #Equals ( - UINT48_1 ==Int maxUInt48 &Int UINT48_UINT48 - andBool UINT48_2 ==Int maxUInt48 &Int (UINT48_UINT48 /Int pow48) - andBool #rangeUInt(96, UINT48_UINT48) - ) } - [simplification] - - rule { #WordPackAddrUInt8(ADDR, UINT8) #Equals ADDR_UINT8 } - => { true #Equals ( - ADDR ==Int maxUInt160 &Int ADDR_UINT8 - andBool UINT8 ==Int maxUInt8 &Int (ADDR_UINT8 /Int pow160) - andBool #rangeUInt(168, ADDR_UINT8) - ) } - [simplification] - - rule { ADDR_UINT8 #Equals #WordPackAddrUInt8(ADDR, UINT8) } - => { true #Equals ( - ADDR ==Int maxUInt160 &Int ADDR_UINT8 - andBool UINT8 ==Int maxUInt8 &Int (ADDR_UINT8 /Int pow160) - andBool #rangeUInt(168, ADDR_UINT8) - andBool #rangeUInt(160, ADDR) - andBool #rangeUInt(8, UINT8) - ) } - [simplification] - - // - // #WordPack definedness - // - rule #Ceil ( #WordPackAddrUInt48UInt48(ADDR, UINT48_1, UINT48_2) ) => - { true - #Equals - #rangeUInt(160, ADDR) andBool #rangeUInt(48, UINT48_1) andBool #rangeUInt(48, UINT48_2) - } [simplification] - - rule #Ceil ( #WordPackUInt48UInt48(UINT48_1, UINT48_2) ) => - { true #Equals #rangeUInt(48, UINT48_1) andBool #rangeUInt(48, UINT48_2) } [simplification] - - rule #Ceil ( #WordPackAddrUInt8(ADDR, UINT8) ) => - { true #Equals #rangeUInt(160, ADDR) andBool #rangeUInt(8, UINT8) } [simplification] - - rule X |Int 0 => X requires 0 <=Int X [simplification] - rule 0 &Int X => 0 requires 0 <=Int X [simplification] - -endmodule - -module WORD-PACK-COMMON - imports EVM-TYPES - - syntax Int ::= #WordPackUInt48UInt48 ( Int , Int ) [function, no-evaluators, smtlib(WordPackUInt48UInt48)] - | #WordPackAddrUInt48UInt48 ( Int , Int , Int ) [function, no-evaluators, smtlib(WordPackAddrUInt48UInt48)] - | #WordPackAddrUInt8 ( Int , Int ) [function, no-evaluators, smtlib(WordPackAddrUInt8)] - // ----------------------------------------------------------------------------------------------------------------- - // rule #WordPackUInt48UInt48 ( UINT48_1 , UINT48_2 ) => UINT48_2 *Int pow48 +Int UINT48_1 requires #rangeUInt(48, UINT48_1) andBool #rangeUInt(48, UINT48_2) - // rule #WordPackAddrUInt48UInt48 ( ADDR , UINT48_1 , UINT48_2 ) => UINT48_2 *Int pow208 +Int UINT48_1 *Int pow160 +Int ADDR requires #rangeAddress(ADDR) andBool #rangeUInt(48, UINT48_1) andBool #rangeUInt(48, UINT48_2) - // rule #WordPackAddrUInt8 ( ADDR , UINT8 ) => UINT8 *Int pow160 +Int ADDR requires #rangeAddress(ADDR) andBool #rangeUInt(8, UINT_8) - - syntax Int ::= "maskWordPackUInt48UInt48_1" [macro] // 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFF - | "maskWordPackUInt48UInt48_2" [macro] // 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 - // ------------------------------------------------------------------------------------------------------------------------- - rule maskWordPackUInt48UInt48_1 => 115792089237316195423570985008687907853269984665561335876943319951794562400255 - rule maskWordPackUInt48UInt48_2 => 115792089237316195423570985008687907853269984665640564039457583726438152929280 - - rule (maskWordPackUInt48UInt48_2 &Int UINT48_UINT48) /Int pow48 => maxUInt48 &Int (UINT48_UINT48 /Int pow48) requires #rangeUInt(96, UINT48_UINT48) [simplification] - rule maskWordPackUInt48UInt48_1 &Int UINT48_UINT48 => maxUInt48 &Int UINT48_UINT48 requires #rangeUInt(96, UINT48_UINT48) [simplification] - - rule (UINT48_2 *Int pow48) |Int (maskWordPackUInt48UInt48_1 &Int UINT48_UINT48) => #WordPackUInt48UInt48( (maskWordPackUInt48UInt48_1 &Int UINT48_UINT48), UINT48_2) requires #rangeUInt(96, UINT48_UINT48) andBool #rangeUInt(48, UINT48_2) [simplification] - rule UINT48_1 |Int (maskWordPackUInt48UInt48_2 &Int UINT48_UINT48) => #WordPackUInt48UInt48( UINT48_1 , (maskWordPackUInt48UInt48_2 &Int UINT48_UINT48) /Int pow48 ) requires #rangeUInt(96, UINT48_UINT48) andBool #rangeUInt(48, UINT48_1) [simplification] - rule (UINT48_2 *Int pow48) |Int (maxUInt48 &Int UINT48_UINT48) => #WordPackUInt48UInt48( maxUInt48 &Int UINT48_UINT48 , UINT48_2 ) requires #rangeUInt(96, UINT48_UINT48) andBool #rangeUInt(48, UINT48_2) [simplification] - - syntax Int ::= "maskWordPackAddrUInt48UInt48_2" [macro] // 0xFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - | "maskWordPackAddrUInt48UInt48_3" [macro] // 0x000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - // ----------------------------------------------------------------------------------------------------------------------------- - rule maskWordPackAddrUInt48UInt48_2 => 115792089237315784047431654708638870748305248246218003188207458632603225030655 - rule maskWordPackAddrUInt48UInt48_3 => 411376139330301510538742295639337626245683966408394965837152255 - - rule (ADDR |Int (notMaxUInt160 &Int ADDR_UINT48_UINT48)) /Int pow160 => ADDR_UINT48_UINT48 /Int pow160 requires #rangeUInt(256, ADDR_UINT48_UINT48) andBool #rangeAddress(ADDR) [simplification] - rule (ADDR |Int (notMaxUInt160 &Int ADDR_UINT48_UINT48)) /Int pow208 => ADDR_UINT48_UINT48 /Int pow208 requires #rangeUInt(256, ADDR_UINT48_UINT48) andBool #rangeAddress(ADDR) [simplification] - - rule (UINT48_2 *Int pow208) |Int (maskWordPackAddrUInt48UInt48_3 &Int ADDR_UINT48_UINT48) => #WordPackAddrUInt48UInt48(maxUInt160 &Int ADDR_UINT48_UINT48, maxUInt48 &Int (ADDR_UINT48_UINT48 /Int pow160), UINT48_2) requires #rangeUInt(256, ADDR_UINT48_UINT48) andBool #rangeUInt(48, UINT48_2) [simplification] - rule (UINT48_1 *Int pow160) |Int (maskWordPackAddrUInt48UInt48_2 &Int ADDR_UINT48_UINT48) => #WordPackAddrUInt48UInt48(maxUInt160 &Int ADDR_UINT48_UINT48, UINT48_1, maxUInt48 &Int (ADDR_UINT48_UINT48 /Int pow208)) requires #rangeUInt(256, ADDR_UINT48_UINT48) andBool #rangeUInt(48, UINT48_1) [simplification] - - rule maxUInt48 &Int (maskWordPackUInt48UInt48_2 &Int A) => 0 requires 0 <=Int A [simplification] - - // - // #WordPack components - // - rule maxUInt160 &Int #WordPackAddrUInt48UInt48(X:Int, _, _) => X [simplification] - rule maxUInt48 &Int (#WordPackAddrUInt48UInt48(_, Y:Int, _) /Int pow160) => Y [simplification] - rule #WordPackAddrUInt48UInt48(_, _, Z:Int) /Int pow208 => Z [simplification] - - rule maxUInt48 &Int #WordPackUInt48UInt48 (X:Int , _) => X [simplification] - rule #WordPackUInt48UInt48 (_, Y:Int) /Int pow48 => Y [simplification] - - rule maxUInt160 &Int #WordPackAddrUInt8 (X:Int , _) => X [simplification] - rule #WordPackAddrUInt8 (_, Y:Int) /Int pow160 => Y [simplification] - - // - // #WordPack ranges - // - rule 0 <=Int #WordPackAddrUInt48UInt48(_, _, _) => true [simplification] - rule #WordPackAddrUInt48UInt48(_, _, _) true [simplification] - - rule 0 <=Int #WordPackUInt48UInt48(_, _) => true [simplification] - rule #WordPackUInt48UInt48(_, _) true [simplification] - - rule 0 <=Int #WordPackAddrUInt8(_, _) => true [simplification] - rule #WordPackAddrUInt8(_, _) true [simplification] - - // - // More simplifications surrounding pow48/160 - // - rule maxUInt48 &Int X:Int => X requires #rangeUInt(48, X) [simplification] - rule maxUInt160 &Int X:Int => X requires #rangeUInt(160, X) [simplification] - - rule maxUInt48 &Int (X /Int pow48) => X /Int pow48 requires #rangeUInt(96, X) [simplification] - - rule maxUInt48 &Int (A:Int |Int B:Int) => (maxUInt48 &Int A) |Int (maxUInt48 &Int B) requires 0 <=Int A andBool 0 <=Int B [simplification] - rule maxUInt160 &Int (A:Int |Int B:Int) => (maxUInt160 &Int A) |Int (maxUInt160 &Int B) requires 0 <=Int A andBool 0 <=Int B [simplification] - - rule 0 <=Int X &Int Y => true requires 0 <=Int X andBool 0 <=Int Y [simplification] - rule X &Int Y true requires 0 <=Int X andBool 0 <=Int Y andBool (X 0 requires 0 <=Int X andBool X X &Int Y requires 0 <=Int X andBool 0 <=Int Y [simplification] -endmodule diff --git a/tests/specs/opcodes/create-spec.k b/tests/specs/opcodes/create-spec.k deleted file mode 100644 index edf1d98b0f..0000000000 --- a/tests/specs/opcodes/create-spec.k +++ /dev/null @@ -1,155 +0,0 @@ -requires "verification.k" - -/* - -`CREATE VALUE MEMSTART MEMWIDTH` will return (push into the stack) `#newAddr(ACCT_ID, NONCE)` and update the network state (see network cell). - -`#generatedCode` is the runtime bytecode of the newly created contract -that is generated by executing the contract creation bytecode provided by #range(#mapWithCode, #memStart, #memWidth)`. - -#mapWithCode, #memStart, #memWidth are placeholders. They can be instantiated with concrete values when used in other proofs. - -*/ - - -module CREATE-SPEC - imports VERIFICATION - - claim - #next [ CREATE ] => . ... - 1 - NORMAL - PETERSBURG - - - _ => .Bytes - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - _ - _ - - ACCT_ID - _ // who called this contract; in the begining, origin // msg.sender - _ - _ - - - VALUE : #memStart : #memWidth : WS => #newAddr(ACCT_ID, NONCE) : WS - - #mapWithCode - - PCOUNT => ( PCOUNT +Int 1 ) - - - G => ?_ - - MU => ?_ - _ => ?_ - - false - CALL_DEPTH - - - _ => ?_ - ... - - ... - - - _ - - - - ACCT_ID - BAL => BAL -Int VALUE - NONCE => NONCE +Int 1 - ... - - ( .Bag - => - #newAddr(ACCT_ID, NONCE) - VALUE - 1 - #generatedCode - ... - - ) - REST - - - _ - _ - _ - - - ... - - requires G -Int (Cmem(PETERSBURG, #memoryUsageUpdate(MU, #memStart, #memWidth)) -Int Cmem(PETERSBURG, MU)) -Int 32000 >Int 0 - andBool 0 <=Int CALL_DEPTH andBool CALL_DEPTH =Int VALUE - andBool notBool (#newAddr(ACCT_ID, NONCE) in (SetItem(ACCT_ID) ACCTS)) - andBool ACCT_ID =/=Int #newAddr(ACCT_ID, NONCE) - // 900 is a random value - andBool #range(0 <= #sizeWordStack(WS) <= 900) - - claim - #execute => #halt ... - 1 - NORMAL - PETERSBURG - - - _ => #generatedCode - _ => EVMC_SUCCESS - _ - _ - _ => ?_ - - - #range(#mapWithCode, #memStart, #memWidth) - _ - - ACCT_ID - _ // who called this contract; in the begining, origin // msg.sender - _ - _ - - .WordStack => ?_ - .Bytes => ?_ - 0 => ?_ - // simplified gas cost - G => 0 - MU => ?_ - _ => ?_ - - false - CALL_DEPTH - - - _ => ?_ - ... - - ... - - - _ - - _ - - _ - _ - _ - - - ... - - requires 0 <=Int CALL_DEPTH andBool CALL_DEPTH 0 [simplification] - - // ######################## - // Arithmetic - // ######################## - - rule chop(I) => I requires 0 <=Int I andBool I true requires 0 <=Int N [simplification, smt-lemma] - rule #sizeWordStack ( WS , N ) => N +Int #sizeWordStack ( WS , 0 ) requires N =/=Int 0 [simplification] -endmodule diff --git a/tests/specs/smoke b/tests/specs/smoke deleted file mode 100644 index 73567f4213..0000000000 --- a/tests/specs/smoke +++ /dev/null @@ -1,49 +0,0 @@ -tests/specs/benchmarks/address00-spec.k -tests/specs/benchmarks/bytes00-spec.k -tests/specs/benchmarks/encode-keccak00-spec.k -tests/specs/benchmarks/encodepacked-keccak01-spec.k -tests/specs/benchmarks/keccak00-spec.k -tests/specs/benchmarks/overflow00-nooverflow-spec.k -tests/specs/benchmarks/overflow00-overflow-spec.k -tests/specs/benchmarks/requires01-a0gt0-spec.k -tests/specs/benchmarks/staticarray00-spec.k -tests/specs/benchmarks/staticloop00-a0lt10-spec.k -tests/specs/benchmarks/storagevar02-nooverflow-spec.k -tests/specs/benchmarks/storagevar02-overflow-spec.k -tests/specs/bihu/forwardToHotWallet-failure-1-spec.k -tests/specs/bihu/forwardToHotWallet-failure-2-spec.k -tests/specs/bihu/forwardToHotWallet-failure-3-spec.k -tests/specs/erc20/ds/allowance-spec.k -tests/specs/erc20/ds/approve-success-spec.k -tests/specs/erc20/ds/balanceOf-spec.k -tests/specs/erc20/ds/transfer-failure-1-c-spec.k -tests/specs/erc20/ds/transfer-failure-2-b-spec.k -tests/specs/erc20/ds/transferFrom-failure-1-d-spec.k -tests/specs/erc20/ds/transferFrom-failure-2-c-spec.k -tests/specs/erc20/hkg/allowance-spec.k -tests/specs/erc20/hkg/approve-spec.k -tests/specs/erc20/hkg/transfer-failure-1-spec.k -tests/specs/erc20/hkg/transfer-failure-2-spec.k -tests/specs/erc20/hkg/transferFrom-failure-2-spec.k -tests/specs/erc20/hkg/transferFrom-success-2-spec.k -tests/specs/erc20/hkg/transfer-success-1-spec.k -tests/specs/erc20/hkg/transfer-success-2-spec.k -tests/specs/examples/solidity-code-spec.md -tests/specs/mcd/cat-exhaustiveness-spec.k -tests/specs/mcd/cat-file-addr-pass-rough-spec.k -tests/specs/mcd/dai-symbol-pass-spec.k -tests/specs/mcd/dsvalue-read-pass-spec.k -tests/specs/mcd/dsvalue-read-pass-summarize-spec.k -tests/specs/mcd/end-subuu-pass-spec.k -tests/specs/mcd/flipper-tau-pass-spec.k -tests/specs/mcd/flipper-ttl-pass-spec.k -tests/specs/mcd/flopper-cage-pass-spec.k -tests/specs/mcd/functional-spec.k -tests/specs/mcd/vat-addui-fail-rough-spec.k -tests/specs/mcd/vat-deny-diff-fail-rough-spec.k -tests/specs/mcd/vat-mului-pass-spec.k -tests/specs/mcd/vat-subui-fail-rough-spec.k -tests/specs/mcd/vat-subui-pass-rough-spec.k -tests/specs/mcd/vat-subui-pass-spec.k -tests/specs/mcd/vow-fess-fail-rough-spec.k -tests/specs/mcd/vow-flog-fail-rough-spec.k diff --git a/tests/templates/output-success-haskell.json b/tests/templates/output-success-haskell.json deleted file mode 100644 index 6334d92e1b..0000000000 --- a/tests/templates/output-success-haskell.json +++ /dev/null @@ -1,170 +0,0 @@ - - - . - - - 0 - - - SUCCESS - - - DEFAULT - - - - - b"" - - - .StatusCode - - - .List - - - .List - - - .Set - - - - b"" - - - .Set - - - .Account - - - .Account - - - b"" - - - 0 - - - .WordStack - - - b"" - - - 0 - - - 0 - - - 0 - - - 0 - - - false - - - 0 - - - - - .Set - - - .List - - - 0 - - - .Set - - - .Map - - - - 0 - - - .Account - - - .List - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - b"" - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - b"" - - - 0 - - - 0 - - - [ .JSONs ] - - - - - - 1 - - - .AccountCellMap - - - .List - - - .List - - - .MessageCellMap - - - - diff --git a/tests/templates/output-success-java.json b/tests/templates/output-success-java.json deleted file mode 100644 index 3a50239b1d..0000000000 --- a/tests/templates/output-success-java.json +++ /dev/null @@ -1,170 +0,0 @@ - - - . - - - 0 - - - SUCCESS - - - DEFAULT - - - - - .WordStack - - - .StatusCode - - - .List - - - .List - - - .Set - - - - .WordStack - - - .Set - - - .Account - - - .Account - - - .WordStack - - - 0 - - - .WordStack - - - .Map - - - 0 - - - 0 - - - 0 - - - 0 - - - false - - - 0 - - - - - .Set - - - .List - - - 0 - - - .Set - - - .Map - - - - 0 - - - .Account - - - .List - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - .WordStack - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - .WordStack - - - 0 - - - 0 - - - [ .JSONs ] - - - - - - 1 - - - .Map - - - .List - - - .List - - - .Map - - - - diff --git a/tests/templates/output-success-llvm.json b/tests/templates/output-success-llvm.json deleted file mode 100644 index 7bd1196717..0000000000 --- a/tests/templates/output-success-llvm.json +++ /dev/null @@ -1,173 +0,0 @@ - - - . - - - 0 - - - SUCCESS - - - DEFAULT - - - - - b"" - - - .StatusCode - - - .List - - - .List - - - .Set - - - - b"" - - - .Set - - - .Account - - - .Account - - - b"" - - - 0 - - - .WordStack - - - b"" - - - 0 - - - 0 - - - 0 - - - 0 - - - false - - - 0 - - - - - .Set - - - .List - - - 0 - - - .Set - - - .Map - - - - 0 - - - .Account - - - .List - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - b"" - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - b"" - - - 0 - - - 0 - - - 0 - - - [ .JSONs ] - - - - - - 1 - - - .AccountCellMap - - - .List - - - .List - - - .MessageCellMap - - - - diff --git a/tests/vm/accesslist_proto.bin b/tests/vm/accesslist_proto.bin deleted file mode 100644 index f3dc24c51e9467fe8a7cbd262d2c725d9cbb96f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmZQzU@+riHqtW^(&u7i5MpGIVq{QaWYA({Fk)n|Vq|b)Wbk5S2;$&7yO-z+N#YO(Igde*i;+o)i{U>Q U{CwIV0TN{blgvQh0s)8u0P)I6X#fBK diff --git a/tests/vm/accesslist_proto.bin.expected b/tests/vm/accesslist_proto.bin.expected deleted file mode 100644 index 0baa5c44b4431ac8b1d7e98db53ff5038d57fbe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 471 zcmZQzV36Pv;}TivA6)Y1>DxVhT5Z!01{?njwkIuj iP5+_H`k%Xk7BFIW7!La_u&WkQ00k2sz$iqnP6hz$YNezA diff --git a/tests/vm/hello_proto.bin b/tests/vm/hello_proto.bin deleted file mode 100644 index d624a24f19a72c4d8cee7b4ad221eb956835b4f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15 WcmZQzVBqFrHqtW^Vo72$F#-SxR{@Iv diff --git a/tests/vm/hello_proto.bin.expected b/tests/vm/hello_proto.bin.expected deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/vm/proto_tester.cpp b/tests/vm/proto_tester.cpp deleted file mode 100644 index b865b5f87c..0000000000 --- a/tests/vm/proto_tester.cpp +++ /dev/null @@ -1,75 +0,0 @@ -#include -#include -#include - -#include -#include "proto/msg.pb.h" - -using namespace org::kframework::kevm::extvm; -using namespace google::protobuf::util; - -class VMQueryReader { -public: - VMQueryReader(const char *infile) { - if (!(data = fopen(infile, "r"))) { - perror(infile); - exit(1); - } - } - ~VMQueryReader() { fclose(data); } - - int ateof() { return feof(data); } - - const VMQuery &message() { return current; } - - bool next() { - uint32_t len; - - fread(&len, 1, 4, data); - - if (feof(data)) { - return false; - } - - len = ntohl(len); - std::string buf(len, '\000'); - fread(&buf[0], 1, len, data); - - current.Clear(); - if(!current.ParseFromString(buf)) { - return false; - } - - return true; - } -private: - FILE *data; - VMQuery current; -}; - -int main(int argc, char *argv[]) { - if (argc != 3) { - fprintf(stderr, "Usage: %s \n", argv[0]); - exit(1); - } - - VMQueryReader expected(argv[1]); - VMQueryReader out(argv[2]); - - std::string differences; - MessageDifferencer diff; - diff.set_repeated_field_comparison(MessageDifferencer::AS_SET); - diff.ReportDifferencesToString(&differences); - - while (expected.next() && out.next()) { - if (!diff.Compare(expected.message(), out.message())) { - std::cerr << expected.message().DebugString() << std::endl; - std::cerr << out.message().DebugString() << std::endl; - std::cerr << differences << std::endl; - return 1; - } - } - - return 0; -} - diff --git a/web/.gitignore b/web/.gitignore deleted file mode 100644 index c935a51ea2..0000000000 --- a/web/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.cache \ No newline at end of file diff --git a/web/.nvmrc b/web/.nvmrc deleted file mode 100644 index 03128968bf..0000000000 --- a/web/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -lts/dubnium diff --git a/web/README.md b/web/README.md deleted file mode 100644 index 157ab86c2e..0000000000 --- a/web/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# K Website - -Please make sure you have nodejs and npm installed - -```bash -$ npm install # install necessary dependencies -$ npm run build # build the website to ./public_content directory -$ npm run serve # start the development server -``` \ No newline at end of file diff --git a/web/build-html.js b/web/build-html.js deleted file mode 100644 index b580d4ca46..0000000000 --- a/web/build-html.js +++ /dev/null @@ -1,23 +0,0 @@ -const { cleanUpFiles, generatePagesFromMarkdownFiles } = require("k-web-theme"); -const path = require("path"); -const fs = require("fs"); - -const pageTemplate = fs - .readFileSync("./static_content/html/page_template.html") - .toString("utf-8"); -generatePagesFromMarkdownFiles({ - globPattern: path.resolve(__dirname, "../") + "/**/*.md", - globOptions: { - ignore: [ - path.resolve(__dirname, "../web/**/*"), - path.resolve(__dirname, "../deps/k/**/*"), - ], - }, - origin: "https://github.com/kframework/evm-semantics/tree/master/", - sourceDirectory: path.resolve(__dirname, "../"), - outputDirectory: path.resolve(__dirname, "./public_content/"), - websiteOrigin: "https://jellopaper.org", - websiteDirectory: path.resolve(__dirname, "./public_content/"), - includeFileBasePath: path.resolve(__dirname, "./static_content/html/"), - template: pageTemplate, -}); diff --git a/web/k-web-theme b/web/k-web-theme deleted file mode 160000 index c6efe97b2f..0000000000 --- a/web/k-web-theme +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c6efe97b2f28a3fb6521d204c9c200f8fb1d3bc4 diff --git a/web/package-lock.json b/web/package-lock.json deleted file mode 100644 index 8a5f47242e..0000000000 --- a/web/package-lock.json +++ /dev/null @@ -1,12660 +0,0 @@ -{ - "name": "evm-semantics", - "version": "1.0.1", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "evm-semantics", - "version": "1.0.1", - "license": "UNLICENSED", - "dependencies": { - "k-web-theme": "file:k-web-theme" - }, - "devDependencies": { - "http-server": "^0.12.3" - } - }, - "k-web-theme": { - "version": "0.0.1", - "dependencies": { - "@parcel/transformer-sass": "^2.7.0", - "@shd101wyy/mume": "^0.7.2", - "animate.css": "^4.1.1", - "ansi_up": "^4.0.4", - "bootstrap": "^4.5.3", - "bootstrap-select": "^1.13.18", - "cheerio": "^1.0.0-rc.3", - "clipboard": "^2.0.6", - "express": "^4.17.1", - "font-awesome": "^4.7.0", - "get-port": "^5.1.1", - "glob": "^7.1.6", - "http-server": "^0.12.3", - "imagesloaded": "^4.1.4", - "isotope-layout": "^3.0.6", - "jquery": "^3.5.1", - "jquery-countdown": "^2.2.0", - "jquery-visible": "^1.2.0", - "jquery.animate-number": "0.0.14", - "katex": "^0.13.13", - "magnific-popup": "^1.1.0", - "markdown-it": "^12.0.2", - "markdown-it-anchor": "^6.0.1", - "markdown-it-attrs": "^4.1.0", - "owl.carousel": "^2.3.4", - "parcel": "^2.7.0", - "popper.js": "^1.16.1", - "prismjs": "^1.22.0", - "sass": "^1.29.0", - "sitemap-generator": "^8.5.1", - "toastr": "^2.1.4", - "twitter-fetcher": "^18.0.4", - "webfonts-generator": "^0.4.0", - "wow.js": "^1.2.2", - "yaml": "^1.10.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@lezer/common": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", - "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==" - }, - "node_modules/@lezer/lr": { - "version": "0.15.8", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", - "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", - "dependencies": { - "@lezer/common": "^0.15.0" - } - }, - "node_modules/@lmdb/lmdb-darwin-arm64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz", - "integrity": "sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@lmdb/lmdb-darwin-x64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz", - "integrity": "sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@lmdb/lmdb-linux-arm": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.2.tgz", - "integrity": "sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-linux-arm64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.2.tgz", - "integrity": "sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-linux-x64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.2.tgz", - "integrity": "sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-win32-x64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz", - "integrity": "sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@mischnic/json-sourcemap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz", - "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==", - "dependencies": { - "@lezer/common": "^0.15.7", - "@lezer/lr": "^0.15.4", - "json5": "^2.2.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-2.1.2.tgz", - "integrity": "sha512-TyVLn3S/+ikMDsh0gbKv2YydKClN8HaJDDpONlaZR+LVJmsxLFUgA+O7zu59h9+f9gX1aj/ahw9wqa6rosmrYQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-2.1.2.tgz", - "integrity": "sha512-YPXtcVkhmVNoMGlqp81ZHW4dMxK09msWgnxtsDpSiZwTzUBG2N+No2bsr7WMtBKCVJMSD6mbAl7YhKUqkp/Few==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-2.1.2.tgz", - "integrity": "sha512-42R4MAFeIeNn+L98qwxAt360bwzX2Kf0ZQkBBucJ2Ircza3asoY4CDbgiu9VWklq8gWJVSJSJBwDI+c/THiWkA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-2.1.2.tgz", - "integrity": "sha512-vHZ2JiOWF2+DN9lzltGbhtQNzDo8fKFGrf37UJrgqxU0yvtERrzUugnfnX1wmVfFhSsF8OxrfqiNOUc5hko1Zg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-2.1.2.tgz", - "integrity": "sha512-RjRoRxg7Q3kPAdUSC5EUUPlwfMkIVhmaRTIe+cqHbKrGZ4M6TyCA/b5qMaukQ/1CHWrqYY2FbKOAU8Hg0pQFzg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-2.1.2.tgz", - "integrity": "sha512-rIZVR48zA8hGkHIK7ED6+ZiXsjRCcAVBJbm8o89OKAMTmEAQ2QvoOxoiu3w2isAaWwzgtQIOFIqHwvZDyLKCvw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@parcel/bundler-default": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.7.0.tgz", - "integrity": "sha512-PU5MtWWhc+dYI9x8mguYnm9yiG6TkI7niRpxgJgtqAyGHuEyNXVBQQ0X+qyOF4D9LdankBf8uNN18g31IET2Zg==", - "dependencies": { - "@parcel/diagnostic": "2.7.0", - "@parcel/hash": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/cache": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.7.0.tgz", - "integrity": "sha512-JlXNoZXcWzLKdDlfeF3dIj5Vtel5T9vtdBN72PJ+cjC4qNHk4Uwvc5sfOBELuibGN0bVu2bwY9nUgSwCiB1iIA==", - "dependencies": { - "@parcel/fs": "2.7.0", - "@parcel/logger": "2.7.0", - "@parcel/utils": "2.7.0", - "lmdb": "2.5.2" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "peerDependencies": { - "@parcel/core": "^2.7.0" - } - }, - "node_modules/@parcel/codeframe": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.7.0.tgz", - "integrity": "sha512-UTKx0jejJmmO1dwTHSJuRgrO8N6PMlkxRT6sew8N6NC3Bgv6pu0EbO+RtlWt/jCvzcdLOPdIoTzj4MMZvgcMYg==", - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/compressor-raw": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.7.0.tgz", - "integrity": "sha512-SCXwnOOQT6EmpusBsYWNQ/RFri+2JnKuE0gMSf2dROl2xbererX45FYzeDplWALCKAdjMNDpFwU+FyMYoVZSCQ==", - "dependencies": { - "@parcel/plugin": "2.7.0" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/config-default": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.7.0.tgz", - "integrity": "sha512-ZzsLr97AYrz8c9k6qn3DlqPzifi3vbP7q3ynUrAFxmt0L4+K0H9N508ZkORYmCgaFjLIQ8Y3eWpwCJ0AewPNIg==", - "dependencies": { - "@parcel/bundler-default": "2.7.0", - "@parcel/compressor-raw": "2.7.0", - "@parcel/namer-default": "2.7.0", - "@parcel/optimizer-css": "2.7.0", - "@parcel/optimizer-htmlnano": "2.7.0", - "@parcel/optimizer-image": "2.7.0", - "@parcel/optimizer-svgo": "2.7.0", - "@parcel/optimizer-terser": "2.7.0", - "@parcel/packager-css": "2.7.0", - "@parcel/packager-html": "2.7.0", - "@parcel/packager-js": "2.7.0", - "@parcel/packager-raw": "2.7.0", - "@parcel/packager-svg": "2.7.0", - "@parcel/reporter-dev-server": "2.7.0", - "@parcel/resolver-default": "2.7.0", - "@parcel/runtime-browser-hmr": "2.7.0", - "@parcel/runtime-js": "2.7.0", - "@parcel/runtime-react-refresh": "2.7.0", - "@parcel/runtime-service-worker": "2.7.0", - "@parcel/transformer-babel": "2.7.0", - "@parcel/transformer-css": "2.7.0", - "@parcel/transformer-html": "2.7.0", - "@parcel/transformer-image": "2.7.0", - "@parcel/transformer-js": "2.7.0", - "@parcel/transformer-json": "2.7.0", - "@parcel/transformer-postcss": "2.7.0", - "@parcel/transformer-posthtml": "2.7.0", - "@parcel/transformer-raw": "2.7.0", - "@parcel/transformer-react-refresh-wrap": "2.7.0", - "@parcel/transformer-svg": "2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "peerDependencies": { - "@parcel/core": "^2.7.0" - } - }, - "node_modules/@parcel/core": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.7.0.tgz", - "integrity": "sha512-7yKZUdh314Q/kU/9+27ZYTfcnXS6VYHuG+iiUlIohnvUUybxLqVJhdMU9Q+z2QcPka1IdJWz4K4Xx0y6/4goyg==", - "dependencies": { - "@mischnic/json-sourcemap": "^0.1.0", - "@parcel/cache": "2.7.0", - "@parcel/diagnostic": "2.7.0", - "@parcel/events": "2.7.0", - "@parcel/fs": "2.7.0", - "@parcel/graph": "2.7.0", - "@parcel/hash": "2.7.0", - "@parcel/logger": "2.7.0", - "@parcel/package-manager": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/types": "2.7.0", - "@parcel/utils": "2.7.0", - "@parcel/workers": "2.7.0", - "abortcontroller-polyfill": "^1.1.9", - "base-x": "^3.0.8", - "browserslist": "^4.6.6", - "clone": "^2.1.1", - "dotenv": "^7.0.0", - "dotenv-expand": "^5.1.0", - "json5": "^2.2.0", - "msgpackr": "^1.5.4", - "nullthrows": "^1.1.1", - "semver": "^5.7.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/css": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css/-/css-1.13.0.tgz", - "integrity": "sha512-S4QD4Jd+j8QzU5ZZpfg+1cdmEXeJ71wabbV6ff3DJB/05gXWj9Qf/ZZUVtwH3V255Oif6/jcEmcWY4AmFXTyLw==", - "dependencies": { - "detect-libc": "^1.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/css-darwin-arm64": "1.13.0", - "@parcel/css-darwin-x64": "1.13.0", - "@parcel/css-linux-arm-gnueabihf": "1.13.0", - "@parcel/css-linux-arm64-gnu": "1.13.0", - "@parcel/css-linux-arm64-musl": "1.13.0", - "@parcel/css-linux-x64-gnu": "1.13.0", - "@parcel/css-linux-x64-musl": "1.13.0", - "@parcel/css-win32-x64-msvc": "1.13.0" - } - }, - "node_modules/@parcel/css-darwin-arm64": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-darwin-arm64/-/css-darwin-arm64-1.13.0.tgz", - "integrity": "sha512-GqyAeNa0Bah6WuIgqeBJCBRRcGEqkRMkK1YxgaFBhJiicrJJJ1/aZetzOhwNy6JGpQ8wnKP+p+t6IX2wrklaWw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/css-darwin-x64": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-darwin-x64/-/css-darwin-x64-1.13.0.tgz", - "integrity": "sha512-k7/YBwZ5nDXmyDLCo8Pf7ATqQPo34emv9Tpz2LbYUU3NCO2uhsGzjjsQiYXsAp5QeupPHgDmQeEX6WSvXxo0fQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/css-linux-arm-gnueabihf": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm-gnueabihf/-/css-linux-arm-gnueabihf-1.13.0.tgz", - "integrity": "sha512-mBtDUkF/Gje3a7KMt2edEc9rUdKupTy49bvgGFE9dc+k9ZBQg1L8JK35mUo0Y3Y0jJmRDURY2+LRnxvOWJm3TA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/css-linux-arm64-gnu": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-gnu/-/css-linux-arm64-gnu-1.13.0.tgz", - "integrity": "sha512-h90mKM4SpLLHc1vd06O5SkOae9aR36CfX+NWzgwLI4VKiZGcr+D78gsF7+CDkWrf1hqx5UonguMrqlN/MVdJBQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/css-linux-arm64-musl": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-musl/-/css-linux-arm64-musl-1.13.0.tgz", - "integrity": "sha512-FGg6UyHaPwmZ+IFJmSiUzznNUsGYG1aIvKIWIaw2CgH2cUamqLORSnCIBV4LXrpZJ7I8X2845L76hzMvaetkRg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/css-linux-x64-gnu": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-gnu/-/css-linux-x64-gnu-1.13.0.tgz", - "integrity": "sha512-QJyCKM4ms7OaklffoqleouigDAYATZcCcZkp9AUEt7lqg8i2sWFrInEwWM4QhauwML3gxdKaRVugVZCzMSp3Kg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/css-linux-x64-musl": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-musl/-/css-linux-x64-musl-1.13.0.tgz", - "integrity": "sha512-V2mA8hzZaYRyMIZjEAMaZqrziYTtkjHP/jdS+qnAnHNdvIav3+3Saca3hbSnD2hQuM9iu2wzD3gHoVexlCjTOg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/css-win32-x64-msvc": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-win32-x64-msvc/-/css-win32-x64-msvc-1.13.0.tgz", - "integrity": "sha512-0WFdh4nS5lkjLnBr0N6O7OatbjUFZdVBSlPDdTdwEYZkl8La+SnmGGMEkrE/jiQ6NjjwgLorN7xainmPWuQdDw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/diagnostic": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.7.0.tgz", - "integrity": "sha512-pdq/cTwVoL0n8yuDCRXFRSQHVWdmmIXPt3R3iT4KtYDYvOrMT2dLPT79IMqQkhYPANW8GuL15n/WxRngfRdkug==", - "dependencies": { - "@mischnic/json-sourcemap": "^0.1.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/events": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.7.0.tgz", - "integrity": "sha512-kQDwMKgZ1U4M/G17qeDYF6bW5kybluN6ajYPc7mZcrWg+trEI/oXi81GMFaMX0BSUhwhbiN5+/Vb2wiG/Sn6ig==", - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/fs": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.7.0.tgz", - "integrity": "sha512-PU5fo4Hh8y03LZgemgVREttc0wyHQUNmsJCybxTB7EjJie2CqJRumo+DFppArlvdchLwJdc9em03yQV/GNWrEg==", - "dependencies": { - "@parcel/fs-search": "2.7.0", - "@parcel/types": "2.7.0", - "@parcel/utils": "2.7.0", - "@parcel/watcher": "^2.0.0", - "@parcel/workers": "2.7.0" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "peerDependencies": { - "@parcel/core": "^2.7.0" - } - }, - "node_modules/@parcel/fs-search": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.7.0.tgz", - "integrity": "sha512-K1Hv25bnRpwQVA15RvcRuB8ZhfclnCHA8N8L6w7Ul1ncSJDxCIkIAc5hAubYNNYW3kWjCC2SOaEgFKnbvMllEQ==", - "dependencies": { - "detect-libc": "^1.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/graph": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.7.0.tgz", - "integrity": "sha512-Q6E94GS6q45PtsZh+m+gvFRp/N1Qopxhu2sxjcWsGs5iBd6IWn2oYLWOH5iVzEjWuYpW2HkB08lH6J50O63uOA==", - "dependencies": { - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/hash": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.7.0.tgz", - "integrity": "sha512-k6bSKnIlPJMPU3yjQzfgfvF9zuJZGOAlJgzpL4BbWvdbE8BTdjzLcFn0Ujrtud94EgIkiXd22sC2HpCUWoHGdA==", - "dependencies": { - "detect-libc": "^1.0.3", - "xxhash-wasm": "^0.4.2" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/logger": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.7.0.tgz", - "integrity": "sha512-qjMY/bYo38+o+OiIrTRldU9CwL1E7J72t+xkTP8QIcUxLWz5LYR0YbynZUVulmBSfqsykjjxCy4a+8siVr+lPw==", - "dependencies": { - "@parcel/diagnostic": "2.7.0", - "@parcel/events": "2.7.0" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/markdown-ansi": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.7.0.tgz", - "integrity": "sha512-ipOX0D6FVZFEXeb/z8MnTMq2RQEIuaILY90olVIuHEFLHHfOPEn+RK3u13HA1ChF5/9E3cMD79tu6x9JL9Kqag==", - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/namer-default": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.7.0.tgz", - "integrity": "sha512-lIKMdsmi//7fepecNDYmJYzBlL91HifPsX03lJCdu1dC6q5fBs+gG0XjKKG7yPnSCw1qH/4m7drzt9+dRZYAHQ==", - "dependencies": { - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/node-resolver-core": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.7.0.tgz", - "integrity": "sha512-5UJQHalqMxdhJIs2hhqQzFfQpF7+NAowsRq064lYtiRvcD8wMr3OOQ9wd1iazGpFSl4JKdT7BwDU9/miDJmanQ==", - "dependencies": { - "@parcel/diagnostic": "2.7.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1", - "semver": "^5.7.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/optimizer-css": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.7.0.tgz", - "integrity": "sha512-IfnOMACqhcAclKyOW9X9JpsknB6OShk9OVvb8EvbDTKHJhQHNNmzE88OkSI/pS3ZVZP9Zj+nWcVHguV+kvDeiQ==", - "dependencies": { - "@parcel/css": "^1.12.2", - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.7.0", - "browserslist": "^4.6.6", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/optimizer-htmlnano": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.7.0.tgz", - "integrity": "sha512-5QrGdWS5Hi4VXE3nQNrGqugmSXt68YIsWwKRAdarOxzyULSJS3gbCiQOXqIPRJobfZjnSIcdtkyxSiCUe1inIA==", - "dependencies": { - "@parcel/plugin": "2.7.0", - "htmlnano": "^2.0.0", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "svgo": "^2.4.0" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/optimizer-image": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.7.0.tgz", - "integrity": "sha512-EnaXz5UjR67FUu0BEcqZTT9LsbB/iFAkkghCotbnbOuC5QQsloq6tw54TKU3y+R3qsjgUoMtGxPcGfVoXxZXYw==", - "dependencies": { - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "@parcel/workers": "2.7.0", - "detect-libc": "^1.0.3" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/optimizer-svgo": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.7.0.tgz", - "integrity": "sha512-IO1JV4NpfP3V7FrhsqCcV8pDQIHraFi1/ZvEJyssITxjH49Im/txKlwMiQuZZryAPn8Xb8g395Muawuk6AK6sg==", - "dependencies": { - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "svgo": "^2.4.0" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/optimizer-terser": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.7.0.tgz", - "integrity": "sha512-07VZjIO8xsl2/WmS/qHI8lI/cpu47iS9eRpqwfZEEsdk1cfz50jhWkmFudHBxiHGMfcZ//1+DdaPg9RDBWZtZA==", - "dependencies": { - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1", - "terser": "^5.2.0" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/package-manager": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.7.0.tgz", - "integrity": "sha512-wmfSX1mRrTi8MeA4KrnPk/x7zGUsILCQmTo6lA4gygzAxDbM1pGuyFN8/Kt0y0SFO2lbljARtD/4an5qdotH+Q==", - "dependencies": { - "@parcel/diagnostic": "2.7.0", - "@parcel/fs": "2.7.0", - "@parcel/logger": "2.7.0", - "@parcel/types": "2.7.0", - "@parcel/utils": "2.7.0", - "@parcel/workers": "2.7.0", - "semver": "^5.7.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "peerDependencies": { - "@parcel/core": "^2.7.0" - } - }, - "node_modules/@parcel/packager-css": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.7.0.tgz", - "integrity": "sha512-44nzZwu+ssGuiFmYM6cf/Y4iChiUZ4DUzzpegnGlhXtKJKe4NHntxThJynuRZWKN2AAf48avApDpimg2jW0KDw==", - "dependencies": { - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/packager-html": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.7.0.tgz", - "integrity": "sha512-Zgqd7sdcY/UnR370GR0q2ilmEohUDXsO8A1F28QCJzIsR1iCB6KRUT74+pawfQ1IhXZLaaFLLYe0UWcfm0JeXg==", - "dependencies": { - "@parcel/plugin": "2.7.0", - "@parcel/types": "2.7.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/packager-js": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.7.0.tgz", - "integrity": "sha512-wTRdM81PgRVDzWGXdWmqLwguWnTYWzhEDdjXpW2n8uMOu/CjHhMtogk65aaYk3GOnq6OBL/NsrmBiV/zKPj1vA==", - "dependencies": { - "@parcel/diagnostic": "2.7.0", - "@parcel/hash": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.7.0", - "globals": "^13.2.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/packager-raw": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.7.0.tgz", - "integrity": "sha512-jg2Zp8dI5VpIQlaeahXDCfrPN9m/DKht1NkR9P2CylMAwqCcc1Xc1RRiF0wfwcPZpPMpq1265n+4qnB7rjGBlA==", - "dependencies": { - "@parcel/plugin": "2.7.0" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/packager-svg": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.7.0.tgz", - "integrity": "sha512-EmJg3HpD6/xxKBjir/CdCKJZwI24iVfBuxRS9LUp3xHAIebOzVh1z6IN+i2Di5+NyRwfOFaLliL4uMa1zwbyCA==", - "dependencies": { - "@parcel/plugin": "2.7.0", - "@parcel/types": "2.7.0", - "@parcel/utils": "2.7.0", - "posthtml": "^0.16.4" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/plugin": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.7.0.tgz", - "integrity": "sha512-qqgx+nnMn6/0lRc4lKbLGmhNtBiT93S2gFNB4Eb4Pfz/SxVYoW+fmml+KdfOSiZffWOAH5L6NwhyD7N8aSikzw==", - "dependencies": { - "@parcel/types": "2.7.0" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/reporter-cli": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.7.0.tgz", - "integrity": "sha512-80gEODg8cnAmnxGVuaSVDo8JJ54P9AA2bHwSs1cIkHWlJ3BjDQb83H31bBHncJ5Kn5kQ/j+7WjlqHpTCiOR9PA==", - "dependencies": { - "@parcel/plugin": "2.7.0", - "@parcel/types": "2.7.0", - "@parcel/utils": "2.7.0", - "chalk": "^4.1.0", - "term-size": "^2.2.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/reporter-dev-server": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.7.0.tgz", - "integrity": "sha512-ySuou5addK8fGue8aXzo536BaEjMujDrEc1xkp4TasInXHVcA98b+SYX5NAZTGob5CxKvZQ5ylhg77zW30B+iA==", - "dependencies": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/resolver-default": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.7.0.tgz", - "integrity": "sha512-v8TvWsbLK7/q7n4gv6OrYNbW18xUx4zKbVMGZb1u4yMhzEH4HFr1D9OeoTq3jk+ximAigds8B6triQbL5exF7A==", - "dependencies": { - "@parcel/node-resolver-core": "2.7.0", - "@parcel/plugin": "2.7.0" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/runtime-browser-hmr": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.7.0.tgz", - "integrity": "sha512-PLbMLdclQeYsi2LkilZVGFV1n3y55G1jaBvby4ekedUZjMw3SWdMY2tDxgSDdFWfLCnYHJXdGUQSzGGi1kPzjA==", - "dependencies": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/runtime-js": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.7.0.tgz", - "integrity": "sha512-9/YUZTBNrSN2H6rbz/o1EOM0O7I3ZR/x9IDzxjJBD6Mi+0uCgCD02aedare/SNr1qgnbZZWmhpOzC+YgREcfLA==", - "dependencies": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/runtime-react-refresh": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.7.0.tgz", - "integrity": "sha512-vDKO0rWqRzEpmvoZ4kkYUiSsTxT5NnH904BFPFxKI0wJCl6yEmPuEifmATo73OuYhP6jIP3Qfl1R4TtiDFPJ1Q==", - "dependencies": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "react-error-overlay": "6.0.9", - "react-refresh": "^0.9.0" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/runtime-service-worker": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.7.0.tgz", - "integrity": "sha512-uD2pAV0yV6+e7JaWH4KVPbG+zRCrxr/OACyS9tIh+Q/R1vRmh8zGM3yhdrcoiZ7tFOnM72vd6xY11eTrUsSVig==", - "dependencies": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/source-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.0.tgz", - "integrity": "sha512-E7UOEIof2o89LrKk1agSLmwakjigmEdDp1ZaEdsLVEvq63R/bul4Ij5CT+0ZDcijGpl5tnTbQADY9EyYGtjYgQ==", - "dependencies": { - "detect-libc": "^1.0.3" - }, - "engines": { - "node": "^12.18.3 || >=14" - } - }, - "node_modules/@parcel/transformer-babel": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.7.0.tgz", - "integrity": "sha512-7iklDXXnKH1530+QbI+e4kIJ+Q1puA1ulRS10db3aUJMj5GnvXGDFwhSZ7+T1ps66QHO7cVO29VlbqiRDarH1Q==", - "dependencies": { - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.7.0", - "browserslist": "^4.6.6", - "json5": "^2.2.0", - "nullthrows": "^1.1.1", - "semver": "^5.7.0" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/transformer-css": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.7.0.tgz", - "integrity": "sha512-J4EpWK9spQpXyNCmKK8Xnane0xW/1B/EAmfp7Fiv7g+5yUjY4ODf4KUugvE+Eb2gekPkhOKNHermO2KrX0/PFA==", - "dependencies": { - "@parcel/css": "^1.12.2", - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.7.0", - "browserslist": "^4.6.6", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/transformer-html": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.7.0.tgz", - "integrity": "sha512-wYJl5rn81W+Rlk9oQwDJcjoVsWVDKyeri84FzmlGXOsg0EYgnqOiG+3MDM8GeZjfuGe5fuoum4eqZeS0WdUHXw==", - "dependencies": { - "@parcel/diagnostic": "2.7.0", - "@parcel/hash": "2.7.0", - "@parcel/plugin": "2.7.0", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "posthtml-parser": "^0.10.1", - "posthtml-render": "^3.0.0", - "semver": "^5.7.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/transformer-image": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.7.0.tgz", - "integrity": "sha512-mhi9/R5/ULhCkL2COVIKhNFoLDiZwQgprdaTJr5fnODggVxEX5o7ebFV6KNLMTEkwZUJWoB1hL0ziI0++DtoFA==", - "dependencies": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "@parcel/workers": "2.7.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "peerDependencies": { - "@parcel/core": "^2.7.0" - } - }, - "node_modules/@parcel/transformer-js": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.7.0.tgz", - "integrity": "sha512-mzerR+D4rDomUSIk5RSTa2w+DXBdXUeQrpDO74WCDdpDi1lIl8ppFpqtmU7O6y6p8QsgkmS9b0g/vhcry6CJTA==", - "dependencies": { - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.7.0", - "@parcel/workers": "2.7.0", - "@swc/helpers": "^0.4.2", - "browserslist": "^4.6.6", - "detect-libc": "^1.0.3", - "nullthrows": "^1.1.1", - "regenerator-runtime": "^0.13.7", - "semver": "^5.7.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "peerDependencies": { - "@parcel/core": "^2.7.0" - } - }, - "node_modules/@parcel/transformer-json": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.7.0.tgz", - "integrity": "sha512-RQjuxBpYOch+kr4a0zi77KJtOLTPYRM7iq4NN80zKnA0r0dwDUCxZBtaj2l0O0o3R4MMJnm+ncP+cB7XR7dZYA==", - "dependencies": { - "@parcel/plugin": "2.7.0", - "json5": "^2.2.0" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/transformer-postcss": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.7.0.tgz", - "integrity": "sha512-b6RskXBWf0MjpC9qjR2dQ1ZdRnlOiKYseG5CEovWCqM218RtdydFKz7jS+5Gxkb6qBtOG7zGPONXdPe+gTILcA==", - "dependencies": { - "@parcel/diagnostic": "2.7.0", - "@parcel/hash": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "clone": "^2.1.1", - "nullthrows": "^1.1.1", - "postcss-value-parser": "^4.2.0", - "semver": "^5.7.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/transformer-posthtml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.7.0.tgz", - "integrity": "sha512-cP8YOiSynWJ1ycmBlhnnHeuQb2cwmklZ+BNyLUktj5p78kDy2de7VjX+dRNRHoW4H9OgEcSF4UEfDVVz5RYIhw==", - "dependencies": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "posthtml-parser": "^0.10.1", - "posthtml-render": "^3.0.0", - "semver": "^5.7.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/transformer-raw": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.7.0.tgz", - "integrity": "sha512-sDnItWCFSDez0izK1i5cgv+kXzZTbcJh4rNpVIgmE1kBLvAz608sqgcCkavb2wVJIvLesxYM+5G4p1CwkDlZ1g==", - "dependencies": { - "@parcel/plugin": "2.7.0" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/transformer-react-refresh-wrap": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.7.0.tgz", - "integrity": "sha512-1vRmIJzyBA1nIiXTAU6tZExq2FvJj/2F0ft6KDw8GYPv0KjmdiPo/PmaZ7JeSVOM6SdXQIQCbTmp1vkMP7DtkA==", - "dependencies": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "react-refresh": "^0.9.0" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/transformer-sass": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-sass/-/transformer-sass-2.7.0.tgz", - "integrity": "sha512-6m2T6Y5eQLX7ckIeuOjXXIZbzhyovnl69AvJ2FujoWb2nA55H/kg6ZdbKjo3CfXkOfg9LyG3nVnOE5PMgMpRFQ==", - "dependencies": { - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "sass": "^1.38.0" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/transformer-svg": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.7.0.tgz", - "integrity": "sha512-ioER37zceuuE+K6ZrnjCyMUWEnv+63hIAFResc1OXxRhyt+7kzMz9ZqK0Mt6QMLwl1dxhkLmrU41n9IxzKZuSQ==", - "dependencies": { - "@parcel/diagnostic": "2.7.0", - "@parcel/hash": "2.7.0", - "@parcel/plugin": "2.7.0", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "posthtml-parser": "^0.10.1", - "posthtml-render": "^3.0.0", - "semver": "^5.7.1" - }, - "engines": { - "node": ">= 12.0.0", - "parcel": "^2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/types": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.7.0.tgz", - "integrity": "sha512-+dhXVUnseTCpJvBTGMp0V6X13z6O/A/+CUtwEpMGZ8XSmZ4Gk44GvaTiBOp0bJpWG4fvCKp+UmC8PYbrDiiziw==", - "dependencies": { - "@parcel/cache": "2.7.0", - "@parcel/diagnostic": "2.7.0", - "@parcel/fs": "2.7.0", - "@parcel/package-manager": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/workers": "2.7.0", - "utility-types": "^3.10.0" - } - }, - "node_modules/@parcel/utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.7.0.tgz", - "integrity": "sha512-jNZ5bIGg1r1RDRKi562o4kuVwnz+XJ2Ie3b0Zwrqwvgfj6AbRFIKzDd+h85dWWmcDYzKUbHp11u6VJl1u8Vapg==", - "dependencies": { - "@parcel/codeframe": "2.7.0", - "@parcel/diagnostic": "2.7.0", - "@parcel/hash": "2.7.0", - "@parcel/logger": "2.7.0", - "@parcel/markdown-ansi": "2.7.0", - "@parcel/source-map": "^2.0.0", - "chalk": "^4.1.0" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.5.tgz", - "integrity": "sha512-x0hUbjv891omnkcHD7ZOhiyyUqUUR6MNjq89JhEI3BxppeKWAm6NPQsqqRrAkCJBogdT/o/My21sXtTI9rJIsw==", - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/workers": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.7.0.tgz", - "integrity": "sha512-99VfaOX+89+RaoTSyH9ZQtkMBFZBFMvJmVJ/GeJT6QCd2wtKBStTHlaSnQOkLD/iRjJCNwV2xpZmm8YkTwV+hg==", - "dependencies": { - "@parcel/diagnostic": "2.7.0", - "@parcel/logger": "2.7.0", - "@parcel/types": "2.7.0", - "@parcel/utils": "2.7.0", - "chrome-trace-event": "^1.0.2", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "peerDependencies": { - "@parcel/core": "^2.7.0" - } - }, - "node_modules/@shd101wyy/mume": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@shd101wyy/mume/-/mume-0.7.2.tgz", - "integrity": "sha512-FL5QSdy3u5M92cKvqAZFwNl4lffC2zNA5EBf6S2Vbz4rNAoyyD/s/7ejiGYIN/PMfIs9RWIAoFmo5RJYeLzeog==", - "dependencies": { - "babyparse": "^0.4.6", - "cheerio": "1.0.0-rc.3", - "chrome-location": "^1.2.1", - "fs-extra": "^8.0.1", - "imagemagick-cli": "^0.5.0", - "js-yaml": "^3.13.1", - "less": "^3.9.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "node-fetch": "^2.6.1", - "puppeteer-core": "1.15.0", - "qiniu": "^7.2.2", - "request": "^2.88.0", - "slash": "^2.0.0", - "temp": "^0.9.0", - "twemoji": "^13.1.0", - "uslug": "^1.0.4", - "vega-loader": "^4.1.0", - "yamljs": "^0.3.0" - } - }, - "node_modules/@shd101wyy/mume/node_modules/cheerio": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", - "dependencies": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.1", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@shd101wyy/mume/node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "node_modules/@shd101wyy/mume/node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "engines": { - "node": "*" - } - }, - "node_modules/@shd101wyy/mume/node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "node_modules/@shd101wyy/mume/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/@shd101wyy/mume/node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/@shd101wyy/mume/node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/@shd101wyy/mume/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "node_modules/@shd101wyy/mume/node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/@shd101wyy/mume/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@shd101wyy/mume/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/@shd101wyy/mume/node_modules/parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@shd101wyy/mume/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@swc/helpers": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", - "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@swc/helpers/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/node": { - "version": "18.7.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", - "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/abortcontroller-polyfill": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", - "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", - "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dependencies": { - "es6-promisify": "^5.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/agentkeepalive/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agentkeepalive/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/agentkeepalive/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/animate.css": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-4.1.1.tgz", - "integrity": "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==" - }, - "node_modules/ansi_up": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/ansi_up/-/ansi_up-4.0.4.tgz", - "integrity": "sha512-vRxC8q6QY918MbehO869biJW4tiunJdjOhi5fpY6NLOliBQlZhOkKgABJKJqH+JZfb/WfjvjN1chLWI6tODerw==", - "engines": { - "node": "*" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ast-types/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "node_modules/babyparse": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/babyparse/-/babyparse-0.4.6.tgz", - "integrity": "sha512-fsX2GmTvhpKkmSa0DxJdkw2617HUT+xJ6RYR82w95GjI5A4yWjtOAB/0qcRsXj4VsdkI07jsHWhwqUkVgsZCEw==", - "deprecated": "Deprecated in favour of PapaParse, which now supports Node.js" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/basic-auth": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", - "integrity": "sha512-CtGuTyWf3ig+sgRyC7uP6DM3N+5ur/p8L+FPfsd+BbIfIs74TFfCajZTHnCw6K5dqM0bZEbRIqRy1fAdiUJhTA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/before": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/before/-/before-0.0.1.tgz", - "integrity": "sha512-1J5SWbkoVJH9DTALN8igB4p+nPKZzPrJ/HomqBDLpfUvDXCdjdBmBUcH5McZfur0lftVssVU6BZug5NYh87zTw==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bindings/node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "node_modules/block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ==", - "dependencies": { - "inherits": "~2.0.0" - }, - "engines": { - "node": "0.4 || >=0.5.8" - } - }, - "node_modules/block-stream2": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", - "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", - "dependencies": { - "readable-stream": "^3.4.0" - } - }, - "node_modules/block-stream2/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/bootstrap": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz", - "integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/twbs" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/bootstrap" - } - ], - "peerDependencies": { - "jquery": "1.9.1 - 3", - "popper.js": "^1.16.1" - } - }, - "node_modules/bootstrap-select": { - "version": "1.13.18", - "resolved": "https://registry.npmjs.org/bootstrap-select/-/bootstrap-select-1.13.18.tgz", - "integrity": "sha512-V1IzK4rxBq5FrJtkzSH6RmFLFBsjx50byFbfAf8jYyXROWs7ZpprGjdHeoyq2HSsHyjJhMMwjsQhRoYAfxCGow==", - "peerDependencies": { - "bootstrap": ">=3.0.0", - "jquery": "1.9.1 - 3" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bufferstreams": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.1.3.tgz", - "integrity": "sha512-HaJnVuslRF4g2kSDeyl++AaVizoitCpL9PglzCYwy0uHHyvWerfvEb8jWmYbF1z4kiVFolGomnxSGl+GUQp2jg==", - "dependencies": { - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001384", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001384.tgz", - "integrity": "sha512-BBWt57kqWbc0GYZXb47wTXpmAgqr5LSibPzNjk/AWMdmJMQhLqOl3c/Kd4OAU/tu4NLfYkMx8Tlq3RVBkOBolQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-location": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/chrome-location/-/chrome-location-1.2.1.tgz", - "integrity": "sha512-NPuxEKQ43JlEPjHsgU6HWk4ViLCWf4mlo3dz5s5syPSsq2AaekXnK6qTRwMmXhpTYXAVi4g5ncVnAbD9naz5fw==", - "dependencies": { - "userhome": "^1.0.0", - "which": "^1.0.5" - }, - "bin": { - "chrome-location": "bin.js" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clipboard": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", - "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", - "dependencies": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-to": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", - "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/corser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", - "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cp-file": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.0.0.tgz", - "integrity": "sha512-OtHMgPugkgwHlbph25wlMKd358lZNhX1Y2viUpPoFmlBPlEiPIRhztYWha11grbGPnlM+urp5saVmwsChCIOEg==", - "dependencies": { - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "nested-error-stacks": "^2.0.0", - "pify": "^3.0.0", - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cp-file/node_modules/make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cp-file/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/crc32": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/crc32/-/crc32-0.2.2.tgz", - "integrity": "sha512-PFZEGbDUeoNbL2GHIEpJRQGheXReDody/9axKTxhXtQqIL443wnNigtVZO9iuCIMPApKZRv7k2xr8euXHqNxQQ==", - "bin": { - "crc32": "bin/runner.js" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/cubic2quad": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cubic2quad/-/cubic2quad-1.2.1.tgz", - "integrity": "sha512-wT5Y7mO8abrV16gnssKdmIhIbA9wSkeMzhh27jAguKrV82i24wER0vL5TGhUJ9dbJNDcigoRZ0IAHFEEEI4THQ==" - }, - "node_modules/d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "dependencies": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json.js", - "csv2tsv": "bin/dsv2dsv.js", - "dsv2dsv": "bin/dsv2dsv.js", - "dsv2json": "bin/dsv2json.js", - "json2csv": "bin/json2dsv.js", - "json2dsv": "bin/json2dsv.js", - "json2tsv": "bin/json2dsv.js", - "tsv2csv": "bin/dsv2dsv.js", - "tsv2json": "bin/dsv2json.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/d3-dsv/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/date-fns": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", - "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==" - }, - "node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/default-user-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-user-agent/-/default-user-agent-1.0.0.tgz", - "integrity": "sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw==", - "dependencies": { - "os-name": "~1.0.3" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/degenerator": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz", - "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==", - "dependencies": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0", - "vm2": "^3.9.8" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/desandro-matches-selector": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/desandro-matches-selector/-/desandro-matches-selector-2.0.2.tgz", - "integrity": "sha512-+1q0nXhdzg1IpIJdMKalUwvvskeKnYyEe3shPRwedNcWtnhEKT3ZxvFjzywHDeGcKViIxTCAoOYQWP1qD7VNyg==" - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/digest-header": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/digest-header/-/digest-header-0.0.1.tgz", - "integrity": "sha512-Qi0KOZgRnkQJuvMWbs1ZRRajEnbsMU8xlJI4rHIbPC+skHQ30heO5cIHpUFT4jAvAe+zPtdavLSAxASqoyZ3cg==", - "dependencies": { - "utility": "0.1.11" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/digest-header/node_modules/utility": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/utility/-/utility-0.1.11.tgz", - "integrity": "sha512-epFsJ71+/yC7MKMX7CM9azP31QBIQhywkiBUj74i/T3Y2TXtEor26QBkat7lGamrrNTr5CBI1imd/8F0Bmqw4g==", - "dependencies": { - "address": ">=0.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dotenv": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", - "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ecstatic": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz", - "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", - "deprecated": "This package is unmaintained and deprecated. See the GH Issue 259.", - "dependencies": { - "he": "^1.1.1", - "mime": "^1.6.0", - "minimist": "^1.1.0", - "url-join": "^2.0.5" - }, - "bin": { - "ecstatic": "lib/ecstatic.js" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.233", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.233.tgz", - "integrity": "sha512-ejwIKXTg1wqbmkcRJh9Ur3hFGHFDZDw1POzdsVrB2WZjgRuRMHIQQKNpe64N/qh3ZtH2otEoRoS+s6arAAuAAw==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz", - "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "node_modules/es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", - "dependencies": { - "es6-promise": "^4.0.3" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ev-emitter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-1.1.1.tgz", - "integrity": "sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q==" - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extract-zip": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", - "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", - "dependencies": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - } - }, - "node_modules/extract-zip/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/extract-zip/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/fizzy-ui-utils": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fizzy-ui-utils/-/fizzy-ui-utils-2.0.7.tgz", - "integrity": "sha512-CZXDVXQ1If3/r8s0T+v+qVeMshhfcuq0rqIFgJnrtd+Bu8GmDmqMjntjUePypVtjHXKJ6V4sw9zeyox34n9aCg==", - "dependencies": { - "desandro-matches-selector": "^2.0.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/font-awesome": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", - "integrity": "sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==", - "engines": { - "node": ">=0.10.3" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/formstream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/formstream/-/formstream-1.1.1.tgz", - "integrity": "sha512-yHRxt3qLFnhsKAfhReM4w17jP+U1OlhUjnKPPtonwKbIJO7oBP0MvoxkRUwb8AU9n0MIkYy5X5dK6pQnbj+R2Q==", - "dependencies": { - "destroy": "^1.0.4", - "mime": "^2.5.2", - "pause-stream": "~0.0.11" - } - }, - "node_modules/formstream/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==", - "dependencies": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ftp/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/ftp/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ftp/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-size": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/get-size/-/get-size-2.0.3.tgz", - "integrity": "sha512-lXNzT/h/dTjTxRbm9BXb+SGxxzkm97h/PCIKtlN/CBCxxmkkIVV21udumMS93MuVTDX583gqc94v3RjuHmI+2Q==" - }, - "node_modules/get-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", - "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", - "dependencies": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/get-uri/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/get-uri/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", - "dependencies": { - "delegate": "^3.1.2" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/htmlnano": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.2.tgz", - "integrity": "sha512-+ZrQFS4Ub+zd+/fWwfvoYCEGNEa0/zrpys6CyXxvZDwtL7Pl+pOtRkiujyvBQ7Lmfp7/iEPxtOFgxWA16Gkj3w==", - "dependencies": { - "cosmiconfig": "^7.0.1", - "posthtml": "^0.16.5", - "timsort": "^0.3.0" - }, - "peerDependencies": { - "cssnano": "^5.0.11", - "postcss": "^8.3.11", - "purgecss": "^4.0.3", - "relateurl": "^0.2.7", - "srcset": "^5.0.0", - "svgo": "^2.8.0", - "terser": "^5.10.0", - "uncss": "^0.17.3" - }, - "peerDependenciesMeta": { - "cssnano": { - "optional": true - }, - "postcss": { - "optional": true - }, - "purgecss": { - "optional": true - }, - "relateurl": { - "optional": true - }, - "srcset": { - "optional": true - }, - "svgo": { - "optional": true - }, - "terser": { - "optional": true - }, - "uncss": { - "optional": true - } - } - }, - "node_modules/htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "entities": "^4.3.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/http-server": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz", - "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==", - "dependencies": { - "basic-auth": "^1.0.3", - "colors": "^1.4.0", - "corser": "^2.0.1", - "ecstatic": "^3.3.2", - "http-proxy": "^1.18.0", - "minimist": "^1.2.5", - "opener": "^1.5.1", - "portfinder": "^1.0.25", - "secure-compare": "3.0.1", - "union": "~0.5.0" - }, - "bin": { - "hs": "bin/http-server", - "http-server": "bin/http-server" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "dependencies": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/imagemagick-cli": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/imagemagick-cli/-/imagemagick-cli-0.5.0.tgz", - "integrity": "sha512-rlFbd3MrjysdavK0vUnwUxWvuEBHzXaK3LHVqBUIM6u+noKg5Vv2YljVmu78qEkDNIQ1+AS+17f3mgNMIe/Rlw==", - "dependencies": { - "debug": "^4.1.1" - } - }, - "node_modules/imagemagick-cli/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/imagemagick-cli/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/imagesloaded": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/imagesloaded/-/imagesloaded-4.1.4.tgz", - "integrity": "sha512-ltiBVcYpc/TYTF5nolkMNsnREHW+ICvfQ3Yla2Sgr71YFwQ86bDwV9hgpFhFtrGPuwEx5+LqOHIrdXBdoWwwsA==", - "dependencies": { - "ev-emitter": "^1.0.0" - } - }, - "node_modules/immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-json": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", - "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==" - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isotope-layout": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/isotope-layout/-/isotope-layout-3.0.6.tgz", - "integrity": "sha512-z2ZKablhocXhoNyWwzJPFd7u7FWbYbVJA51Nvsqsod8jH2ExGc1SwDsSWKE54e3PhXzqf2yZPhFSq/c2MR1arw==", - "dependencies": { - "desandro-matches-selector": "^2.0.0", - "fizzy-ui-utils": "^2.0.4", - "get-size": "^2.0.0", - "masonry-layout": "^4.1.0", - "outlayer": "^2.1.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - }, - "node_modules/jquery": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.1.tgz", - "integrity": "sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw==" - }, - "node_modules/jquery-countdown": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jquery-countdown/-/jquery-countdown-2.2.0.tgz", - "integrity": "sha512-EKjzyaHYSQdOnn/eVvP84l044kDB6w//IR/25CHGyhJfT1Lb9pQdMo75n+MqZWgJpLprfeCyaPo/jaSn6sR5AA==" - }, - "node_modules/jquery-visible": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jquery-visible/-/jquery-visible-1.2.0.tgz", - "integrity": "sha512-lj6Xqy7GYEwTD1audFYdv7SrBM6z7icPXNvRpS4e15RXtDksjgU7YF7EKrsqF5rCUZA99OqF+d5H8BGdcwMr+w==" - }, - "node_modules/jquery.animate-number": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/jquery.animate-number/-/jquery.animate-number-0.0.14.tgz", - "integrity": "sha512-G4gylrSOPfREFGcoqIaHXM44I1JhfN4aHpAVGfIVvXW/hFUVEzRbMTwvpu5GVzYyuv2ITKQCgsU/IV8BMEliPQ==", - "dependencies": { - "jquery": ">= 1.7.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/k-web-theme": { - "resolved": "k-web-theme", - "link": true - }, - "node_modules/katex": { - "version": "0.13.24", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.13.24.tgz", - "integrity": "sha512-jZxYuKCma3VS5UuxOx/rFV1QyGSl3Uy/i0kTJF3HgQ5xMinCQVF8Zd4bMY/9aI9b9A2pjIBOsjSSm68ykTAr8w==", - "funding": [ - "https://opencollective.com/katex", - "https://github.com/sponsors/katex" - ], - "dependencies": { - "commander": "^8.0.0" - }, - "bin": { - "katex": "cli.js" - } - }, - "node_modules/less": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz", - "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==", - "dependencies": { - "copy-anything": "^2.0.1", - "tslib": "^1.10.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "native-request": "^1.0.5", - "source-map": "~0.6.0" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/lmdb": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.5.2.tgz", - "integrity": "sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==", - "hasInstallScript": true, - "dependencies": { - "msgpackr": "^1.5.4", - "node-addon-api": "^4.3.0", - "node-gyp-build-optional-packages": "5.0.3", - "ordered-binary": "^1.2.4", - "weak-lru-cache": "^1.2.2" - }, - "optionalDependencies": { - "@lmdb/lmdb-darwin-arm64": "2.5.2", - "@lmdb/lmdb-darwin-x64": "2.5.2", - "@lmdb/lmdb-linux-arm": "2.5.2", - "@lmdb/lmdb-linux-arm64": "2.5.2", - "@lmdb/lmdb-linux-x64": "2.5.2", - "@lmdb/lmdb-win32-x64": "2.5.2" - } - }, - "node_modules/lmdb/node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magnific-popup": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/magnific-popup/-/magnific-popup-1.1.0.tgz", - "integrity": "sha512-ghSa/1TKsOUL6ZlHfcfFCoB9Wms2nqaDdBEPh6QX9jFYQyMkUu7ciU1mrxedWWq4NM2m1C/llhHKLt6GKRYOzg==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it-anchor": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-6.0.1.tgz", - "integrity": "sha512-8qX4r5R6AtXla9HKCouEQ40inw69O5jR4VUXlZySsBLxIXlsJ3Yi9JV6JWPU4ZdA8jWTGDDJjJYNLwQ0W4jCag==", - "peerDependencies": { - "markdown-it": "*" - } - }, - "node_modules/markdown-it-attrs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.1.4.tgz", - "integrity": "sha512-53Zfv8PTb6rlVFDlD106xcZHKBSsRZKJ2IW/rTxEJBEVbVaoxaNsmRkG0HXfbHl2SK8kaxZ2QKqdthWy/QBwmA==", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "markdown-it": ">= 9.0.0" - } - }, - "node_modules/markdown-it/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/markdown-it/node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/masonry-layout": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/masonry-layout/-/masonry-layout-4.2.2.tgz", - "integrity": "sha512-iGtAlrpHNyxaR19CvKC3npnEcAwszXoyJiI8ARV2ePi7fmYhIud25MHK8Zx4P0LCC4d3TNO9+rFa1KoK1OEOaA==", - "dependencies": { - "get-size": "^2.0.2", - "outlayer": "^2.1.0" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/microbuffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/microbuffer/-/microbuffer-1.0.0.tgz", - "integrity": "sha512-O/SUXauVN4x6RaEJFqSPcXNtLFL+QzJHKZlyDVYFwcDDRVca3Fa/37QXXC+4zAGGa4YhHrHxKXuuHvLDIQECtA==" - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/mitt": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.3.tgz", - "integrity": "sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==" - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mockdate": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", - "integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/msgpackr": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.6.2.tgz", - "integrity": "sha512-bqSQ0DYJbXbrJcrZFmMygUZmqQiDfI2ewFVWcrZY12w5XHWtPuW4WppDT/e63Uu311ajwkRRXSoF0uILroBeTA==", - "optionalDependencies": { - "msgpackr-extract": "^2.0.2" - } - }, - "node_modules/msgpackr-extract": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-2.1.2.tgz", - "integrity": "sha512-cmrmERQFb19NX2JABOGtrKdHMyI6RUyceaPBQ2iRz9GnDkjBWFjNJC0jyyoOfZl2U/LZE3tQCCQc4dlRyA8mcA==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "node-gyp-build-optional-packages": "5.0.3" - }, - "bin": { - "download-msgpackr-prebuilds": "bin/download-prebuilds.js" - }, - "optionalDependencies": { - "@msgpackr-extract/msgpackr-extract-darwin-arm64": "2.1.2", - "@msgpackr-extract/msgpackr-extract-darwin-x64": "2.1.2", - "@msgpackr-extract/msgpackr-extract-linux-arm": "2.1.2", - "@msgpackr-extract/msgpackr-extract-linux-arm64": "2.1.2", - "@msgpackr-extract/msgpackr-extract-linux-x64": "2.1.2", - "@msgpackr-extract/msgpackr-extract-win32-x64": "2.1.2" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" - }, - "node_modules/native-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.1.0.tgz", - "integrity": "sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==", - "optional": true - }, - "node_modules/neatequal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/neatequal/-/neatequal-1.0.0.tgz", - "integrity": "sha512-sVt5awO4a4w24QmAthdrCPiVRW3naB8FGLdyadin01BH+6BzNPEBwGrpwCczQvPlULS6uXTItTe1PJ5P0kYm7A==", - "dependencies": { - "varstream": "^0.3.2" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/nested-error-stacks": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", - "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==" - }, - "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "dependencies": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp-build-optional-packages": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz", - "integrity": "sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==", - "bin": { - "node-gyp-build-optional-packages": "bin.js", - "node-gyp-build-optional-packages-optional": "optional.js", - "node-gyp-build-optional-packages-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" - }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ordered-binary": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.3.0.tgz", - "integrity": "sha512-knIeYepTI6BDAzGxqFEDGtI/iGqs57H32CInAIxEvAHG46vk1Di0CEpyc1A7iY39B1mfik3g3KLYwOTNnnMHLA==" - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-name": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-1.0.3.tgz", - "integrity": "sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew==", - "dependencies": { - "osx-release": "^1.0.0", - "win-release": "^1.0.0" - }, - "bin": { - "os-name": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/osx-release": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/osx-release/-/osx-release-1.1.0.tgz", - "integrity": "sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A==", - "dependencies": { - "minimist": "^1.1.0" - }, - "bin": { - "osx-release": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/outlayer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/outlayer/-/outlayer-2.1.1.tgz", - "integrity": "sha512-+GplXsCQ3VrbGujAeHEzP9SXsBmJxzn/YdDSQZL0xqBmAWBmortu2Y9Gwdp9J0bgDQ8/YNIPMoBM13nTwZfAhw==", - "dependencies": { - "ev-emitter": "^1.0.0", - "fizzy-ui-utils": "^2.0.0", - "get-size": "^2.0.2" - } - }, - "node_modules/owl.carousel": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/owl.carousel/-/owl.carousel-2.3.4.tgz", - "integrity": "sha512-JaDss9+feAvEW8KZppPSpllfposEzQiW+Ytt/Xm5t/3CTJ7YVmkh6RkWixoA2yXk2boIwedYxOvrrppIGzru9A==", - "dependencies": { - "jquery": ">=1.8.3" - } - }, - "node_modules/pac-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz", - "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^5.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/pac-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pac-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/pac-resolver": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz", - "integrity": "sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==", - "dependencies": { - "degenerator": "^3.0.2", - "ip": "^1.1.5", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/parcel": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.7.0.tgz", - "integrity": "sha512-pRYwnivwtNP0tip8xYSo4zCB0XhLt7/gJzP1p8OovCqkmFjG9VG+GW9TcAKqMIo0ovEa9tT+/s6gY1Qy+BONGQ==", - "dependencies": { - "@parcel/config-default": "2.7.0", - "@parcel/core": "2.7.0", - "@parcel/diagnostic": "2.7.0", - "@parcel/events": "2.7.0", - "@parcel/fs": "2.7.0", - "@parcel/logger": "2.7.0", - "@parcel/package-manager": "2.7.0", - "@parcel/reporter-cli": "2.7.0", - "@parcel/reporter-dev-server": "2.7.0", - "@parcel/utils": "2.7.0", - "chalk": "^4.1.0", - "commander": "^7.0.0", - "get-port": "^4.2.0", - "v8-compile-cache": "^2.0.0" - }, - "bin": { - "parcel": "lib/bin.js" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/parcel/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/parcel/node_modules/get-port": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", - "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", - "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", - "dependencies": { - "entities": "^4.3.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", - "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/portfinder": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", - "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", - "dependencies": { - "async": "^2.6.4", - "debug": "^3.2.7", - "mkdirp": "^0.5.6" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/posthtml": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", - "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", - "dependencies": { - "posthtml-parser": "^0.11.0", - "posthtml-render": "^3.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/posthtml-parser": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", - "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", - "dependencies": { - "htmlparser2": "^7.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/posthtml-parser/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/posthtml-parser/node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/posthtml-parser/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/posthtml-parser/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/posthtml-parser/node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/posthtml-parser/node_modules/htmlparser2": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", - "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.2", - "domutils": "^2.8.0", - "entities": "^3.0.1" - } - }, - "node_modules/posthtml-render": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", - "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", - "dependencies": { - "is-json": "^2.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/posthtml/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/posthtml/node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/posthtml/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/posthtml/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/posthtml/node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/posthtml/node_modules/htmlparser2": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", - "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.2", - "domutils": "^2.8.0", - "entities": "^3.0.1" - } - }, - "node_modules/posthtml/node_modules/posthtml-parser": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", - "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", - "dependencies": { - "htmlparser2": "^7.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz", - "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==", - "dependencies": { - "agent-base": "^6.0.0", - "debug": "4", - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^5.0.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^5.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/proxy-agent/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "optional": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer-core": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-1.15.0.tgz", - "integrity": "sha512-AH82x8Tx0/JkubeF6U12y8SuVB5vFgsw8lt/Ox5MhXaAktREFiotCTq324U2nPtJUnh2A8yJciDnzAmhbHidqQ==", - "hasInstallScript": true, - "dependencies": { - "debug": "^4.1.0", - "extract-zip": "^1.6.6", - "https-proxy-agent": "^2.2.1", - "mime": "^2.0.3", - "progress": "^2.0.1", - "proxy-from-env": "^1.0.0", - "rimraf": "^2.6.1", - "ws": "^6.1.0" - }, - "engines": { - "node": ">=6.4.0" - } - }, - "node_modules/puppeteer-core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/puppeteer-core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qiniu": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/qiniu/-/qiniu-7.7.0.tgz", - "integrity": "sha512-p8wZHDXzqCVtlPIygqIzpO6P59e5KcNAOf85oi6O7K5M4xjnwoi6L3e0F8IXgd38nb2PzWOH3XUkSbNAYW0g7Q==", - "dependencies": { - "agentkeepalive": "^4.0.2", - "before": "^0.0.1", - "block-stream2": "^2.0.0", - "crc32": "^0.2.2", - "destroy": "^1.0.4", - "encodeurl": "^1.0.1", - "formstream": "^1.1.0", - "mime": "^2.4.4", - "mockdate": "^3.0.5", - "tunnel-agent": "^0.6.0", - "urllib": "^2.34.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/qiniu/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", - "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" - }, - "node_modules/react-refresh": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", - "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/robots-parser": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-2.4.0.tgz", - "integrity": "sha512-oO8f2SI04dJk3pbj2KOMJ4G6QfPAgqcGmrYGmansIcpRewIPT2ljWEt5I+ip6EgiyaLo+RXkkUWw74M25HDkMA==" - }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sass": { - "version": "1.54.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.5.tgz", - "integrity": "sha512-p7DTOzxkUPa/63FU0R3KApkRHwcVZYC0PLnLm5iyZACyp15qSi32x7zVUhRdABAATmkALqgGrjCJAcWvobmhHw==", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/secure-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", - "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==" - }, - "node_modules/select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/simplecrawler": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/simplecrawler/-/simplecrawler-1.1.9.tgz", - "integrity": "sha512-IY5YmeJWvfc1zpy9so1p/EknCqNum3Y9tmnzuLWZqKEwbntGXPGvN0SOtr+XqT4BHjfek2C12g3Tg1yK7Hoh8g==", - "dependencies": { - "async": "^3.1.0", - "iconv-lite": "^0.5.0", - "robots-parser": "^2.1.1", - "urijs": "^1.19.1" - }, - "bin": { - "crawl": "lib/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/simplecrawler/node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "node_modules/simplecrawler/node_modules/iconv-lite": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", - "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sitemap-generator": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/sitemap-generator/-/sitemap-generator-8.5.1.tgz", - "integrity": "sha512-k0IWBCFPU1bhNLOquJ07cHfHJNrRB/2adawR0jduSCcA7CuzxfHtfDzgvNDhH0Yv4HOVgte33M58Yun/dcHS3w==", - "dependencies": { - "async": "2.6.1", - "cheerio": "1.0.0-rc.2", - "cp-file": "6.0.0", - "crypto-random-string": "1.0.0", - "date-fns": "1.29.0", - "lodash": "4.17.20", - "mitt": "1.1.3", - "normalize-url": "3.3.0", - "simplecrawler": "1.1.9", - "url-parse": "1.4.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sitemap-generator/node_modules/async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dependencies": { - "lodash": "^4.17.10" - } - }, - "node_modules/sitemap-generator/node_modules/cheerio": { - "version": "1.0.0-rc.2", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", - "integrity": "sha512-9LDHQy1jHc/eXMzPN6/oah9Qba4CjdKECC7YYEE/2zge/tsGwt19NQp5NFdfd5Lx6TZlyC5SXNQkG41P9r6XDg==", - "dependencies": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/sitemap-generator/node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "node_modules/sitemap-generator/node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "engines": { - "node": "*" - } - }, - "node_modules/sitemap-generator/node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "node_modules/sitemap-generator/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/sitemap-generator/node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/sitemap-generator/node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/sitemap-generator/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "node_modules/sitemap-generator/node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/sitemap-generator/node_modules/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, - "node_modules/sitemap-generator/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/sitemap-generator/node_modules/parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/sitemap-generator/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", - "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/socks-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socks-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.fromcodepoint": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", - "integrity": "sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==" - }, - "node_modules/string.prototype.codepointat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", - "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==" - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/svg-pathdata": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-1.0.4.tgz", - "integrity": "sha512-afGVCE1xFbmI/uV6XiToTwnHZZtSiW9u8EBxZqRE25pPGk2Z9eEvT5nhAPRUnvUWs9FqwjdJeElkqoWKeW3JGA==", - "dependencies": { - "readable-stream": "~2.0.4" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/svg-pathdata/node_modules/process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==" - }, - "node_modules/svg-pathdata/node_modules/readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha512-TXcFfb63BQe1+ySzsHZI/5v1aJPCShfqvWJ64ayNImXMsN1Cd0YGk/wm8KB7/OeessgPc9QvS9Zou8QTkFzsLw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/svg-pathdata/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "node_modules/svg2ttf": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/svg2ttf/-/svg2ttf-4.3.0.tgz", - "integrity": "sha512-LZ0B7zzHWLWbzLzwaKGHQvPOuxCXLReIb3LSxFSGUy1gMw2Utk6KGNbTmbmRL6Rk1qDSmTixnDrQgnXaL9n0CA==", - "dependencies": { - "argparse": "^1.0.6", - "cubic2quad": "^1.0.0", - "lodash": "^4.17.10", - "microbuffer": "^1.0.0", - "svgpath": "^2.1.5", - "xmldom": "~0.1.22" - }, - "bin": { - "svg2ttf": "svg2ttf.js" - } - }, - "node_modules/svgicons2svgfont": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/svgicons2svgfont/-/svgicons2svgfont-5.0.2.tgz", - "integrity": "sha512-N9GG8atI7eKksJpLLDYXHzKcNy698FL+Bdu0sXgwURgVzNmeD35iSCnZhNuPMs4Ve2tg8vqHXI1ZNEWU6vhwjw==", - "dependencies": { - "commander": "^2.9.0", - "neatequal": "^1.0.0", - "readable-stream": "^2.0.4", - "sax": "^1.1.5", - "string.fromcodepoint": "^0.2.1", - "string.prototype.codepointat": "^0.2.0", - "svg-pathdata": "^1.0.4" - }, - "bin": { - "svgicons2svgfont": "bin/svgicons2svgfont.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/svgicons2svgfont/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/svgo/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/svgo/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/svgo/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/svgpath": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/svgpath/-/svgpath-2.5.0.tgz", - "integrity": "sha512-o/vohwqjUO9nDAh4rcjE3KaW/v//At8UJu2LJMybXidf5QLQLVA4bxH0//4YCsr+1H4Gw1Wi/Jc62ynzSBYidw==" - }, - "node_modules/tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "deprecated": "This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.", - "dependencies": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - }, - "node_modules/temp": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", - "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", - "dependencies": { - "mkdirp": "^0.5.1", - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", - "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==" - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toastr": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/toastr/-/toastr-2.1.4.tgz", - "integrity": "sha512-LIy77F5n+sz4tefMmFOntcJ6HL0Fv3k1TDnNmFZ0bU/GcvIIfy6eG2v7zQmMiYgaalAiUv75ttFrPn5s0gyqlA==", - "dependencies": { - "jquery": ">=1.12.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/topojson-client": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", - "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", - "dependencies": { - "commander": "2" - }, - "bin": { - "topo2geo": "bin/topo2geo", - "topomerge": "bin/topomerge", - "topoquantize": "bin/topoquantize" - } - }, - "node_modules/topojson-client/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/ttf2eot": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ttf2eot/-/ttf2eot-2.0.0.tgz", - "integrity": "sha512-U56aG2Ylw7psLOmakjemAzmpqVgeadwENg9oaDjaZG5NYX4WB6+7h74bNPcc+0BXsoU5A/XWiHabDXyzFOmsxQ==", - "dependencies": { - "argparse": "^1.0.6", - "microbuffer": "^1.0.0" - }, - "bin": { - "ttf2eot": "ttf2eot.js" - } - }, - "node_modules/ttf2woff": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ttf2woff/-/ttf2woff-2.0.2.tgz", - "integrity": "sha512-X68badwBjAy/+itU49scLjXUL094up+rHuYk+YAOTTBYSUMOmLZ7VyhZJuqQESj1gnyLAC2/5V8Euv+mExmyPA==", - "dependencies": { - "argparse": "^1.0.6", - "microbuffer": "^1.0.0", - "pako": "^1.0.0" - }, - "bin": { - "ttf2woff": "ttf2woff.js" - } - }, - "node_modules/ttf2woff2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/ttf2woff2/-/ttf2woff2-2.0.3.tgz", - "integrity": "sha512-HVI+ZVmIbHAxfmbxV/Ahjh20che2WUCs4xWIcCUaD/BLEof/ylYUjnc0DAhpYsAzEJy1kQwkOQD45RLgtWQHfw==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.2.1", - "bufferstreams": "^1.1.0", - "nan": "^2.1.0", - "node-gyp": "^3.0.3" - }, - "bin": { - "ttf2woff2": "bin/ttf2woff2.js" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "node_modules/twemoji": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/twemoji/-/twemoji-13.1.1.tgz", - "integrity": "sha512-IIIoq+n1lk1M1+evBKZD3DO0ud02fDQ4ssbgAv8rp3YBWUeNmskjlisFUPPDacQ50XS3bhrd4Kq9Q2gqhxb0dg==", - "dependencies": { - "fs-extra": "^8.0.1", - "jsonfile": "^5.0.0", - "twemoji-parser": "13.1.0", - "universalify": "^0.1.2" - } - }, - "node_modules/twemoji-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/twemoji-parser/-/twemoji-parser-13.1.0.tgz", - "integrity": "sha512-AQOzLJpYlpWMy8n+0ATyKKZzWlZBJN+G0C+5lhX7Ftc2PeEVdUU/7ns2Pn2vVje26AIZ/OHwFoUbdv6YYD/wGg==" - }, - "node_modules/twemoji/node_modules/jsonfile": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-5.0.0.tgz", - "integrity": "sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w==", - "dependencies": { - "universalify": "^0.1.2" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/twitter-fetcher": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/twitter-fetcher/-/twitter-fetcher-18.0.4.tgz", - "integrity": "sha512-p6HIJfzYLWKVT1rDGqq6wlbfCoZiRAWC6o6zkhxqkt7s7gNxW04xrCy8mDIjl6GHVGbdN+JQtSpVhs0Mp2PKfg==" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "node_modules/uglify-js": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.0.tgz", - "integrity": "sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg==", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/underscore": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.4.tgz", - "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==" - }, - "node_modules/unescape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unescape/-/unescape-1.0.1.tgz", - "integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==", - "dependencies": { - "extend-shallow": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", - "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", - "dependencies": { - "qs": "^6.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unorm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", - "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urijs": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" - }, - "node_modules/url-join": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", - "integrity": "sha512-c2H1fIgpUdwFRIru9HFno5DT73Ok8hg5oOb5AT3ayIgvCRfxgs2jyt5Slw8kEB7j3QUr6yJmMPDT/odjk7jXow==" - }, - "node_modules/url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/urllib": { - "version": "2.38.1", - "resolved": "https://registry.npmjs.org/urllib/-/urllib-2.38.1.tgz", - "integrity": "sha512-1tvjdL74oT9aV4X+SIjE1BXyes5PbfhHKhK4IlhoKhKqk4nD5/lXE90v10WZ02kELWIPI4w7ADneEQ4i7dPjiQ==", - "dependencies": { - "any-promise": "^1.3.0", - "content-type": "^1.0.2", - "debug": "^2.6.9", - "default-user-agent": "^1.0.0", - "digest-header": "^0.0.1", - "ee-first": "~1.1.1", - "formstream": "^1.1.0", - "humanize-ms": "^1.2.0", - "iconv-lite": "^0.4.15", - "ip": "^1.1.5", - "proxy-agent": "^5.0.0", - "pump": "^3.0.0", - "qs": "^6.4.0", - "statuses": "^1.3.1", - "utility": "^1.16.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/urllib/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/urllib/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/urllib/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/userhome": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/userhome/-/userhome-1.0.0.tgz", - "integrity": "sha512-ayFKY3H+Pwfy4W98yPdtH1VqH4psDeyW8lYYFzfecR9d6hqLpqhecktvYR3SEEXt7vG0S1JEpciI3g94pMErig==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/uslug": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/uslug/-/uslug-1.0.4.tgz", - "integrity": "sha512-Jrbpp/NS3TvIGNjfJT1sn3/BCeykoxR8GbNYW5lF6fUscLkbXFwj1b7m4DvIkHm8k3Qr6Co68lbTmoZTMGk/ow==", - "dependencies": { - "unorm": ">= 1.0.0" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utility": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/utility/-/utility-1.17.0.tgz", - "integrity": "sha512-KdVkF9An/0239BJ4+dqOa7NPrPIOeQE9AGfx0XS16O9DBiHNHRJMoeU5nL6pRGAkgJOqdOu8R4gBRcXnAocJKw==", - "dependencies": { - "copy-to": "^2.0.1", - "escape-html": "^1.0.3", - "mkdirp": "^0.5.1", - "mz": "^2.7.0", - "unescape": "^1.0.1" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - }, - "node_modules/varstream": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/varstream/-/varstream-0.3.2.tgz", - "integrity": "sha512-OpR3Usr9dGZZbDttlTxdviGdxiURI0prX68+DuaN/JfIDbK9ZOmREKM6PgmelsejMnhgjXmEEEgf+E4NbsSqMg==", - "dependencies": { - "readable-stream": "^1.0.33" - }, - "bin": { - "json2varstream": "cli/json2varstream.js", - "varstream2json": "cli/varstream2json.js" - }, - "engines": { - "node": ">=0.10.*" - } - }, - "node_modules/varstream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/varstream/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/varstream/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vega-format": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vega-format/-/vega-format-1.1.0.tgz", - "integrity": "sha512-6mgpeWw8yGdG0Zdi8aVkx5oUrpJGOpNxqazC2858RSDPvChM/jDFlgRMTYw52qk7cxU0L08ARp4BwmXaI75j0w==", - "dependencies": { - "d3-array": "^3.1.1", - "d3-format": "^3.1.0", - "d3-time-format": "^4.1.0", - "vega-time": "^2.0.3", - "vega-util": "^1.15.2" - } - }, - "node_modules/vega-loader": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vega-loader/-/vega-loader-4.5.0.tgz", - "integrity": "sha512-EkAyzbx0pCYxH3v3wghGVCaKINWxHfgbQ2pYDiYv0yo8e04S8Mv/IlRGTt6BAe7cLhrk1WZ4zh20QOppnGG05w==", - "dependencies": { - "d3-dsv": "^3.0.1", - "node-fetch": "^2.6.7", - "topojson-client": "^3.1.0", - "vega-format": "^1.1.0", - "vega-util": "^1.16.0" - } - }, - "node_modules/vega-time": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vega-time/-/vega-time-2.1.0.tgz", - "integrity": "sha512-Q9/l3S6Br1RPX5HZvyLD/cQ4K6K8DtpR09/1y7D66gxNorg2+HGzYZINH9nUvN3mxoXcBWg4cCUh3+JvmkDaEg==", - "dependencies": { - "d3-array": "^3.1.1", - "d3-time": "^3.0.0", - "vega-util": "^1.15.2" - } - }, - "node_modules/vega-util": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.17.0.tgz", - "integrity": "sha512-HTaydZd9De3yf+8jH66zL4dXJ1d1p5OIFyoBzFiOli4IJbwkL1jrefCKz6AHDm1kYBzDJ0X4bN+CzZSCTvNk1w==" - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "node_modules/vm2": { - "version": "3.9.18", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.18.tgz", - "integrity": "sha512-iM7PchOElv6Uv6Q+0Hq7dcgDtWWT6SizYqVcvol+1WQc+E9HlgTCnPozbQNSP3yDV9oXHQOEQu530w2q/BCVZg==", - "dependencies": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0" - }, - "bin": { - "vm2": "bin/vm2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/weak-lru-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", - "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==" - }, - "node_modules/webfonts-generator": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/webfonts-generator/-/webfonts-generator-0.4.0.tgz", - "integrity": "sha512-2tz14d9lDYkNopbogp3cCEo0oQj6tHYo17v6nYlJQT57CwzQy/7Y6a1UzleNK9jSshez2qau6MHcHy/gbDwssQ==", - "dependencies": { - "handlebars": "^4.0.5", - "mkdirp": "^0.5.0", - "q": "^1.1.2", - "svg2ttf": "^4.0.0", - "svgicons2svgfont": "^5.0.0", - "ttf2eot": "^2.0.0", - "ttf2woff": "^2.0.1", - "ttf2woff2": "^2.0.3", - "underscore": "^1.7.0", - "url-join": "^1.1.0" - } - }, - "node_modules/webfonts-generator/node_modules/url-join": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", - "integrity": "sha512-zz1wZk4Lb5PTVwZ3HWDmm8XnlPvmOof6/fjdDPA5yBrUcbtV64U6bV832Zf1BtU2WkBBWaUT46wCs+l0HP5nhg==" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/win-release": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", - "integrity": "sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw==", - "dependencies": { - "semver": "^5.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - }, - "node_modules/wow.js": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/wow.js/-/wow.js-1.2.2.tgz", - "integrity": "sha512-YTW9eiZimHCJDWofsiz2507txaPteUiQD461I/D8533AiRAn3+Y68/1LDuQ3OTgPjagGZLPYKrpoSgjzeQrO6A==", - "deprecated": "deprecated in favour of aos (Animate On Scroll)" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/xmldom": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", - "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==", - "deprecated": "Deprecated due to CVE-2021-21366 resolved in 0.5.0", - "engines": { - "node": ">=0.1" - } - }, - "node_modules/xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==", - "engines": { - "node": "*" - } - }, - "node_modules/xxhash-wasm": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", - "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==" - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yamljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", - "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", - "dependencies": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - }, - "bin": { - "json2yaml": "bin/json2yaml", - "yaml2json": "bin/yaml2json" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==" - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@lezer/common": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", - "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==" - }, - "@lezer/lr": { - "version": "0.15.8", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", - "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", - "requires": { - "@lezer/common": "^0.15.0" - } - }, - "@lmdb/lmdb-darwin-arm64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz", - "integrity": "sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==", - "optional": true - }, - "@lmdb/lmdb-darwin-x64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz", - "integrity": "sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==", - "optional": true - }, - "@lmdb/lmdb-linux-arm": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.2.tgz", - "integrity": "sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==", - "optional": true - }, - "@lmdb/lmdb-linux-arm64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.2.tgz", - "integrity": "sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==", - "optional": true - }, - "@lmdb/lmdb-linux-x64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.2.tgz", - "integrity": "sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==", - "optional": true - }, - "@lmdb/lmdb-win32-x64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz", - "integrity": "sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==", - "optional": true - }, - "@mischnic/json-sourcemap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz", - "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==", - "requires": { - "@lezer/common": "^0.15.7", - "@lezer/lr": "^0.15.4", - "json5": "^2.2.1" - } - }, - "@msgpackr-extract/msgpackr-extract-darwin-arm64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-2.1.2.tgz", - "integrity": "sha512-TyVLn3S/+ikMDsh0gbKv2YydKClN8HaJDDpONlaZR+LVJmsxLFUgA+O7zu59h9+f9gX1aj/ahw9wqa6rosmrYQ==", - "optional": true - }, - "@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-2.1.2.tgz", - "integrity": "sha512-YPXtcVkhmVNoMGlqp81ZHW4dMxK09msWgnxtsDpSiZwTzUBG2N+No2bsr7WMtBKCVJMSD6mbAl7YhKUqkp/Few==", - "optional": true - }, - "@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-2.1.2.tgz", - "integrity": "sha512-42R4MAFeIeNn+L98qwxAt360bwzX2Kf0ZQkBBucJ2Ircza3asoY4CDbgiu9VWklq8gWJVSJSJBwDI+c/THiWkA==", - "optional": true - }, - "@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-2.1.2.tgz", - "integrity": "sha512-vHZ2JiOWF2+DN9lzltGbhtQNzDo8fKFGrf37UJrgqxU0yvtERrzUugnfnX1wmVfFhSsF8OxrfqiNOUc5hko1Zg==", - "optional": true - }, - "@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-2.1.2.tgz", - "integrity": "sha512-RjRoRxg7Q3kPAdUSC5EUUPlwfMkIVhmaRTIe+cqHbKrGZ4M6TyCA/b5qMaukQ/1CHWrqYY2FbKOAU8Hg0pQFzg==", - "optional": true - }, - "@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-2.1.2.tgz", - "integrity": "sha512-rIZVR48zA8hGkHIK7ED6+ZiXsjRCcAVBJbm8o89OKAMTmEAQ2QvoOxoiu3w2isAaWwzgtQIOFIqHwvZDyLKCvw==", - "optional": true - }, - "@parcel/bundler-default": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.7.0.tgz", - "integrity": "sha512-PU5MtWWhc+dYI9x8mguYnm9yiG6TkI7niRpxgJgtqAyGHuEyNXVBQQ0X+qyOF4D9LdankBf8uNN18g31IET2Zg==", - "requires": { - "@parcel/diagnostic": "2.7.0", - "@parcel/hash": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1" - } - }, - "@parcel/cache": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.7.0.tgz", - "integrity": "sha512-JlXNoZXcWzLKdDlfeF3dIj5Vtel5T9vtdBN72PJ+cjC4qNHk4Uwvc5sfOBELuibGN0bVu2bwY9nUgSwCiB1iIA==", - "requires": { - "@parcel/fs": "2.7.0", - "@parcel/logger": "2.7.0", - "@parcel/utils": "2.7.0", - "lmdb": "2.5.2" - } - }, - "@parcel/codeframe": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.7.0.tgz", - "integrity": "sha512-UTKx0jejJmmO1dwTHSJuRgrO8N6PMlkxRT6sew8N6NC3Bgv6pu0EbO+RtlWt/jCvzcdLOPdIoTzj4MMZvgcMYg==", - "requires": { - "chalk": "^4.1.0" - } - }, - "@parcel/compressor-raw": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.7.0.tgz", - "integrity": "sha512-SCXwnOOQT6EmpusBsYWNQ/RFri+2JnKuE0gMSf2dROl2xbererX45FYzeDplWALCKAdjMNDpFwU+FyMYoVZSCQ==", - "requires": { - "@parcel/plugin": "2.7.0" - } - }, - "@parcel/config-default": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.7.0.tgz", - "integrity": "sha512-ZzsLr97AYrz8c9k6qn3DlqPzifi3vbP7q3ynUrAFxmt0L4+K0H9N508ZkORYmCgaFjLIQ8Y3eWpwCJ0AewPNIg==", - "requires": { - "@parcel/bundler-default": "2.7.0", - "@parcel/compressor-raw": "2.7.0", - "@parcel/namer-default": "2.7.0", - "@parcel/optimizer-css": "2.7.0", - "@parcel/optimizer-htmlnano": "2.7.0", - "@parcel/optimizer-image": "2.7.0", - "@parcel/optimizer-svgo": "2.7.0", - "@parcel/optimizer-terser": "2.7.0", - "@parcel/packager-css": "2.7.0", - "@parcel/packager-html": "2.7.0", - "@parcel/packager-js": "2.7.0", - "@parcel/packager-raw": "2.7.0", - "@parcel/packager-svg": "2.7.0", - "@parcel/reporter-dev-server": "2.7.0", - "@parcel/resolver-default": "2.7.0", - "@parcel/runtime-browser-hmr": "2.7.0", - "@parcel/runtime-js": "2.7.0", - "@parcel/runtime-react-refresh": "2.7.0", - "@parcel/runtime-service-worker": "2.7.0", - "@parcel/transformer-babel": "2.7.0", - "@parcel/transformer-css": "2.7.0", - "@parcel/transformer-html": "2.7.0", - "@parcel/transformer-image": "2.7.0", - "@parcel/transformer-js": "2.7.0", - "@parcel/transformer-json": "2.7.0", - "@parcel/transformer-postcss": "2.7.0", - "@parcel/transformer-posthtml": "2.7.0", - "@parcel/transformer-raw": "2.7.0", - "@parcel/transformer-react-refresh-wrap": "2.7.0", - "@parcel/transformer-svg": "2.7.0" - } - }, - "@parcel/core": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.7.0.tgz", - "integrity": "sha512-7yKZUdh314Q/kU/9+27ZYTfcnXS6VYHuG+iiUlIohnvUUybxLqVJhdMU9Q+z2QcPka1IdJWz4K4Xx0y6/4goyg==", - "requires": { - "@mischnic/json-sourcemap": "^0.1.0", - "@parcel/cache": "2.7.0", - "@parcel/diagnostic": "2.7.0", - "@parcel/events": "2.7.0", - "@parcel/fs": "2.7.0", - "@parcel/graph": "2.7.0", - "@parcel/hash": "2.7.0", - "@parcel/logger": "2.7.0", - "@parcel/package-manager": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/types": "2.7.0", - "@parcel/utils": "2.7.0", - "@parcel/workers": "2.7.0", - "abortcontroller-polyfill": "^1.1.9", - "base-x": "^3.0.8", - "browserslist": "^4.6.6", - "clone": "^2.1.1", - "dotenv": "^7.0.0", - "dotenv-expand": "^5.1.0", - "json5": "^2.2.0", - "msgpackr": "^1.5.4", - "nullthrows": "^1.1.1", - "semver": "^5.7.1" - } - }, - "@parcel/css": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css/-/css-1.13.0.tgz", - "integrity": "sha512-S4QD4Jd+j8QzU5ZZpfg+1cdmEXeJ71wabbV6ff3DJB/05gXWj9Qf/ZZUVtwH3V255Oif6/jcEmcWY4AmFXTyLw==", - "requires": { - "@parcel/css-darwin-arm64": "1.13.0", - "@parcel/css-darwin-x64": "1.13.0", - "@parcel/css-linux-arm-gnueabihf": "1.13.0", - "@parcel/css-linux-arm64-gnu": "1.13.0", - "@parcel/css-linux-arm64-musl": "1.13.0", - "@parcel/css-linux-x64-gnu": "1.13.0", - "@parcel/css-linux-x64-musl": "1.13.0", - "@parcel/css-win32-x64-msvc": "1.13.0", - "detect-libc": "^1.0.3" - } - }, - "@parcel/css-darwin-arm64": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-darwin-arm64/-/css-darwin-arm64-1.13.0.tgz", - "integrity": "sha512-GqyAeNa0Bah6WuIgqeBJCBRRcGEqkRMkK1YxgaFBhJiicrJJJ1/aZetzOhwNy6JGpQ8wnKP+p+t6IX2wrklaWw==", - "optional": true - }, - "@parcel/css-darwin-x64": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-darwin-x64/-/css-darwin-x64-1.13.0.tgz", - "integrity": "sha512-k7/YBwZ5nDXmyDLCo8Pf7ATqQPo34emv9Tpz2LbYUU3NCO2uhsGzjjsQiYXsAp5QeupPHgDmQeEX6WSvXxo0fQ==", - "optional": true - }, - "@parcel/css-linux-arm-gnueabihf": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm-gnueabihf/-/css-linux-arm-gnueabihf-1.13.0.tgz", - "integrity": "sha512-mBtDUkF/Gje3a7KMt2edEc9rUdKupTy49bvgGFE9dc+k9ZBQg1L8JK35mUo0Y3Y0jJmRDURY2+LRnxvOWJm3TA==", - "optional": true - }, - "@parcel/css-linux-arm64-gnu": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-gnu/-/css-linux-arm64-gnu-1.13.0.tgz", - "integrity": "sha512-h90mKM4SpLLHc1vd06O5SkOae9aR36CfX+NWzgwLI4VKiZGcr+D78gsF7+CDkWrf1hqx5UonguMrqlN/MVdJBQ==", - "optional": true - }, - "@parcel/css-linux-arm64-musl": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-musl/-/css-linux-arm64-musl-1.13.0.tgz", - "integrity": "sha512-FGg6UyHaPwmZ+IFJmSiUzznNUsGYG1aIvKIWIaw2CgH2cUamqLORSnCIBV4LXrpZJ7I8X2845L76hzMvaetkRg==", - "optional": true - }, - "@parcel/css-linux-x64-gnu": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-gnu/-/css-linux-x64-gnu-1.13.0.tgz", - "integrity": "sha512-QJyCKM4ms7OaklffoqleouigDAYATZcCcZkp9AUEt7lqg8i2sWFrInEwWM4QhauwML3gxdKaRVugVZCzMSp3Kg==", - "optional": true - }, - "@parcel/css-linux-x64-musl": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-musl/-/css-linux-x64-musl-1.13.0.tgz", - "integrity": "sha512-V2mA8hzZaYRyMIZjEAMaZqrziYTtkjHP/jdS+qnAnHNdvIav3+3Saca3hbSnD2hQuM9iu2wzD3gHoVexlCjTOg==", - "optional": true - }, - "@parcel/css-win32-x64-msvc": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@parcel/css-win32-x64-msvc/-/css-win32-x64-msvc-1.13.0.tgz", - "integrity": "sha512-0WFdh4nS5lkjLnBr0N6O7OatbjUFZdVBSlPDdTdwEYZkl8La+SnmGGMEkrE/jiQ6NjjwgLorN7xainmPWuQdDw==", - "optional": true - }, - "@parcel/diagnostic": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.7.0.tgz", - "integrity": "sha512-pdq/cTwVoL0n8yuDCRXFRSQHVWdmmIXPt3R3iT4KtYDYvOrMT2dLPT79IMqQkhYPANW8GuL15n/WxRngfRdkug==", - "requires": { - "@mischnic/json-sourcemap": "^0.1.0", - "nullthrows": "^1.1.1" - } - }, - "@parcel/events": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.7.0.tgz", - "integrity": "sha512-kQDwMKgZ1U4M/G17qeDYF6bW5kybluN6ajYPc7mZcrWg+trEI/oXi81GMFaMX0BSUhwhbiN5+/Vb2wiG/Sn6ig==" - }, - "@parcel/fs": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.7.0.tgz", - "integrity": "sha512-PU5fo4Hh8y03LZgemgVREttc0wyHQUNmsJCybxTB7EjJie2CqJRumo+DFppArlvdchLwJdc9em03yQV/GNWrEg==", - "requires": { - "@parcel/fs-search": "2.7.0", - "@parcel/types": "2.7.0", - "@parcel/utils": "2.7.0", - "@parcel/watcher": "^2.0.0", - "@parcel/workers": "2.7.0" - } - }, - "@parcel/fs-search": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.7.0.tgz", - "integrity": "sha512-K1Hv25bnRpwQVA15RvcRuB8ZhfclnCHA8N8L6w7Ul1ncSJDxCIkIAc5hAubYNNYW3kWjCC2SOaEgFKnbvMllEQ==", - "requires": { - "detect-libc": "^1.0.3" - } - }, - "@parcel/graph": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.7.0.tgz", - "integrity": "sha512-Q6E94GS6q45PtsZh+m+gvFRp/N1Qopxhu2sxjcWsGs5iBd6IWn2oYLWOH5iVzEjWuYpW2HkB08lH6J50O63uOA==", - "requires": { - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1" - } - }, - "@parcel/hash": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.7.0.tgz", - "integrity": "sha512-k6bSKnIlPJMPU3yjQzfgfvF9zuJZGOAlJgzpL4BbWvdbE8BTdjzLcFn0Ujrtud94EgIkiXd22sC2HpCUWoHGdA==", - "requires": { - "detect-libc": "^1.0.3", - "xxhash-wasm": "^0.4.2" - } - }, - "@parcel/logger": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.7.0.tgz", - "integrity": "sha512-qjMY/bYo38+o+OiIrTRldU9CwL1E7J72t+xkTP8QIcUxLWz5LYR0YbynZUVulmBSfqsykjjxCy4a+8siVr+lPw==", - "requires": { - "@parcel/diagnostic": "2.7.0", - "@parcel/events": "2.7.0" - } - }, - "@parcel/markdown-ansi": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.7.0.tgz", - "integrity": "sha512-ipOX0D6FVZFEXeb/z8MnTMq2RQEIuaILY90olVIuHEFLHHfOPEn+RK3u13HA1ChF5/9E3cMD79tu6x9JL9Kqag==", - "requires": { - "chalk": "^4.1.0" - } - }, - "@parcel/namer-default": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.7.0.tgz", - "integrity": "sha512-lIKMdsmi//7fepecNDYmJYzBlL91HifPsX03lJCdu1dC6q5fBs+gG0XjKKG7yPnSCw1qH/4m7drzt9+dRZYAHQ==", - "requires": { - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "nullthrows": "^1.1.1" - } - }, - "@parcel/node-resolver-core": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.7.0.tgz", - "integrity": "sha512-5UJQHalqMxdhJIs2hhqQzFfQpF7+NAowsRq064lYtiRvcD8wMr3OOQ9wd1iazGpFSl4JKdT7BwDU9/miDJmanQ==", - "requires": { - "@parcel/diagnostic": "2.7.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1", - "semver": "^5.7.1" - } - }, - "@parcel/optimizer-css": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.7.0.tgz", - "integrity": "sha512-IfnOMACqhcAclKyOW9X9JpsknB6OShk9OVvb8EvbDTKHJhQHNNmzE88OkSI/pS3ZVZP9Zj+nWcVHguV+kvDeiQ==", - "requires": { - "@parcel/css": "^1.12.2", - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.7.0", - "browserslist": "^4.6.6", - "nullthrows": "^1.1.1" - } - }, - "@parcel/optimizer-htmlnano": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.7.0.tgz", - "integrity": "sha512-5QrGdWS5Hi4VXE3nQNrGqugmSXt68YIsWwKRAdarOxzyULSJS3gbCiQOXqIPRJobfZjnSIcdtkyxSiCUe1inIA==", - "requires": { - "@parcel/plugin": "2.7.0", - "htmlnano": "^2.0.0", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "svgo": "^2.4.0" - } - }, - "@parcel/optimizer-image": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.7.0.tgz", - "integrity": "sha512-EnaXz5UjR67FUu0BEcqZTT9LsbB/iFAkkghCotbnbOuC5QQsloq6tw54TKU3y+R3qsjgUoMtGxPcGfVoXxZXYw==", - "requires": { - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "@parcel/workers": "2.7.0", - "detect-libc": "^1.0.3" - } - }, - "@parcel/optimizer-svgo": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.7.0.tgz", - "integrity": "sha512-IO1JV4NpfP3V7FrhsqCcV8pDQIHraFi1/ZvEJyssITxjH49Im/txKlwMiQuZZryAPn8Xb8g395Muawuk6AK6sg==", - "requires": { - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "svgo": "^2.4.0" - } - }, - "@parcel/optimizer-terser": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.7.0.tgz", - "integrity": "sha512-07VZjIO8xsl2/WmS/qHI8lI/cpu47iS9eRpqwfZEEsdk1cfz50jhWkmFudHBxiHGMfcZ//1+DdaPg9RDBWZtZA==", - "requires": { - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1", - "terser": "^5.2.0" - } - }, - "@parcel/package-manager": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.7.0.tgz", - "integrity": "sha512-wmfSX1mRrTi8MeA4KrnPk/x7zGUsILCQmTo6lA4gygzAxDbM1pGuyFN8/Kt0y0SFO2lbljARtD/4an5qdotH+Q==", - "requires": { - "@parcel/diagnostic": "2.7.0", - "@parcel/fs": "2.7.0", - "@parcel/logger": "2.7.0", - "@parcel/types": "2.7.0", - "@parcel/utils": "2.7.0", - "@parcel/workers": "2.7.0", - "semver": "^5.7.1" - } - }, - "@parcel/packager-css": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.7.0.tgz", - "integrity": "sha512-44nzZwu+ssGuiFmYM6cf/Y4iChiUZ4DUzzpegnGlhXtKJKe4NHntxThJynuRZWKN2AAf48avApDpimg2jW0KDw==", - "requires": { - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1" - } - }, - "@parcel/packager-html": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.7.0.tgz", - "integrity": "sha512-Zgqd7sdcY/UnR370GR0q2ilmEohUDXsO8A1F28QCJzIsR1iCB6KRUT74+pawfQ1IhXZLaaFLLYe0UWcfm0JeXg==", - "requires": { - "@parcel/plugin": "2.7.0", - "@parcel/types": "2.7.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5" - } - }, - "@parcel/packager-js": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.7.0.tgz", - "integrity": "sha512-wTRdM81PgRVDzWGXdWmqLwguWnTYWzhEDdjXpW2n8uMOu/CjHhMtogk65aaYk3GOnq6OBL/NsrmBiV/zKPj1vA==", - "requires": { - "@parcel/diagnostic": "2.7.0", - "@parcel/hash": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.7.0", - "globals": "^13.2.0", - "nullthrows": "^1.1.1" - } - }, - "@parcel/packager-raw": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.7.0.tgz", - "integrity": "sha512-jg2Zp8dI5VpIQlaeahXDCfrPN9m/DKht1NkR9P2CylMAwqCcc1Xc1RRiF0wfwcPZpPMpq1265n+4qnB7rjGBlA==", - "requires": { - "@parcel/plugin": "2.7.0" - } - }, - "@parcel/packager-svg": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.7.0.tgz", - "integrity": "sha512-EmJg3HpD6/xxKBjir/CdCKJZwI24iVfBuxRS9LUp3xHAIebOzVh1z6IN+i2Di5+NyRwfOFaLliL4uMa1zwbyCA==", - "requires": { - "@parcel/plugin": "2.7.0", - "@parcel/types": "2.7.0", - "@parcel/utils": "2.7.0", - "posthtml": "^0.16.4" - } - }, - "@parcel/plugin": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.7.0.tgz", - "integrity": "sha512-qqgx+nnMn6/0lRc4lKbLGmhNtBiT93S2gFNB4Eb4Pfz/SxVYoW+fmml+KdfOSiZffWOAH5L6NwhyD7N8aSikzw==", - "requires": { - "@parcel/types": "2.7.0" - } - }, - "@parcel/reporter-cli": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.7.0.tgz", - "integrity": "sha512-80gEODg8cnAmnxGVuaSVDo8JJ54P9AA2bHwSs1cIkHWlJ3BjDQb83H31bBHncJ5Kn5kQ/j+7WjlqHpTCiOR9PA==", - "requires": { - "@parcel/plugin": "2.7.0", - "@parcel/types": "2.7.0", - "@parcel/utils": "2.7.0", - "chalk": "^4.1.0", - "term-size": "^2.2.1" - } - }, - "@parcel/reporter-dev-server": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.7.0.tgz", - "integrity": "sha512-ySuou5addK8fGue8aXzo536BaEjMujDrEc1xkp4TasInXHVcA98b+SYX5NAZTGob5CxKvZQ5ylhg77zW30B+iA==", - "requires": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0" - } - }, - "@parcel/resolver-default": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.7.0.tgz", - "integrity": "sha512-v8TvWsbLK7/q7n4gv6OrYNbW18xUx4zKbVMGZb1u4yMhzEH4HFr1D9OeoTq3jk+ximAigds8B6triQbL5exF7A==", - "requires": { - "@parcel/node-resolver-core": "2.7.0", - "@parcel/plugin": "2.7.0" - } - }, - "@parcel/runtime-browser-hmr": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.7.0.tgz", - "integrity": "sha512-PLbMLdclQeYsi2LkilZVGFV1n3y55G1jaBvby4ekedUZjMw3SWdMY2tDxgSDdFWfLCnYHJXdGUQSzGGi1kPzjA==", - "requires": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0" - } - }, - "@parcel/runtime-js": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.7.0.tgz", - "integrity": "sha512-9/YUZTBNrSN2H6rbz/o1EOM0O7I3ZR/x9IDzxjJBD6Mi+0uCgCD02aedare/SNr1qgnbZZWmhpOzC+YgREcfLA==", - "requires": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1" - } - }, - "@parcel/runtime-react-refresh": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.7.0.tgz", - "integrity": "sha512-vDKO0rWqRzEpmvoZ4kkYUiSsTxT5NnH904BFPFxKI0wJCl6yEmPuEifmATo73OuYhP6jIP3Qfl1R4TtiDFPJ1Q==", - "requires": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "react-error-overlay": "6.0.9", - "react-refresh": "^0.9.0" - } - }, - "@parcel/runtime-service-worker": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.7.0.tgz", - "integrity": "sha512-uD2pAV0yV6+e7JaWH4KVPbG+zRCrxr/OACyS9tIh+Q/R1vRmh8zGM3yhdrcoiZ7tFOnM72vd6xY11eTrUsSVig==", - "requires": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1" - } - }, - "@parcel/source-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.0.tgz", - "integrity": "sha512-E7UOEIof2o89LrKk1agSLmwakjigmEdDp1ZaEdsLVEvq63R/bul4Ij5CT+0ZDcijGpl5tnTbQADY9EyYGtjYgQ==", - "requires": { - "detect-libc": "^1.0.3" - } - }, - "@parcel/transformer-babel": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.7.0.tgz", - "integrity": "sha512-7iklDXXnKH1530+QbI+e4kIJ+Q1puA1ulRS10db3aUJMj5GnvXGDFwhSZ7+T1ps66QHO7cVO29VlbqiRDarH1Q==", - "requires": { - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.7.0", - "browserslist": "^4.6.6", - "json5": "^2.2.0", - "nullthrows": "^1.1.1", - "semver": "^5.7.0" - } - }, - "@parcel/transformer-css": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.7.0.tgz", - "integrity": "sha512-J4EpWK9spQpXyNCmKK8Xnane0xW/1B/EAmfp7Fiv7g+5yUjY4ODf4KUugvE+Eb2gekPkhOKNHermO2KrX0/PFA==", - "requires": { - "@parcel/css": "^1.12.2", - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.7.0", - "browserslist": "^4.6.6", - "nullthrows": "^1.1.1" - } - }, - "@parcel/transformer-html": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.7.0.tgz", - "integrity": "sha512-wYJl5rn81W+Rlk9oQwDJcjoVsWVDKyeri84FzmlGXOsg0EYgnqOiG+3MDM8GeZjfuGe5fuoum4eqZeS0WdUHXw==", - "requires": { - "@parcel/diagnostic": "2.7.0", - "@parcel/hash": "2.7.0", - "@parcel/plugin": "2.7.0", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "posthtml-parser": "^0.10.1", - "posthtml-render": "^3.0.0", - "semver": "^5.7.1" - } - }, - "@parcel/transformer-image": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.7.0.tgz", - "integrity": "sha512-mhi9/R5/ULhCkL2COVIKhNFoLDiZwQgprdaTJr5fnODggVxEX5o7ebFV6KNLMTEkwZUJWoB1hL0ziI0++DtoFA==", - "requires": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "@parcel/workers": "2.7.0", - "nullthrows": "^1.1.1" - } - }, - "@parcel/transformer-js": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.7.0.tgz", - "integrity": "sha512-mzerR+D4rDomUSIk5RSTa2w+DXBdXUeQrpDO74WCDdpDi1lIl8ppFpqtmU7O6y6p8QsgkmS9b0g/vhcry6CJTA==", - "requires": { - "@parcel/diagnostic": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.7.0", - "@parcel/workers": "2.7.0", - "@swc/helpers": "^0.4.2", - "browserslist": "^4.6.6", - "detect-libc": "^1.0.3", - "nullthrows": "^1.1.1", - "regenerator-runtime": "^0.13.7", - "semver": "^5.7.1" - } - }, - "@parcel/transformer-json": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.7.0.tgz", - "integrity": "sha512-RQjuxBpYOch+kr4a0zi77KJtOLTPYRM7iq4NN80zKnA0r0dwDUCxZBtaj2l0O0o3R4MMJnm+ncP+cB7XR7dZYA==", - "requires": { - "@parcel/plugin": "2.7.0", - "json5": "^2.2.0" - } - }, - "@parcel/transformer-postcss": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.7.0.tgz", - "integrity": "sha512-b6RskXBWf0MjpC9qjR2dQ1ZdRnlOiKYseG5CEovWCqM218RtdydFKz7jS+5Gxkb6qBtOG7zGPONXdPe+gTILcA==", - "requires": { - "@parcel/diagnostic": "2.7.0", - "@parcel/hash": "2.7.0", - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "clone": "^2.1.1", - "nullthrows": "^1.1.1", - "postcss-value-parser": "^4.2.0", - "semver": "^5.7.1" - } - }, - "@parcel/transformer-posthtml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.7.0.tgz", - "integrity": "sha512-cP8YOiSynWJ1ycmBlhnnHeuQb2cwmklZ+BNyLUktj5p78kDy2de7VjX+dRNRHoW4H9OgEcSF4UEfDVVz5RYIhw==", - "requires": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "posthtml-parser": "^0.10.1", - "posthtml-render": "^3.0.0", - "semver": "^5.7.1" - } - }, - "@parcel/transformer-raw": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.7.0.tgz", - "integrity": "sha512-sDnItWCFSDez0izK1i5cgv+kXzZTbcJh4rNpVIgmE1kBLvAz608sqgcCkavb2wVJIvLesxYM+5G4p1CwkDlZ1g==", - "requires": { - "@parcel/plugin": "2.7.0" - } - }, - "@parcel/transformer-react-refresh-wrap": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.7.0.tgz", - "integrity": "sha512-1vRmIJzyBA1nIiXTAU6tZExq2FvJj/2F0ft6KDw8GYPv0KjmdiPo/PmaZ7JeSVOM6SdXQIQCbTmp1vkMP7DtkA==", - "requires": { - "@parcel/plugin": "2.7.0", - "@parcel/utils": "2.7.0", - "react-refresh": "^0.9.0" - } - }, - "@parcel/transformer-sass": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-sass/-/transformer-sass-2.7.0.tgz", - "integrity": "sha512-6m2T6Y5eQLX7ckIeuOjXXIZbzhyovnl69AvJ2FujoWb2nA55H/kg6ZdbKjo3CfXkOfg9LyG3nVnOE5PMgMpRFQ==", - "requires": { - "@parcel/plugin": "2.7.0", - "@parcel/source-map": "^2.0.0", - "sass": "^1.38.0" - } - }, - "@parcel/transformer-svg": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.7.0.tgz", - "integrity": "sha512-ioER37zceuuE+K6ZrnjCyMUWEnv+63hIAFResc1OXxRhyt+7kzMz9ZqK0Mt6QMLwl1dxhkLmrU41n9IxzKZuSQ==", - "requires": { - "@parcel/diagnostic": "2.7.0", - "@parcel/hash": "2.7.0", - "@parcel/plugin": "2.7.0", - "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "posthtml-parser": "^0.10.1", - "posthtml-render": "^3.0.0", - "semver": "^5.7.1" - } - }, - "@parcel/types": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.7.0.tgz", - "integrity": "sha512-+dhXVUnseTCpJvBTGMp0V6X13z6O/A/+CUtwEpMGZ8XSmZ4Gk44GvaTiBOp0bJpWG4fvCKp+UmC8PYbrDiiziw==", - "requires": { - "@parcel/cache": "2.7.0", - "@parcel/diagnostic": "2.7.0", - "@parcel/fs": "2.7.0", - "@parcel/package-manager": "2.7.0", - "@parcel/source-map": "^2.0.0", - "@parcel/workers": "2.7.0", - "utility-types": "^3.10.0" - } - }, - "@parcel/utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.7.0.tgz", - "integrity": "sha512-jNZ5bIGg1r1RDRKi562o4kuVwnz+XJ2Ie3b0Zwrqwvgfj6AbRFIKzDd+h85dWWmcDYzKUbHp11u6VJl1u8Vapg==", - "requires": { - "@parcel/codeframe": "2.7.0", - "@parcel/diagnostic": "2.7.0", - "@parcel/hash": "2.7.0", - "@parcel/logger": "2.7.0", - "@parcel/markdown-ansi": "2.7.0", - "@parcel/source-map": "^2.0.0", - "chalk": "^4.1.0" - } - }, - "@parcel/watcher": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.5.tgz", - "integrity": "sha512-x0hUbjv891omnkcHD7ZOhiyyUqUUR6MNjq89JhEI3BxppeKWAm6NPQsqqRrAkCJBogdT/o/My21sXtTI9rJIsw==", - "requires": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - } - }, - "@parcel/workers": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.7.0.tgz", - "integrity": "sha512-99VfaOX+89+RaoTSyH9ZQtkMBFZBFMvJmVJ/GeJT6QCd2wtKBStTHlaSnQOkLD/iRjJCNwV2xpZmm8YkTwV+hg==", - "requires": { - "@parcel/diagnostic": "2.7.0", - "@parcel/logger": "2.7.0", - "@parcel/types": "2.7.0", - "@parcel/utils": "2.7.0", - "chrome-trace-event": "^1.0.2", - "nullthrows": "^1.1.1" - } - }, - "@shd101wyy/mume": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@shd101wyy/mume/-/mume-0.7.2.tgz", - "integrity": "sha512-FL5QSdy3u5M92cKvqAZFwNl4lffC2zNA5EBf6S2Vbz4rNAoyyD/s/7ejiGYIN/PMfIs9RWIAoFmo5RJYeLzeog==", - "requires": { - "babyparse": "^0.4.6", - "cheerio": "1.0.0-rc.3", - "chrome-location": "^1.2.1", - "fs-extra": "^8.0.1", - "imagemagick-cli": "^0.5.0", - "js-yaml": "^3.13.1", - "less": "^3.9.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "node-fetch": "^2.6.1", - "puppeteer-core": "1.15.0", - "qiniu": "^7.2.2", - "request": "^2.88.0", - "slash": "^2.0.0", - "temp": "^0.9.0", - "twemoji": "^13.1.0", - "uslug": "^1.0.4", - "vega-loader": "^4.1.0", - "yamljs": "^0.3.0" - }, - "dependencies": { - "cheerio": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.1", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" - }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - }, - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "requires": { - "@types/node": "*" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "@swc/helpers": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", - "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", - "requires": { - "tslib": "^2.4.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - } - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" - }, - "@types/node": { - "version": "18.7.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", - "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "abortcontroller-polyfill": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", - "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, - "address": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", - "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==" - }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "animate.css": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-4.1.1.tgz", - "integrity": "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==" - }, - "ansi_up": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/ansi_up/-/ansi_up-4.0.4.tgz", - "integrity": "sha512-vRxC8q6QY918MbehO869biJW4tiunJdjOhi5fpY6NLOliBQlZhOkKgABJKJqH+JZfb/WfjvjN1chLWI6tODerw==" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" - }, - "ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "requires": { - "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - } - } - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "babyparse": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/babyparse/-/babyparse-0.4.6.tgz", - "integrity": "sha512-fsX2GmTvhpKkmSa0DxJdkw2617HUT+xJ6RYR82w95GjI5A4yWjtOAB/0qcRsXj4VsdkI07jsHWhwqUkVgsZCEw==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "basic-auth": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", - "integrity": "sha512-CtGuTyWf3ig+sgRyC7uP6DM3N+5ur/p8L+FPfsd+BbIfIs74TFfCajZTHnCw6K5dqM0bZEbRIqRy1fAdiUJhTA==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "before": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/before/-/before-0.0.1.tgz", - "integrity": "sha512-1J5SWbkoVJH9DTALN8igB4p+nPKZzPrJ/HomqBDLpfUvDXCdjdBmBUcH5McZfur0lftVssVU6BZug5NYh87zTw==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - }, - "dependencies": { - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - } - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ==", - "requires": { - "inherits": "~2.0.0" - } - }, - "block-stream2": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", - "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", - "requires": { - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "bootstrap": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz", - "integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==", - "requires": {} - }, - "bootstrap-select": { - "version": "1.13.18", - "resolved": "https://registry.npmjs.org/bootstrap-select/-/bootstrap-select-1.13.18.tgz", - "integrity": "sha512-V1IzK4rxBq5FrJtkzSH6RmFLFBsjx50byFbfAf8jYyXROWs7ZpprGjdHeoyq2HSsHyjJhMMwjsQhRoYAfxCGow==", - "requires": {} - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", - "requires": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "bufferstreams": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.1.3.tgz", - "integrity": "sha512-HaJnVuslRF4g2kSDeyl++AaVizoitCpL9PglzCYwy0uHHyvWerfvEb8jWmYbF1z4kiVFolGomnxSGl+GUQp2jg==", - "requires": { - "readable-stream": "^2.0.2" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "caniuse-lite": { - "version": "1.0.30001384", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001384.tgz", - "integrity": "sha512-BBWt57kqWbc0GYZXb47wTXpmAgqr5LSibPzNjk/AWMdmJMQhLqOl3c/Kd4OAU/tu4NLfYkMx8Tlq3RVBkOBolQ==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chrome-location": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/chrome-location/-/chrome-location-1.2.1.tgz", - "integrity": "sha512-NPuxEKQ43JlEPjHsgU6HWk4ViLCWf4mlo3dz5s5syPSsq2AaekXnK6qTRwMmXhpTYXAVi4g5ncVnAbD9naz5fw==", - "requires": { - "userhome": "^1.0.0", - "which": "^1.0.5" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - }, - "clipboard": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", - "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "requires": { - "is-what": "^3.14.1" - } - }, - "copy-to": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", - "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "corser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", - "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==" - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cp-file": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.0.0.tgz", - "integrity": "sha512-OtHMgPugkgwHlbph25wlMKd358lZNhX1Y2viUpPoFmlBPlEiPIRhztYWha11grbGPnlM+urp5saVmwsChCIOEg==", - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "nested-error-stacks": "^2.0.0", - "pify": "^3.0.0", - "safe-buffer": "^5.0.1" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - } - } - }, - "crc32": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/crc32/-/crc32-0.2.2.tgz", - "integrity": "sha512-PFZEGbDUeoNbL2GHIEpJRQGheXReDody/9axKTxhXtQqIL443wnNigtVZO9iuCIMPApKZRv7k2xr8euXHqNxQQ==" - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==" - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "requires": { - "css-tree": "^1.1.2" - } - }, - "cubic2quad": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cubic2quad/-/cubic2quad-1.2.1.tgz", - "integrity": "sha512-wT5Y7mO8abrV16gnssKdmIhIbA9wSkeMzhh27jAguKrV82i24wER0vL5TGhUJ9dbJNDcigoRZ0IAHFEEEI4THQ==" - }, - "d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "requires": { - "internmap": "1 - 2" - } - }, - "d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "requires": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" - }, - "d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", - "requires": { - "d3-array": "2 - 3" - } - }, - "d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "requires": { - "d3-time": "1 - 3" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" - }, - "date-fns": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", - "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==" - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "default-user-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-user-agent/-/default-user-agent-1.0.0.tgz", - "integrity": "sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw==", - "requires": { - "os-name": "~1.0.3" - } - }, - "degenerator": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz", - "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==", - "requires": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0", - "vm2": "^3.9.8" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "desandro-matches-selector": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/desandro-matches-selector/-/desandro-matches-selector-2.0.2.tgz", - "integrity": "sha512-+1q0nXhdzg1IpIJdMKalUwvvskeKnYyEe3shPRwedNcWtnhEKT3ZxvFjzywHDeGcKViIxTCAoOYQWP1qD7VNyg==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" - }, - "digest-header": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/digest-header/-/digest-header-0.0.1.tgz", - "integrity": "sha512-Qi0KOZgRnkQJuvMWbs1ZRRajEnbsMU8xlJI4rHIbPC+skHQ30heO5cIHpUFT4jAvAe+zPtdavLSAxASqoyZ3cg==", - "requires": { - "utility": "0.1.11" - }, - "dependencies": { - "utility": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/utility/-/utility-0.1.11.tgz", - "integrity": "sha512-epFsJ71+/yC7MKMX7CM9azP31QBIQhywkiBUj74i/T3Y2TXtEor26QBkat7lGamrrNTr5CBI1imd/8F0Bmqw4g==", - "requires": { - "address": ">=0.0.1" - } - } - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - } - }, - "dotenv": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", - "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==" - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ecstatic": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz", - "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", - "requires": { - "he": "^1.1.1", - "mime": "^1.6.0", - "minimist": "^1.1.0", - "url-join": "^2.0.5" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "electron-to-chromium": { - "version": "1.4.233", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.233.tgz", - "integrity": "sha512-ejwIKXTg1wqbmkcRJh9Ur3hFGHFDZDw1POzdsVrB2WZjgRuRMHIQQKNpe64N/qh3ZtH2otEoRoS+s6arAAuAAw==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "entities": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz", - "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==" - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "optional": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "ev-emitter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-1.1.1.tgz", - "integrity": "sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q==" - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "extract-zip": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", - "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", - "requires": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", - "yauzl": "^2.10.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "requires": { - "pend": "~1.2.0" - } - }, - "file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "fizzy-ui-utils": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fizzy-ui-utils/-/fizzy-ui-utils-2.0.7.tgz", - "integrity": "sha512-CZXDVXQ1If3/r8s0T+v+qVeMshhfcuq0rqIFgJnrtd+Bu8GmDmqMjntjUePypVtjHXKJ6V4sw9zeyox34n9aCg==", - "requires": { - "desandro-matches-selector": "^2.0.0" - } - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" - }, - "font-awesome": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", - "integrity": "sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "formstream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/formstream/-/formstream-1.1.1.tgz", - "integrity": "sha512-yHRxt3qLFnhsKAfhReM4w17jP+U1OlhUjnKPPtonwKbIJO7oBP0MvoxkRUwb8AU9n0MIkYy5X5dK6pQnbj+R2Q==", - "requires": { - "destroy": "^1.0.4", - "mime": "^2.5.2", - "pause-stream": "~0.0.11" - }, - "dependencies": { - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" - } - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==", - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==" - }, - "get-size": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/get-size/-/get-size-2.0.3.tgz", - "integrity": "sha512-lXNzT/h/dTjTxRbm9BXb+SGxxzkm97h/PCIKtlN/CBCxxmkkIVV21udumMS93MuVTDX583gqc94v3RjuHmI+2Q==" - }, - "get-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", - "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", - "requires": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", - "requires": { - "delegate": "^3.1.2" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "htmlnano": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.2.tgz", - "integrity": "sha512-+ZrQFS4Ub+zd+/fWwfvoYCEGNEa0/zrpys6CyXxvZDwtL7Pl+pOtRkiujyvBQ7Lmfp7/iEPxtOFgxWA16Gkj3w==", - "requires": { - "cosmiconfig": "^7.0.1", - "posthtml": "^0.16.5", - "timsort": "^0.3.0" - } - }, - "htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "entities": "^4.3.0" - } - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "http-server": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz", - "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==", - "requires": { - "basic-auth": "^1.0.3", - "colors": "^1.4.0", - "corser": "^2.0.1", - "ecstatic": "^3.3.2", - "http-proxy": "^1.18.0", - "minimist": "^1.2.5", - "opener": "^1.5.1", - "portfinder": "^1.0.25", - "secure-compare": "3.0.1", - "union": "~0.5.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - } - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "optional": true - }, - "imagemagick-cli": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/imagemagick-cli/-/imagemagick-cli-0.5.0.tgz", - "integrity": "sha512-rlFbd3MrjysdavK0vUnwUxWvuEBHzXaK3LHVqBUIM6u+noKg5Vv2YljVmu78qEkDNIQ1+AS+17f3mgNMIe/Rlw==", - "requires": { - "debug": "^4.1.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "imagesloaded": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/imagesloaded/-/imagesloaded-4.1.4.tgz", - "integrity": "sha512-ltiBVcYpc/TYTF5nolkMNsnREHW+ICvfQ3Yla2Sgr71YFwQ86bDwV9hgpFhFtrGPuwEx5+LqOHIrdXBdoWwwsA==", - "requires": { - "ev-emitter": "^1.0.0" - } - }, - "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" - }, - "ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-json": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", - "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "isotope-layout": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/isotope-layout/-/isotope-layout-3.0.6.tgz", - "integrity": "sha512-z2ZKablhocXhoNyWwzJPFd7u7FWbYbVJA51Nvsqsod8jH2ExGc1SwDsSWKE54e3PhXzqf2yZPhFSq/c2MR1arw==", - "requires": { - "desandro-matches-selector": "^2.0.0", - "fizzy-ui-utils": "^2.0.4", - "get-size": "^2.0.0", - "masonry-layout": "^4.1.0", - "outlayer": "^2.1.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - }, - "jquery": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.1.tgz", - "integrity": "sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw==" - }, - "jquery-countdown": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jquery-countdown/-/jquery-countdown-2.2.0.tgz", - "integrity": "sha512-EKjzyaHYSQdOnn/eVvP84l044kDB6w//IR/25CHGyhJfT1Lb9pQdMo75n+MqZWgJpLprfeCyaPo/jaSn6sR5AA==" - }, - "jquery-visible": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jquery-visible/-/jquery-visible-1.2.0.tgz", - "integrity": "sha512-lj6Xqy7GYEwTD1audFYdv7SrBM6z7icPXNvRpS4e15RXtDksjgU7YF7EKrsqF5rCUZA99OqF+d5H8BGdcwMr+w==" - }, - "jquery.animate-number": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/jquery.animate-number/-/jquery.animate-number-0.0.14.tgz", - "integrity": "sha512-G4gylrSOPfREFGcoqIaHXM44I1JhfN4aHpAVGfIVvXW/hFUVEzRbMTwvpu5GVzYyuv2ITKQCgsU/IV8BMEliPQ==", - "requires": { - "jquery": ">= 1.7.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "k-web-theme": { - "version": "file:k-web-theme", - "requires": { - "@parcel/transformer-sass": "^2.7.0", - "@shd101wyy/mume": "^0.7.2", - "animate.css": "^4.1.1", - "ansi_up": "^4.0.4", - "bootstrap": "^4.5.3", - "bootstrap-select": "^1.13.18", - "cheerio": "^1.0.0-rc.3", - "clipboard": "^2.0.6", - "express": "^4.17.1", - "font-awesome": "^4.7.0", - "get-port": "^5.1.1", - "glob": "^7.1.6", - "http-server": "^0.12.3", - "imagesloaded": "^4.1.4", - "isotope-layout": "^3.0.6", - "jquery": "^3.5.1", - "jquery-countdown": "^2.2.0", - "jquery-visible": "^1.2.0", - "jquery.animate-number": "0.0.14", - "katex": "^0.13.13", - "magnific-popup": "^1.1.0", - "markdown-it": "^12.0.2", - "markdown-it-anchor": "^6.0.1", - "markdown-it-attrs": "^4.1.0", - "owl.carousel": "^2.3.4", - "parcel": "^2.7.0", - "popper.js": "^1.16.1", - "prismjs": "^1.22.0", - "sass": "^1.29.0", - "sitemap-generator": "^8.5.1", - "toastr": "^2.1.4", - "twitter-fetcher": "^18.0.4", - "webfonts-generator": "^0.4.0", - "wow.js": "^1.2.2", - "yaml": "^1.10.0" - } - }, - "katex": { - "version": "0.13.24", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.13.24.tgz", - "integrity": "sha512-jZxYuKCma3VS5UuxOx/rFV1QyGSl3Uy/i0kTJF3HgQ5xMinCQVF8Zd4bMY/9aI9b9A2pjIBOsjSSm68ykTAr8w==", - "requires": { - "commander": "^8.0.0" - } - }, - "less": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz", - "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==", - "requires": { - "copy-anything": "^2.0.1", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "native-request": "^1.0.5", - "source-map": "~0.6.0", - "tslib": "^1.10.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "requires": { - "uc.micro": "^1.0.1" - } - }, - "lmdb": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.5.2.tgz", - "integrity": "sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==", - "requires": { - "@lmdb/lmdb-darwin-arm64": "2.5.2", - "@lmdb/lmdb-darwin-x64": "2.5.2", - "@lmdb/lmdb-linux-arm": "2.5.2", - "@lmdb/lmdb-linux-arm64": "2.5.2", - "@lmdb/lmdb-linux-x64": "2.5.2", - "@lmdb/lmdb-win32-x64": "2.5.2", - "msgpackr": "^1.5.4", - "node-addon-api": "^4.3.0", - "node-gyp-build-optional-packages": "5.0.3", - "ordered-binary": "^1.2.4", - "weak-lru-cache": "^1.2.2" - }, - "dependencies": { - "node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - } - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "magnific-popup": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/magnific-popup/-/magnific-popup-1.1.0.tgz", - "integrity": "sha512-ghSa/1TKsOUL6ZlHfcfFCoB9Wms2nqaDdBEPh6QX9jFYQyMkUu7ciU1mrxedWWq4NM2m1C/llhHKLt6GKRYOzg==" - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "optional": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "requires": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" - } - } - }, - "markdown-it-anchor": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-6.0.1.tgz", - "integrity": "sha512-8qX4r5R6AtXla9HKCouEQ40inw69O5jR4VUXlZySsBLxIXlsJ3Yi9JV6JWPU4ZdA8jWTGDDJjJYNLwQ0W4jCag==", - "requires": {} - }, - "markdown-it-attrs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.1.4.tgz", - "integrity": "sha512-53Zfv8PTb6rlVFDlD106xcZHKBSsRZKJ2IW/rTxEJBEVbVaoxaNsmRkG0HXfbHl2SK8kaxZ2QKqdthWy/QBwmA==", - "requires": {} - }, - "masonry-layout": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/masonry-layout/-/masonry-layout-4.2.2.tgz", - "integrity": "sha512-iGtAlrpHNyxaR19CvKC3npnEcAwszXoyJiI8ARV2ePi7fmYhIud25MHK8Zx4P0LCC4d3TNO9+rFa1KoK1OEOaA==", - "requires": { - "get-size": "^2.0.2", - "outlayer": "^2.1.0" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "microbuffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/microbuffer/-/microbuffer-1.0.0.tgz", - "integrity": "sha512-O/SUXauVN4x6RaEJFqSPcXNtLFL+QzJHKZlyDVYFwcDDRVca3Fa/37QXXC+4zAGGa4YhHrHxKXuuHvLDIQECtA==" - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "mitt": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.3.tgz", - "integrity": "sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==" - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, - "mockdate": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", - "integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "msgpackr": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.6.2.tgz", - "integrity": "sha512-bqSQ0DYJbXbrJcrZFmMygUZmqQiDfI2ewFVWcrZY12w5XHWtPuW4WppDT/e63Uu311ajwkRRXSoF0uILroBeTA==", - "requires": { - "msgpackr-extract": "^2.0.2" - } - }, - "msgpackr-extract": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-2.1.2.tgz", - "integrity": "sha512-cmrmERQFb19NX2JABOGtrKdHMyI6RUyceaPBQ2iRz9GnDkjBWFjNJC0jyyoOfZl2U/LZE3tQCCQc4dlRyA8mcA==", - "optional": true, - "requires": { - "@msgpackr-extract/msgpackr-extract-darwin-arm64": "2.1.2", - "@msgpackr-extract/msgpackr-extract-darwin-x64": "2.1.2", - "@msgpackr-extract/msgpackr-extract-linux-arm": "2.1.2", - "@msgpackr-extract/msgpackr-extract-linux-arm64": "2.1.2", - "@msgpackr-extract/msgpackr-extract-linux-x64": "2.1.2", - "@msgpackr-extract/msgpackr-extract-win32-x64": "2.1.2", - "node-gyp-build-optional-packages": "5.0.3" - } - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" - }, - "native-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.1.0.tgz", - "integrity": "sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==", - "optional": true - }, - "neatequal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/neatequal/-/neatequal-1.0.0.tgz", - "integrity": "sha512-sVt5awO4a4w24QmAthdrCPiVRW3naB8FGLdyadin01BH+6BzNPEBwGrpwCczQvPlULS6uXTItTe1PJ5P0kYm7A==", - "requires": { - "varstream": "^0.3.2" - } - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "nested-error-stacks": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", - "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==" - }, - "netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==" - } - } - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "node-gyp-build-optional-packages": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz", - "integrity": "sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==" - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "ordered-binary": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.3.0.tgz", - "integrity": "sha512-knIeYepTI6BDAzGxqFEDGtI/iGqs57H32CInAIxEvAHG46vk1Di0CEpyc1A7iY39B1mfik3g3KLYwOTNnnMHLA==" - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==" - }, - "os-name": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-1.0.3.tgz", - "integrity": "sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew==", - "requires": { - "osx-release": "^1.0.0", - "win-release": "^1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "osx-release": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/osx-release/-/osx-release-1.1.0.tgz", - "integrity": "sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A==", - "requires": { - "minimist": "^1.1.0" - } - }, - "outlayer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/outlayer/-/outlayer-2.1.1.tgz", - "integrity": "sha512-+GplXsCQ3VrbGujAeHEzP9SXsBmJxzn/YdDSQZL0xqBmAWBmortu2Y9Gwdp9J0bgDQ8/YNIPMoBM13nTwZfAhw==", - "requires": { - "ev-emitter": "^1.0.0", - "fizzy-ui-utils": "^2.0.0", - "get-size": "^2.0.2" - } - }, - "owl.carousel": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/owl.carousel/-/owl.carousel-2.3.4.tgz", - "integrity": "sha512-JaDss9+feAvEW8KZppPSpllfposEzQiW+Ytt/Xm5t/3CTJ7YVmkh6RkWixoA2yXk2boIwedYxOvrrppIGzru9A==", - "requires": { - "jquery": ">=1.8.3" - } - }, - "pac-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz", - "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==", - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^5.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" - }, - "dependencies": { - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "pac-resolver": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz", - "integrity": "sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==", - "requires": { - "degenerator": "^3.0.2", - "ip": "^1.1.5", - "netmask": "^2.0.2" - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "parcel": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.7.0.tgz", - "integrity": "sha512-pRYwnivwtNP0tip8xYSo4zCB0XhLt7/gJzP1p8OovCqkmFjG9VG+GW9TcAKqMIo0ovEa9tT+/s6gY1Qy+BONGQ==", - "requires": { - "@parcel/config-default": "2.7.0", - "@parcel/core": "2.7.0", - "@parcel/diagnostic": "2.7.0", - "@parcel/events": "2.7.0", - "@parcel/fs": "2.7.0", - "@parcel/logger": "2.7.0", - "@parcel/package-manager": "2.7.0", - "@parcel/reporter-cli": "2.7.0", - "@parcel/reporter-dev-server": "2.7.0", - "@parcel/utils": "2.7.0", - "chalk": "^4.1.0", - "commander": "^7.0.0", - "get-port": "^4.2.0", - "v8-compile-cache": "^2.0.0" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "get-port": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", - "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==" - } - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", - "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", - "requires": { - "entities": "^4.3.0" - } - }, - "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "requires": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "requires": { - "through": "~2.3" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "optional": true - }, - "popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" - }, - "portfinder": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", - "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", - "requires": { - "async": "^2.6.4", - "debug": "^3.2.7", - "mkdirp": "^0.5.6" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "posthtml": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", - "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", - "requires": { - "posthtml-parser": "^0.11.0", - "posthtml-render": "^3.0.0" - }, - "dependencies": { - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "dependencies": { - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - } - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" - }, - "htmlparser2": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", - "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.2", - "domutils": "^2.8.0", - "entities": "^3.0.1" - } - }, - "posthtml-parser": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", - "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", - "requires": { - "htmlparser2": "^7.1.1" - } - } - } - }, - "posthtml-parser": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", - "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", - "requires": { - "htmlparser2": "^7.1.1" - }, - "dependencies": { - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "dependencies": { - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - } - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" - }, - "htmlparser2": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", - "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.2", - "domutils": "^2.8.0", - "entities": "^3.0.1" - } - } - } - }, - "posthtml-render": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", - "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", - "requires": { - "is-json": "^2.0.1" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" - }, - "prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz", - "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==", - "requires": { - "agent-base": "^6.0.0", - "debug": "4", - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^5.0.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^5.0.0" - }, - "dependencies": { - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "optional": true - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "puppeteer-core": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-1.15.0.tgz", - "integrity": "sha512-AH82x8Tx0/JkubeF6U12y8SuVB5vFgsw8lt/Ox5MhXaAktREFiotCTq324U2nPtJUnh2A8yJciDnzAmhbHidqQ==", - "requires": { - "debug": "^4.1.0", - "extract-zip": "^1.6.6", - "https-proxy-agent": "^2.2.1", - "mime": "^2.0.3", - "progress": "^2.0.1", - "proxy-from-env": "^1.0.0", - "rimraf": "^2.6.1", - "ws": "^6.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" - }, - "qiniu": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/qiniu/-/qiniu-7.7.0.tgz", - "integrity": "sha512-p8wZHDXzqCVtlPIygqIzpO6P59e5KcNAOf85oi6O7K5M4xjnwoi6L3e0F8IXgd38nb2PzWOH3XUkSbNAYW0g7Q==", - "requires": { - "agentkeepalive": "^4.0.2", - "before": "^0.0.1", - "block-stream2": "^2.0.0", - "crc32": "^0.2.2", - "destroy": "^1.0.4", - "encodeurl": "^1.0.1", - "formstream": "^1.1.0", - "mime": "^2.4.4", - "mockdate": "^3.0.5", - "tunnel-agent": "^0.6.0", - "urllib": "^2.34.1" - }, - "dependencies": { - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" - } - } - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "react-error-overlay": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", - "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" - }, - "react-refresh": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", - "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" - } - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "robots-parser": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-2.4.0.tgz", - "integrity": "sha512-oO8f2SI04dJk3pbj2KOMJ4G6QfPAgqcGmrYGmansIcpRewIPT2ljWEt5I+ip6EgiyaLo+RXkkUWw74M25HDkMA==" - }, - "rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sass": { - "version": "1.54.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.5.tgz", - "integrity": "sha512-p7DTOzxkUPa/63FU0R3KApkRHwcVZYC0PLnLm5iyZACyp15qSi32x7zVUhRdABAATmkALqgGrjCJAcWvobmhHw==", - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "secure-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", - "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==" - }, - "select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "simplecrawler": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/simplecrawler/-/simplecrawler-1.1.9.tgz", - "integrity": "sha512-IY5YmeJWvfc1zpy9so1p/EknCqNum3Y9tmnzuLWZqKEwbntGXPGvN0SOtr+XqT4BHjfek2C12g3Tg1yK7Hoh8g==", - "requires": { - "async": "^3.1.0", - "iconv-lite": "^0.5.0", - "robots-parser": "^2.1.1", - "urijs": "^1.19.1" - }, - "dependencies": { - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "iconv-lite": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", - "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "sitemap-generator": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/sitemap-generator/-/sitemap-generator-8.5.1.tgz", - "integrity": "sha512-k0IWBCFPU1bhNLOquJ07cHfHJNrRB/2adawR0jduSCcA7CuzxfHtfDzgvNDhH0Yv4HOVgte33M58Yun/dcHS3w==", - "requires": { - "async": "2.6.1", - "cheerio": "1.0.0-rc.2", - "cp-file": "6.0.0", - "crypto-random-string": "1.0.0", - "date-fns": "1.29.0", - "lodash": "4.17.20", - "mitt": "1.1.3", - "normalize-url": "3.3.0", - "simplecrawler": "1.1.9", - "url-parse": "1.4.7" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "requires": { - "lodash": "^4.17.10" - } - }, - "cheerio": { - "version": "1.0.0-rc.2", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", - "integrity": "sha512-9LDHQy1jHc/eXMzPN6/oah9Qba4CjdKECC7YYEE/2zge/tsGwt19NQp5NFdfd5Lx6TZlyC5SXNQkG41P9r6XDg==", - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" - }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - }, - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "requires": { - "@types/node": "*" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" - }, - "socks": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", - "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "dependencies": { - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" - } - } - }, - "socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "requires": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - }, - "dependencies": { - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string.fromcodepoint": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", - "integrity": "sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==" - }, - "string.prototype.codepointat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", - "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "svg-pathdata": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-1.0.4.tgz", - "integrity": "sha512-afGVCE1xFbmI/uV6XiToTwnHZZtSiW9u8EBxZqRE25pPGk2Z9eEvT5nhAPRUnvUWs9FqwjdJeElkqoWKeW3JGA==", - "requires": { - "readable-stream": "~2.0.4" - }, - "dependencies": { - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==" - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha512-TXcFfb63BQe1+ySzsHZI/5v1aJPCShfqvWJ64ayNImXMsN1Cd0YGk/wm8KB7/OeessgPc9QvS9Zou8QTkFzsLw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - } - } - }, - "svg2ttf": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/svg2ttf/-/svg2ttf-4.3.0.tgz", - "integrity": "sha512-LZ0B7zzHWLWbzLzwaKGHQvPOuxCXLReIb3LSxFSGUy1gMw2Utk6KGNbTmbmRL6Rk1qDSmTixnDrQgnXaL9n0CA==", - "requires": { - "argparse": "^1.0.6", - "cubic2quad": "^1.0.0", - "lodash": "^4.17.10", - "microbuffer": "^1.0.0", - "svgpath": "^2.1.5", - "xmldom": "~0.1.22" - } - }, - "svgicons2svgfont": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/svgicons2svgfont/-/svgicons2svgfont-5.0.2.tgz", - "integrity": "sha512-N9GG8atI7eKksJpLLDYXHzKcNy698FL+Bdu0sXgwURgVzNmeD35iSCnZhNuPMs4Ve2tg8vqHXI1ZNEWU6vhwjw==", - "requires": { - "commander": "^2.9.0", - "neatequal": "^1.0.0", - "readable-stream": "^2.0.4", - "sax": "^1.1.5", - "string.fromcodepoint": "^0.2.1", - "string.prototype.codepointat": "^0.2.0", - "svg-pathdata": "^1.0.4" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } - } - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - } - } - }, - "svgpath": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/svgpath/-/svgpath-2.5.0.tgz", - "integrity": "sha512-o/vohwqjUO9nDAh4rcjE3KaW/v//At8UJu2LJMybXidf5QLQLVA4bxH0//4YCsr+1H4Gw1Wi/Jc62ynzSBYidw==" - }, - "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - }, - "temp": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", - "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", - "requires": { - "mkdirp": "^0.5.1", - "rimraf": "~2.6.2" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==" - }, - "terser": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", - "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } - } - }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==" - }, - "tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toastr": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/toastr/-/toastr-2.1.4.tgz", - "integrity": "sha512-LIy77F5n+sz4tefMmFOntcJ6HL0Fv3k1TDnNmFZ0bU/GcvIIfy6eG2v7zQmMiYgaalAiUv75ttFrPn5s0gyqlA==", - "requires": { - "jquery": ">=1.12.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "topojson-client": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", - "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", - "requires": { - "commander": "2" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "ttf2eot": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ttf2eot/-/ttf2eot-2.0.0.tgz", - "integrity": "sha512-U56aG2Ylw7psLOmakjemAzmpqVgeadwENg9oaDjaZG5NYX4WB6+7h74bNPcc+0BXsoU5A/XWiHabDXyzFOmsxQ==", - "requires": { - "argparse": "^1.0.6", - "microbuffer": "^1.0.0" - } - }, - "ttf2woff": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ttf2woff/-/ttf2woff-2.0.2.tgz", - "integrity": "sha512-X68badwBjAy/+itU49scLjXUL094up+rHuYk+YAOTTBYSUMOmLZ7VyhZJuqQESj1gnyLAC2/5V8Euv+mExmyPA==", - "requires": { - "argparse": "^1.0.6", - "microbuffer": "^1.0.0", - "pako": "^1.0.0" - } - }, - "ttf2woff2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/ttf2woff2/-/ttf2woff2-2.0.3.tgz", - "integrity": "sha512-HVI+ZVmIbHAxfmbxV/Ahjh20che2WUCs4xWIcCUaD/BLEof/ylYUjnc0DAhpYsAzEJy1kQwkOQD45RLgtWQHfw==", - "requires": { - "bindings": "^1.2.1", - "bufferstreams": "^1.1.0", - "nan": "^2.1.0", - "node-gyp": "^3.0.3" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "twemoji": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/twemoji/-/twemoji-13.1.1.tgz", - "integrity": "sha512-IIIoq+n1lk1M1+evBKZD3DO0ud02fDQ4ssbgAv8rp3YBWUeNmskjlisFUPPDacQ50XS3bhrd4Kq9Q2gqhxb0dg==", - "requires": { - "fs-extra": "^8.0.1", - "jsonfile": "^5.0.0", - "twemoji-parser": "13.1.0", - "universalify": "^0.1.2" - }, - "dependencies": { - "jsonfile": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-5.0.0.tgz", - "integrity": "sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^0.1.2" - } - } - } - }, - "twemoji-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/twemoji-parser/-/twemoji-parser-13.1.0.tgz", - "integrity": "sha512-AQOzLJpYlpWMy8n+0ATyKKZzWlZBJN+G0C+5lhX7Ftc2PeEVdUU/7ns2Pn2vVje26AIZ/OHwFoUbdv6YYD/wGg==" - }, - "twitter-fetcher": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/twitter-fetcher/-/twitter-fetcher-18.0.4.tgz", - "integrity": "sha512-p6HIJfzYLWKVT1rDGqq6wlbfCoZiRAWC6o6zkhxqkt7s7gNxW04xrCy8mDIjl6GHVGbdN+JQtSpVhs0Mp2PKfg==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "uglify-js": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.0.tgz", - "integrity": "sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg==", - "optional": true - }, - "underscore": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.4.tgz", - "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==" - }, - "unescape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unescape/-/unescape-1.0.1.tgz", - "integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==", - "requires": { - "extend-shallow": "^2.0.1" - } - }, - "union": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", - "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", - "requires": { - "qs": "^6.4.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unorm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", - "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "urijs": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" - }, - "url-join": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", - "integrity": "sha512-c2H1fIgpUdwFRIru9HFno5DT73Ok8hg5oOb5AT3ayIgvCRfxgs2jyt5Slw8kEB7j3QUr6yJmMPDT/odjk7jXow==" - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "urllib": { - "version": "2.38.1", - "resolved": "https://registry.npmjs.org/urllib/-/urllib-2.38.1.tgz", - "integrity": "sha512-1tvjdL74oT9aV4X+SIjE1BXyes5PbfhHKhK4IlhoKhKqk4nD5/lXE90v10WZ02kELWIPI4w7ADneEQ4i7dPjiQ==", - "requires": { - "any-promise": "^1.3.0", - "content-type": "^1.0.2", - "debug": "^2.6.9", - "default-user-agent": "^1.0.0", - "digest-header": "^0.0.1", - "ee-first": "~1.1.1", - "formstream": "^1.1.0", - "humanize-ms": "^1.2.0", - "iconv-lite": "^0.4.15", - "ip": "^1.1.5", - "proxy-agent": "^5.0.0", - "pump": "^3.0.0", - "qs": "^6.4.0", - "statuses": "^1.3.1", - "utility": "^1.16.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" - } - } - }, - "userhome": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/userhome/-/userhome-1.0.0.tgz", - "integrity": "sha512-ayFKY3H+Pwfy4W98yPdtH1VqH4psDeyW8lYYFzfecR9d6hqLpqhecktvYR3SEEXt7vG0S1JEpciI3g94pMErig==" - }, - "uslug": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/uslug/-/uslug-1.0.4.tgz", - "integrity": "sha512-Jrbpp/NS3TvIGNjfJT1sn3/BCeykoxR8GbNYW5lF6fUscLkbXFwj1b7m4DvIkHm8k3Qr6Co68lbTmoZTMGk/ow==", - "requires": { - "unorm": ">= 1.0.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "utility": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/utility/-/utility-1.17.0.tgz", - "integrity": "sha512-KdVkF9An/0239BJ4+dqOa7NPrPIOeQE9AGfx0XS16O9DBiHNHRJMoeU5nL6pRGAkgJOqdOu8R4gBRcXnAocJKw==", - "requires": { - "copy-to": "^2.0.1", - "escape-html": "^1.0.3", - "mkdirp": "^0.5.1", - "mz": "^2.7.0", - "unescape": "^1.0.1" - } - }, - "utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - }, - "varstream": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/varstream/-/varstream-0.3.2.tgz", - "integrity": "sha512-OpR3Usr9dGZZbDttlTxdviGdxiURI0prX68+DuaN/JfIDbK9ZOmREKM6PgmelsejMnhgjXmEEEgf+E4NbsSqMg==", - "requires": { - "readable-stream": "^1.0.33" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - } - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "vega-format": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vega-format/-/vega-format-1.1.0.tgz", - "integrity": "sha512-6mgpeWw8yGdG0Zdi8aVkx5oUrpJGOpNxqazC2858RSDPvChM/jDFlgRMTYw52qk7cxU0L08ARp4BwmXaI75j0w==", - "requires": { - "d3-array": "^3.1.1", - "d3-format": "^3.1.0", - "d3-time-format": "^4.1.0", - "vega-time": "^2.0.3", - "vega-util": "^1.15.2" - } - }, - "vega-loader": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vega-loader/-/vega-loader-4.5.0.tgz", - "integrity": "sha512-EkAyzbx0pCYxH3v3wghGVCaKINWxHfgbQ2pYDiYv0yo8e04S8Mv/IlRGTt6BAe7cLhrk1WZ4zh20QOppnGG05w==", - "requires": { - "d3-dsv": "^3.0.1", - "node-fetch": "^2.6.7", - "topojson-client": "^3.1.0", - "vega-format": "^1.1.0", - "vega-util": "^1.16.0" - } - }, - "vega-time": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vega-time/-/vega-time-2.1.0.tgz", - "integrity": "sha512-Q9/l3S6Br1RPX5HZvyLD/cQ4K6K8DtpR09/1y7D66gxNorg2+HGzYZINH9nUvN3mxoXcBWg4cCUh3+JvmkDaEg==", - "requires": { - "d3-array": "^3.1.1", - "d3-time": "^3.0.0", - "vega-util": "^1.15.2" - } - }, - "vega-util": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.17.0.tgz", - "integrity": "sha512-HTaydZd9De3yf+8jH66zL4dXJ1d1p5OIFyoBzFiOli4IJbwkL1jrefCKz6AHDm1kYBzDJ0X4bN+CzZSCTvNk1w==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - } - } - }, - "vm2": { - "version": "3.9.18", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.18.tgz", - "integrity": "sha512-iM7PchOElv6Uv6Q+0Hq7dcgDtWWT6SizYqVcvol+1WQc+E9HlgTCnPozbQNSP3yDV9oXHQOEQu530w2q/BCVZg==", - "requires": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0" - } - }, - "weak-lru-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", - "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==" - }, - "webfonts-generator": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/webfonts-generator/-/webfonts-generator-0.4.0.tgz", - "integrity": "sha512-2tz14d9lDYkNopbogp3cCEo0oQj6tHYo17v6nYlJQT57CwzQy/7Y6a1UzleNK9jSshez2qau6MHcHy/gbDwssQ==", - "requires": { - "handlebars": "^4.0.5", - "mkdirp": "^0.5.0", - "q": "^1.1.2", - "svg2ttf": "^4.0.0", - "svgicons2svgfont": "^5.0.0", - "ttf2eot": "^2.0.0", - "ttf2woff": "^2.0.1", - "ttf2woff2": "^2.0.3", - "underscore": "^1.7.0", - "url-join": "^1.1.0" - }, - "dependencies": { - "url-join": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", - "integrity": "sha512-zz1wZk4Lb5PTVwZ3HWDmm8XnlPvmOof6/fjdDPA5yBrUcbtV64U6bV832Zf1BtU2WkBBWaUT46wCs+l0HP5nhg==" - } - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "win-release": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", - "integrity": "sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw==", - "requires": { - "semver": "^5.0.1" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - }, - "wow.js": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/wow.js/-/wow.js-1.2.2.tgz", - "integrity": "sha512-YTW9eiZimHCJDWofsiz2507txaPteUiQD461I/D8533AiRAn3+Y68/1LDuQ3OTgPjagGZLPYKrpoSgjzeQrO6A==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xmldom": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", - "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==" - }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==" - }, - "xxhash-wasm": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", - "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yamljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", - "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", - "requires": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - } - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - } - } -} diff --git a/web/package.json b/web/package.json deleted file mode 100644 index b7f790b58b..0000000000 --- a/web/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "evm-semantics", - "version": "1.0.1", - "description": "--- permalink: README.html copyright: Copyright (c) 2010-2020 Runtime Verification Team. All Rights Reserved. ---", - "main": "index.html", - "scripts": { - "build": "cd ./k-web-theme && npm install && npm run build && cd - && npm install ./k-web-theme && cp -r ./k-web-theme/public_content/. ./public_content/ && node build-html.js", - "build-sitemap": "node sitemap/build-sitemap.js https://jellopaper.org/", - "serve": "http-server public_content" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/kframework/evm-semantics.git" - }, - "author": "EVM Semantics | Runtime Verification", - "license": "UNLICENSED", - "devDependencies": { - "http-server": "^0.12.3" - }, - "dependencies": { - "k-web-theme": "file:k-web-theme" - }, - "bugs": { - "url": "https://github.com/runtimeverification/evm-semantics/issues" - }, - "homepage": "https://github.com/runtimeverification/evm-semantics/#readme" -} diff --git a/web/public_content/.gitignore b/web/public_content/.gitignore deleted file mode 100644 index e037eafb20..0000000000 --- a/web/public_content/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -assets/css -assets/js -assets/sass -*.html -tutorial -sitemap.xml \ No newline at end of file diff --git a/web/sitemap/build-sitemap.js b/web/sitemap/build-sitemap.js deleted file mode 100755 index e4dff8e4c0..0000000000 --- a/web/sitemap/build-sitemap.js +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env node -const { buildSitemap } = require("k-web-theme"); -const path = require("path"); - -const websiteOrigin = process.argv[2]; -buildSitemap({ - websiteOrigin, - websiteDirectory: path.join(__dirname, "../public_content/"), - sitemapPath: path.join(__dirname, "../public_content/sitemap.xml"), - ignore: (url) => url.endsWith(".html"), -}); diff --git a/web/static_content/html/404.html b/web/static_content/html/404.html deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/web/static_content/html/500.html b/web/static_content/html/500.html deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/web/static_content/html/include/footer.html b/web/static_content/html/include/footer.html deleted file mode 100644 index 7653547e8c..0000000000 --- a/web/static_content/html/include/footer.html +++ /dev/null @@ -1 +0,0 @@ -{{$WEBSITE_FOOTER}} \ No newline at end of file diff --git a/web/static_content/html/include/ga.html b/web/static_content/html/include/ga.html deleted file mode 100644 index c902440fcd..0000000000 --- a/web/static_content/html/include/ga.html +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/web/static_content/html/include/head.html b/web/static_content/html/include/head.html deleted file mode 100644 index 34817165aa..0000000000 --- a/web/static_content/html/include/head.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - -KEVM: Semantics of EVM in K | Runtime Verification, Inc. - - - - - - - - - - - - - - - diff --git a/web/static_content/html/include/header.html b/web/static_content/html/include/header.html deleted file mode 100644 index d133e6c6d9..0000000000 --- a/web/static_content/html/include/header.html +++ /dev/null @@ -1,25 +0,0 @@ - diff --git a/web/static_content/html/include/sidebar.html b/web/static_content/html/include/sidebar.html deleted file mode 100644 index a32394a360..0000000000 --- a/web/static_content/html/include/sidebar.html +++ /dev/null @@ -1,29 +0,0 @@ -
- - -
diff --git a/web/static_content/html/page_template.html b/web/static_content/html/page_template.html deleted file mode 100644 index 6104e4bd52..0000000000 --- a/web/static_content/html/page_template.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - {{include/head.html}} - - - - {{include/header.html}} - -
-
- {{include/sidebar.html}} -
-
{{$MARKDOWN_HTML}}
-
- - -
- {{$PAGE_TOC_HTML}} -
-
- -
-
- {{include/footer.html}} - - - {{include/ga.html}} - -